0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hive から Apache Ozone を S3 アドレス(s3a://…)で使う手順

Posted at

Ozone S3 Gateway(S3 互換)× Hive 連携ランブック

本記事は、Ozone を S3 互換エンドポイントとして公開 し、Hive から s3a:// パスでデータにアクセスするための実践手順をまとめた技術ブログです。

クラスタ側の Ozone 準備(S3 秘密情報の取得・バケット作成・ACL/Ranger 設定)から、core-site.xml / hive-site.xml の設定、動作確認(hadoop fs / aws s3 / ozone fs)、Hive 外部テーブル作成、そしてトラブルシューティングまでを紹介します。


0. 前提条件(Prerequisites)

  • Cloudera Base on premises(つまり Ozone を含む Hadoop 環境)が稼働済み
  • Ozone S3 Gateway(s3g)が有効
  • Hive(HMS / HS2)が稼働
  • Kerberos 環境(例:hive@REALM
  • テスト用の FQDN/エンドポイント(例)
    • Ozone S3 エンドポイント: http(s)://<s3g-host-or-alb>:<port>
    • 以降の例では http://worker01.metalake.site:9878 を使用

⚠️ TLS 環境の場合は、OS/Java のトラストストアに 中間 CA を含む発行 CA を事前に取り込みます。自己署名証明書を使用していると S3A クライアントや aws s3 で SSL エラーになります。


1. Ozone 側の準備

1.1 Kerberos 認証(Hive ユーザー例)

kinit -kt /cdep/keytabs/hive.keytab hive
# 必要に応じて:kinit -kt /path/to/keytab hive/host@REALM

1.2 S3 用クレデンシャルの取得

Ozone を S3 互換エンドポイントとして利用するため、アクセスキー / シークレットを発行します。

ozone s3 getsecret
# 出力例(実際の値はマスク推奨)
# awsAccessKey=zzeng@OZONE.COM
# awsSecret=<LONG_SECRET_VALUE>

1.3 Ozone バケット作成(OBJECT_STORE レイアウト)

Hive のウェアハウス用に S3 互換バケットを作成します。

# HMS ウェアハウス用
ozone sh bucket create --layout OBJECT_STORE /s3v/hms-warehouse

# 個人検証用(任意)
ozone sh bucket create --layout OBJECT_STORE /s3v/zzeng

1.4 バケット ACL の確認/設定

# ACL 確認
ozone sh bucket getacl /s3v/hms-warehouse

# 読み取り専用ユーザーの付与例
ozone sh bucket setacl /s3v/hms-warehouse --acls user:systest:rl

1.5 Ranger ポリシーの整備

•	cm_ozone / hadoop_sql など、対象サービスのポリシーで
•	hms-warehouse バケット(および必要なパス)に対する read / write / list 権限を付与
•	読み取り専用テストユーザーを使う場合は、明示的にユーザー追加+最小権限付与

下記はcm_ozone のPolicy:

Policy 1:
image.png

Policy 2:
image.png

2. Hadoop(core-site.xml)の設定

Cloudera Manager → HDFS サービス → Safety Valve(core-site.xml) 等で以下を設定します。
( は hms-warehouse に読み替え)

<property>
  <name>fs.s3a.bucket.hms-warehouse.access.key</name>
  <value>zzeng@OZONE.COM</value>
</property>
<property>
  <name>fs.s3a.bucket.hms-warehouse.secret.key</name>
  <value>--my-SECRET-key---</value>
</property>

<property>
  <name>fs.s3a.endpoint</name>
  <value>http://worker01.metalake.site:9878</value>
</property>
<property>
  <name>fs.s3a.bucket.probe</name>
  <value>0</value>
</property>
<property>
  <name>fs.s3a.change.detection.version.required</name>
  <value>false</value>
</property>
<property>
  <name>fs.s3a.path.style.access</name>
  <value>true</value>
</property>
<property>
  <name>fs.s3a.change.detection.mode</name>
  <value>none</value>
</property>

3. Hive(hive-site.xml)の設定

Hive サービス → Safety Valve(hive-site.xml) で、ウェアハウスディレクトリを S3A に変更します。

<!-- Iceberg/Hive のウェアハウスを Ozone(S3A) に配置 -->
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>s3a://hms-warehouse/warehouse</value>
</property>
<property>
  <name>hive.metastore.warehouse.external.dir</name>
  <value>s3a://hms-warehouse/warehouse/external</value>
</property>

<!-- Embedded REST Catalog(静的クレデンシャル連携用の例) -->
<property>
  <name>hive.metastore.catalog.datasharing.static-creds.enabled</name>
  <value>true</value>
</property>
<property>
  <name>hive.metastore.catalog.s3.readonly.access_key</name>
  <value>zzeng@OZONE.COM</value>
</property>
<property>
  <name>hive.metastore.catalog.s3.readonly.secret_key</name>
  <value>--my-SECRET-key---</value>
</property>

4. 動作確認(List / Get / Put)

4.1 hadoop fs で S3A を一覧

hadoop fs \
  -Dfs.s3a.bucket.probe=0 \
  -Dfs.s3a.change.detection.version.required=false \
  -Dfs.s3a.change.detection.mode=none \
  -Dfs.s3a.access.key=zzeng@OZONE.COM \
  -Dfs.s3a.secret.key=<SECRET> \
  -Dfs.s3a.endpoint=http://worker01.metalake.site:9878 \
  -Dfs.s3a.path.style.access=true \
  -Dfs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem \
  -ls -R s3a://hms-warehouse/warehouse

5. Hive 連携(Beeline で外部テーブル)

5.1 Beeline 接続

beeline
# 例:ZK 経由 / Kerberos 環境
# !connect jdbc:hive2://<zk-host>:2181/default;principal=hive/_HOST@REALM;retries=5;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2

5.2 外部 Iceberg テーブル作成(S3A ロケーション)

CREATE EXTERNAL TABLE test_tbl (
  id   INT,
  name STRING
)
STORED BY ICEBERG
TBLPROPERTIES ('format-version'='2');

-- Location/metadata が s3a://hms-warehouse/... に出力されることを確認
DESCRIBE FORMATTED test_tbl;

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?