LoginSignup
1
0

More than 1 year has passed since last update.

Kerberized Hadoop ClusterのHive metastoreにPrestoを接続

Last updated at Posted at 2020-05-29

はじめに

扱っているデータの性質上、どうしてもオンプレミスでHadoop Clusterの運用を行っています。(クラウドがいい...)
今まではSpark, Hiveでバッチ処理をメインで行ってきましたが、最近インタラクティブにクエリを実行したいとの要望があり、今更ながらPrestoをKerberized Hadoop ClusterのHive metastoreに接続します。

環境

今回の接続に使用した環境は下記です。

Kerberized Hadoop Cluster

サービス、ユーザ認証にKerberosを利用したHadoop Cluster(レルム: EXAMPLE.COM)
OS: CentOS 7.7
Hadoopディストリビューション: CDH6.2.1
master node: 3台
worker node: 6台

Presto

Presto: version 333(prestosql)
coordinator: 1台(master nodeのうち1台)
worker: 6台(worker nodeと同様)

前提条件

  • Kerberized Hadoop Clusterを構築済み
  • Prestoを導入済み
    • presto-cliが利用可能 
    • Kerberized前にHiveに接続済み

Hadoop ClusterのKerberosの設定はAmbariやCloudera Managerから簡単に可能です。
また、Prestoの導入もpresto-adminを利用することで、coordinator, workerをCLIで一元管理可能です。(GUIがないのはネック!)

KDCにPresto用のプリンシパルを登録、keytabの生成

Kerberized Hadoop Clusterで使用している、KDCにPrestoの設定を行います。
KCDのサーバで下記のコマンドを実行。

kadmin: addprinc -randkey presto@EXAMPLE.COM
kadmin: xst -k presto.keytab presto@EXAMPLE.COM

生成したpresto.keytabをprestoのcoordinator, workerの/etc/presto/presto.keytabに配置します。
(配置場所は任意の場所で問題ありません。)

/etc/krb5.confの設定(CentOS7のみ)

下記の設定をcoordinator, workerから削除

renew_lifetime = 7d

ここでかなりハマりました。この設定をしないとCentOSではpresto-cliの接続でMessage stream modified (41)のエラーが発生します。

core-site.xmlの設定

impersonationを有効にするため、下記の設定をCloudera Managerで行います。

<property>
  <name>hadoop.proxyuser.presto.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.presto.groups</name>
  <value>*</value>
</property>

hive.propertiesの設定

下記の設定を追加します。

# Hive
hive.metastore.authentication.type=KERBEROS
hive.metastore.thrift.impersonation.enabled=true # prestosqlのみの設定, prestodbの方はなし
hive.metastore.service.principal=hive/_HOST@EXAMPLE.COM
hive.metastore.client.principal=presto@EXAMPLE.COM
hive.metastore.client.keytab=/etc/presto/presto.keytab

# HDFS
hive.hdfs.authentication.type=KERBEROS
hive.hdfs.impersonation.enabled=true
hive.hdfs.presto.principal=presto@EXAMPLE.COM
hive.hdfs.presto.keytab=/etc/presto/presto.keytab

設定したhive.propertiesをcoordinator, workerに配布し、Prestoを再起動します。

接続確認

presto-cliを利用して接続確認を行います。

./presto-cli --server {coordinatorのIPアドレス or ホスト名}:8080 --catalog hive --schema default --user {user}
presto:default> show schemas; # Hive上のデータベースが表示

--userで指定したuserは、Hive, HDFS上で適切な権限が付与されてている必要があります。

最後に

公式ドキュメントに従って、接続設定を行いました。
PrestoでKerberized Hadoop ClusterのHive metastoreの接続を解説しているサイトがほとんどなかったので、参考になれば幸いです。
また、Kerberized Hadoop ClusterのHive metastoreにPrestoを接続するだけであれば、Presto自体のKerberos, SSL/TLS設定は不要です。

参考

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0