发布于: Aug 22, 2022
大数据元数据管理是高效利用数据湖的关键,本文将会为你讲解如何使用 Apache Atlas on Amazon EMR 进行元数据的搜索工作。
为了演示 Apache Atlas 的功能,我们在本文中执行了以下操作(您可以选择 1a 或者 1b 任意一种方式来启动带 Atlas 的 EMR 集群):
- 使用 Amazon Web Services CLI 或 Amazon Web Services CloudFormation 启动一个 Amazon EMR 集群
- 使用 Hue 填充外部 Hive 表
- 查看 Hive 表的数据沿袭
- 创建一个分类
- 使用 Atlas 领域专用语言发现元数据
以下步骤将指导您使用 Amazon Web Services CLI 安装 Atlas on Amazon EMR。此安装将使用 Hadoop、HBase、Hive 和 Zookeeper 创建一个 Amazon EMR 集群。此外还执行了一个步骤,运行位于 Amazon S3 存储桶中的脚本,以将 Apache Atlas 安装在 /apache/atlas 文件夹下。
运行自动化外壳 shell 脚本基于如下假设:
- 您已配置了 Amazon Web Services CLI 程序包的有效本地副本,其中包含访问密钥和加密密钥。
- 您在计划部署集群的 Amazon Web Services 区域中具有默认密钥对、VPC 和子网。
- 您拥有足够的权限,可以在 Amazon Web Services CLI 中配置的默认 Amazon Web Services 区域内创建 S3 存储桶和 Amazon EMR 集群。
aws emr create-cluster --applications Name=Hive Name=HBase Name=Hue Name=Hadoop Name=ZooKeeper \ --tags Name="EMR-Atlas" \ --release-label emr-5.16.0 \ --ec2-attributes SubnetId=<subnet-xxxxx>,KeyName=<Key Name> \ --use-default-roles \ --ebs-root-volume-size 100 \ --instance-groups 'InstanceGroupType=MASTER, InstanceCount=1, InstanceType=m4.xlarge, InstanceGroupType=CORE, InstanceCount=1, InstanceType=m4.xlarge \ --log-uri ‘<S3 location for logging>’ \ --steps Name='Run Remote Script',Jar=command-runner.jar,Args=[bash,-c,'curl https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-blog-emr-atlas/apache-atlas-emr.sh -o /tmp/script.sh; chmod +x /tmp/script.sh; /tmp/script.sh']
成功执行命令后,系统将显示包含集群 ID 的输出:
{ "ClusterId": "j-2V3BNEB9XQ54H" }
使用以下命令列出活动集群的名称(准备就绪后,您的集群将显示在列表中):
aws emr list-clusters --active
在上一条命令的输出中,查找服务器名称 EMR-Atlas(除非您在脚本中更改了该默认名称)。如果您有可用的 jq 命令行实用程序,则可以运行以下命令来过滤除了该名称及其对应集群 ID 之外的所有内容:
aws emr list-clusters --active | jq '.[][] | {(.Name): .Id}' 输出示例: { "external hive store on rds-external-store": "j-1MO3L3XSXZ45V" } { "EMR-Atlas": "j-301TZ1GBCLK4K" }
在集群显示在活动列表中之后,Amazon EMR 和 Atlas 即可开始运行。
您还可以使用 CloudFormation 启动集群。使用 emr-atlas.template 来设置您的 Amazon EMR 集群,或使用以下按钮直接从 Amazon Web Services 管理控制台启动:
若要启动,请为以下参数提供值:
VPC |
<VPC> |
Subnet |
<子网> |
EMRLogDir |
<Amazon EMR 日志记录目录,例如 s3://xxx> |
KeyName |
<EC2 密钥对名称> |
使用 CloudFormation 模板预置 Amazon EMR 集群可实现与前面列示的 CLI 命令相同的结果。
在继续下一步之前,请耐心等待,直到 CloudFormation 堆栈的事件中显示堆栈的状态已转为“CREATE_COMPLETE”。
接下来,您登录到 Apache Atlas 和 Hue,并使用 Hue 创建 Hive 表。
要登录到 Atlas,请首先使用 Amazon EMR 管理控制台在集群安装中找到 Master 服务器的公共 DNS 名称。然后,使用以下命令创建到 Atlas Web 浏览器的 SSH 隧道。
ssh -L 21000:localhost:21000 -i key.pem hadoop@<EMR Master IP Address>
如果前面的命令不起作用,请确保您的密钥文件 (*.pem) 具有适当的权限。您可能还必须向主服务器的安全组添加一条 SSH(端口 22)的入站规则。
成功创建 SSH 隧道后,请使用以下 URL 访问 Apache Atlas UI。
http://localhost:21000
此时您应该看到如下所示的屏幕。默认的登录详细信息是用户名 admin、密码 admin。
要为 Hue 设置 Web 界面,请遵循 Amazon EMR 文档中的步骤。与对 Apache Atlas 执行的操作一样,在远程端口 8888 上创建 SSH 隧道以进行控制台访问:
ssh -L 8888:localhost:8888 -i key.pem hadoop@<EMR Master IP Address>
隧道启动后,使用以下 URL 进行 Hue 控制台访问。
http://localhost:8888/
首次登录时,系统会要求您创建一个 Hue 超级用户,如下所示。注意保存好超级用户凭据,切勿遗失。
创建 Hue 超级用户后,您可以使用 Hue 控制台运行 Hive 查询。
登录到 Hue 后,请执行以下步骤并运行以下 Hive 查询:
o 运行 HQL 新建一个数据库:
create database atlas_emr; use atlas_emr;
o 使用存储在 S3 上的数据创建一个名为 trip_details 的新外部表。将 S3 位置更改为您拥有的存储桶地址。
CREATE external TABLE trip_details ( pickup_date string , pickup_time string , location_id int , trip_time_in_secs int , trip_number int , dispatching_app string , affiliated_app string ) row format delimited fields terminated by ',' stored as textfile LOCATION 's3://aws-bigdata-blog/artifacts/aws-blog-emr-atlas/trip_details/';
o 使用存储在 S3 上的数据创建一个名为 trip_zone_lookup 的新查找外部表。
CREATE external TABLE trip_zone_lookup ( LocationID int , Borough string , Zone string , service_zone string ) row format delimited fields terminated by ',' stored as textfile LOCATION 's3://aws-bigdata-blog/artifacts/aws-blog-emr-atlas/zone_lookup/';
o 通过联接以下表创建 trip_details 和 trip_zone_lookup 的交叉表:
create table trip_details_by_zone as select * from trip_details join trip_zone_lookup on LocationID = location_id;
接下来,执行 Hive 导入。在 Atlas 中导入的元数据时,只能通过 Amazon EMR 服务器(没有 Web UI)上的命令行来使用 Atlas Hive 导入工具。 首先,请使用 SSH 登录到 Amazon EMR 主服务器:
ssh -i key.pem hadoop@<EMR Master IP Address>
然后执行以下命令。该脚本要求您输入 Atlas 的用户名和密码。默认用户名是 admin,默认密码是 admin。
/apache/atlas/bin/import-hive.sh
如果导入执行成功,其效果如下所示:
Enter username for atlas :- admin Enter password for atlas :- 2018-09-06T13:23:33,519 INFO [main] org.apache.atlas.AtlasBaseClient - Client has only one service URL, will use that for all actions: http://localhost:21000 2018-09-06T13:23:33,543 INFO [main] org.apache.hadoop.hive.conf.HiveConf - Found configuration file file:/etc/hive/conf.dist/hive-site.xml 2018-09-06T13:23:34,394 WARN [main] org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 2018-09-06T13:23:35,272 INFO [main] hive.metastore - Trying to connect to metastore with URI thrift://ip-172-31-90-79.ec2.internal:9083 2018-09-06T13:23:35,310 INFO [main] hive.metastore - Opened a connection to metastore, current connections: 1 2018-09-06T13:23:35,365 INFO [main] hive.metastore - Connected to metastore. 2018-09-06T13:23:35,591 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Importing Hive metadata 2018-09-06T13:23:35,602 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Found 2 databases 2018-09-06T13:23:35,713 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:35,987 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Database atlas_emr is already registered - id=cc311c0e-df88-40dc-ac12-6a1ce139ca88.Updating it. 2018-09-06T13:23:36,130 INFO [main] org.apache.atlas.AtlasBaseClient - method=POST path=api/atlas/v2/entity/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,144 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Updated hive_db entity: name=atlas_emr@primary, guid=cc311c0e-df88-40dc-ac12-6a1ce139ca88 2018-09-06T13:23:36,164 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Found 3 tables to import in database atlas_emr 2018-09-06T13:23:36,287 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,294 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Table atlas_emr.trip_details is already registered with id c2935940-5725-4bb3-9adb-d153e2e8b911.Updating entity. 2018-09-06T13:23:36,688 INFO [main] org.apache.atlas.AtlasBaseClient - method=POST path=api/atlas/v2/entity/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,689 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Updated hive_table entity: name=atlas_emr.trip_details@primary, guid=c2935940-5725-4bb3-9adb-d153e2e8b911 2018-09-06T13:23:36,702 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,703 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Process atlas_emr.trip_details@primary:1536239968000 is already registered 2018-09-06T13:23:36,791 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,802 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Table atlas_emr.trip_details_by_zone is already registered with id c0ff33ae-ca82-4048-9671-c0b6597e1475.Updating entity. 2018-09-06T13:23:36,988 INFO [main] org.apache.atlas.AtlasBaseClient - method=POST path=api/atlas/v2/entity/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:36,989 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Updated hive_table entity: name=atlas_emr.trip_details_by_zone@primary, guid=c0ff33ae-ca82-4048-9671-c0b6597e1475 2018-09-06T13:23:37,035 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:37,038 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Table atlas_emr.trip_zone_lookup is already registered with id 834d102a-6f92-4fc9-a498-4adb4a3e7897.Updating entity. 2018-09-06T13:23:37,213 INFO [main] org.apache.atlas.AtlasBaseClient - method=POST path=api/atlas/v2/entity/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:37,214 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Updated hive_table entity: name=atlas_emr.trip_zone_lookup@primary, guid=834d102a-6f92-4fc9-a498-4adb4a3e7897 2018-09-06T13:23:37,228 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:37,228 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Process atlas_emr.trip_zone_lookup@primary:1536239987000 is already registered 2018-09-06T13:23:37,229 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Successfully imported 3 tables from database atlas_emr 2018-09-06T13:23:37,243 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/uniqueAttribute/type/ contentType=application/json; charset=UTF-8 accept=application/json status=404 2018-09-06T13:23:37,353 INFO [main] org.apache.atlas.AtlasBaseClient - method=POST path=api/atlas/v2/entity/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:37,361 INFO [main] org.apache.atlas.AtlasBaseClient - method=GET path=api/atlas/v2/entity/guid/ contentType=application/json; charset=UTF-8 accept=application/json status=200 2018-09-06T13:23:37,362 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Created hive_db entity: name=default@primary, guid=798fab06-ad75-4324-b7cd-e4d02b6525e8 2018-09-06T13:23:37,365 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - No tables to import in database default Hive Meta Data imported successfully!!!
成功导入 Hive 之后,您可以返回到 Atlas Web UI 来搜索 Hive 数据库或已导入的表。在 Atlas UI 的左窗格中,选择搜索,然后在其下方列出的两个字段中输入以下信息:
- 按类型搜索:hive_table
- 按文本搜索:trip_details
相关文章