Hiveのメタデータ管理ができるApache Atlasですが、こちらのブログを参考にGlueのカタログ情報もインポートしてみました。
- EMRのHiveメタストアとしてGlueを使うための設定を準備
- EMRクラスタの起動
- EMRクラスタへ接続
- Glue接続確認
- AtlasへHive(Glue)のデータをインポート
- AtlasへGlueのデータカタログのインポート
- Atlasへ接続
EMRのHiveメタストアとしてGlueを使うための設定を準備
こちらを参考に設定ファイルの準備
$ cat <<EOF > ./glue_settings.json [ { "Classification": "hive-site", "Properties": { "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory" } } ] EOF
EMRクラスタの起動
上で作った設定ファイルを指定してEMRクラスタを起動します。
CLUSTER_NAME=EMR-Atlas INSTANCE_TYPE=m4.large INSTANCE_VOL_SIZE=80 KEY_NAME=privatekey SUBNET_ID=subnet-xxxxxxxxxxx S3_EMR_LOGDIR=s3://otomo-log/atlas_log aws emr create-cluster --applications Name=Hive Name=HBase Name=Hue Name=Hadoop Name=ZooKeeper \ --tags Name=${CLUSTER_NAME} \ --release-label emr-5.16.0 \ --ec2-attributes SubnetId=${SUBNET_ID},KeyName=${KEY_NAME} \ --use-default-roles \ --ebs-root-volume-size ${INSTANCE_VOL_SIZE}\ --instance-groups InstanceGroupType=MASTER,InstanceType=${INSTANCE_TYPE},InstanceCount=1 InstanceGroupType=CORE,InstanceType=${INSTANCE_TYPE},InstanceCount=1 \ --log-uri ${S3_EMR_LOGDIR} \ --configurations file://./glue_settings.json \ --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-1AN6UT664VLL8" }
クラスタが起動して以下のステータスになるのを待ちます。
$ aws emr list-clusters --active { "Clusters": [ { "Id": "j-1AN6UT664VLL8", "Name": "Development Cluster", "Status": { "State": "WAITING", "StateChangeReason": { "Message": "Cluster ready after last step completed." }, "Timeline": { "CreationDateTime": 1549354811.405, "ReadyDateTime": 1549355397.746 } }, "NormalizedInstanceHours": 0 } ] }
EMRクラスタへ接続
MASTERノードのパブリックIPを取得します。
$ aws emr list-instances --cluster-id j-1AN6UT664VLL8 --instance-group-types MASTER --query 'Instances[].PublicIpAddress' --output text 3.112.83.1
hadoopユーザで接続します。
$ ssh -i ~/.ssh/otomoy.pem hadoop@3.112.83.1 EEEEEEEEEEEEEEEEEEEE MMMMMMMM MMMMMMMM RRRRRRRRRRRRRRR E::::::::::::::::::E M:::::::M M:::::::M R::::::::::::::R EE:::::EEEEEEEEE:::E M::::::::M M::::::::M R:::::RRRRRR:::::R E::::E EEEEE M:::::::::M M:::::::::M RR::::R R::::R E::::E M::::::M:::M M:::M::::::M R:::R R::::R E:::::EEEEEEEEEE M:::::M M:::M M:::M M:::::M R:::RRRRRR:::::R E::::::::::::::E M:::::M M:::M:::M M:::::M R:::::::::::RR E:::::EEEEEEEEEE M:::::M M:::::M M:::::M R:::RRRRRR::::R E::::E M:::::M M:::M M:::::M R:::R R::::R E::::E EEEEE M:::::M MMM M:::::M R:::R R::::R EE:::::EEEEEEEE::::E M:::::M M:::::M R:::R R::::R E::::::::::::::::::E M:::::M M:::::M RR::::R R::::R EEEEEEEEEEEEEEEEEEEE MMMMMMM MMMMMMM RRRRRRR RRRRRR [hadoop@ip-10-2-1-122 ~]$
Glue接続確認
HiveのメタストアとしてGlueが設定されているか確認します。
show databases;
を実行してみて、Glueのデータベースが表示されればOKです。
$ hive Logging initialized using configuration in file:/etc/hive/conf.dist/hive-log4j2.properties Async: false hive> show databases; OK default elblogsample time trial yellow Time taken: 1.859 seconds, Fetched: 5 row(s) hive >
AtlasへHive(Glue)のデータをインポート
/apache/atlas/bin/import-hive.sh
というインポート用のバッチが準備されていますので、少し修正して使います。
具体的にはJavaのクラスパスに /usr/lib/hive/auxlib
を追加しています。
これが無いと以下のようなエラーが出ます。
2019-02-05T11:58:19,541 ERROR [main] hive.ql.metadata.Hive - Unable to instantiate a metastore client factory com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory due to: java.lang.ClassNotFoundException: Class com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory not found java.lang.ClassNotFoundException: Class com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory not found
では追加します。
$ sudo cp -ai /apache/atlas/bin/import-hive.sh{,.org} $ sudo vim /apache/atlas/bin/import-hive.sh $ $ diff -U0 /apache/atlas/bin/import-hive.sh{.org,} --- /apache/atlas/bin/import-hive.sh.org 2018-05-30 06:31:07.000000000 +0000 +++ /apache/atlas/bin/import-hive.sh 2019-02-05 12:05:51.817829495 +0000 @@ -110 +110 @@ -CP="${ATLASCPPATH}:${HIVE_CP}:${HADOOP_CP}" +CP="${ATLASCPPATH}:${HIVE_CP}:${HADOOP_CP}:/usr/lib/hive/auxlib/aws-glue-datacatalog-hive2-client.jar"
AtlasへGlueのデータカタログのインポート
修正したスクリプトを実行してAtlasへGlueのメタデータをインポートします。
ユーザ admin
のとパスワードは admin
です。
$ /apache/atlas/bin/import-hive.sh #---- <省略> Enter username for atlas :- admin Enter password for atlas :- #---- <省略> 2019-02-05T10:58:58,466 INFO [main] org.apache.atlas.hive.bridge.HiveMetaStoreBridge - Successfully imported 5 tables from database yellow Hive Meta Data imported successfully!!!
Atlasへ接続
ローカルからSSHトンネルを構築します。
$ ssh -i .ssh/privatekey -vnNT -L 21000:localhost:21000 hadoop@3.112.83.1
接続できたら以下のURLにアクセスします。
以下のようにログイン画面が表示されるので、ユーザ admin
パスワード admin
でログオンします。
hive_tableで検索かけてみるとGlueのカタログ情報が表示されます。
以上です。