MYSQL で HIVE メタストアをインストールして構成する方法

⚡ スマートサマリー

HiveメタストアはApache Hiveの背後にあるすべてのテーブル定義、列名、データ型を保存し、そのリポジトリをデフォルトのDerbyデータベースから移動します。 MySQL 複数のユーザーが同時に接続できるようにする機能です。

  • 🗄️ 内容物: メタストアはスキーマのメタデータをリレーショナルテーブルに保持し、テーブルデータ自体はHDFS上に保持される。
  • 🚫 ダービーが失敗する理由: バンドルされているDerbyメタストアはアクティブなセッションを1つしか受け付けないため、共有クラスターや本番環境のクラスターでは使用できません。
  • 🔧 4つの物件: 接続URLhive-site.xml の ConnectionDriverName、ConnectionUserName、ConnectionPassword は Hive を指しています。 MySQL.
  • 🔗 ドライバーの配置: その MySQL 接続が成功するためには、JDBCコネクタをHiveのlibディレクトリにリンクしておく必要があります。
  • 🧱 まずスキーマから: schematoolユーティリティはメタストアテーブルを作成しますが、Hiveは初期化されていないスキーマに対して起動することを拒否します。
  • 🔎 で確認 MySQL: Hiveで作成されたテーブルは、メタストアデータベースのTBLSテーブルにすぐに行として表示されます。

Hiveメタストアのインストールと構成方法 MySQL

HIVE メタストアとは何ですか?

Hiveメタストアは、データに関連するメタデータ(列名、データ型、コメントなど)を格納するリポジトリです。 ApacheHive MySQL or PostgreSQL。この Hive メタストアは、リレーショナル データベース内のテーブルを使用して実装されます。

メタストアには行データ自体は保存されません。レコードはHDFS上に保持され、メタストアには各テーブルの場所と列名のみが記録されます。そのため、メタストアが失われてもデータではなくスキーマが失われることになります。

使用する理由 MySQL Hiveのメタストアとして

メタストアのバックエンドは選択肢の一つであり、Hiveの固定機能ではありません。また、出荷時のデフォルト設定は意図的に最小限に抑えられています。しかし、3つの制限があるため、ほとんどすべてのインストール環境でメタストアは使用されません。

  • デフォルトでは、HiveにはメタストアとしてDerbyデータベースが付属しています。
  • Derbyは一度に1人のアクティブユーザーしかサポートできません。
  • Derbyは生産環境での使用は推奨されません。

したがって、ここでの解決策は

  •   MySQL バックエンドのメタストレージとして、複数のユーザーを同時にHiveに接続します。
  • MySQL スタンドアロンメタストアに最適な選択肢です

Hive メタストアをインストールして構成する方法 MySQL データベース

以下の9つの手順は、HadoopとHiveが既にインストールされているマシン上で順番に実行されます。各手順の最後には、実際のターミナルまたはシェル出力のスクリーンショットが掲載されています。

ステップ1)インストール MySQL サーバー
このステップでは、XNUMX つのタスクを実行します。

  1. mysql-serverのインストール
  2. mysql-serverとそのプロセスの確認

使い方 sudo apt-get mysql-serverをインストールする コマンドでダウンロードできます MySQL サーバーをインストールします。 MySQL 下のスクリーンショットに示すように

ターミナルで sudo apt-get install mysql-server を実行 Ubuntu

インストールが成功したら、 MySQL 以下のスクリーンショットに示すように実行され、プロセスチェックによってサービスが稼働していることが確認されます。

インストール後にmysql-serverプロセスが実行されていることを確認するターミナル

ステップ2)インストール MySQL Java ボンジョイント
インストール MySQL Java コネクタ。これは Java 依存関係と接続目的のため、Hive は MySQL JDBC経由。次のスクリーンショットはパッケージのインストールを示しています。

ターミナルでlibmysql-javaをインストール MySQL Java コネクタパッケージ

ステップ 3) コネクタのソフトリンクを作成する
Hive lib ディレクトリにコネクタのソフトリンクを作成します。これは、 Java (NAIST) と MySQLそして、これによってドライバJARがHiveのクラスパスに追加されます。コマンドとその結果は以下のとおりです。

ターミナルがソフトリンクを作成 MySQL Hive lib ディレクトリ内のコネクタ JAR

ステップ4)設定 MySQL Hiveのストレージ
その MySQL 次の図に示すように、Hiveユーザーを作成する前に、rootアカウントでシェルを開く必要があります。

ターミナルを開く MySQL mysql -u root -p コマンドでシェルを実行

  • mysql –u root –p と入力し、続けてパスワードを入力してください。
  • ここで、-u はルートユーザー名、-p はパスワードを表します。
  • 上記のコマンドを入力した後、ユーザーは有効なパスワードを入力してEnterキーを押す必要があります。
  • すると、 MySQL シェルモード

ステップ 5) ユーザー名とパスワードを作成する
ユーザー名とパスワードを作成する MySQL、そして権限を付与します。以下のスクリーンショットは、内部で実行されている 3 つのステートメントを示しています。 MySQL シェル。

MySQL シェルがhiveuserアカウントを作成し、権限を付与する

以下に示すようにコマンドを実行する必要があります。

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8 2 番目のステートメントの結合形式は、GRANT から IDENTIFIED BY が削除されたため、解析されなくなりました。最初にアカウントを作成してから、そのアカウントに権限を付与し、ローカルホストホストとワイルドカードホストの両方に対して CREATE USER 行を繰り返します。

ステップ6)hive-site.xmlの設定

  • ステップ 5 でユーザー名とパスワードを割り当てた後、 MySQL データベースにアクセスし、権限を付与します。
  • ここでは、Hive でいくつかのプロパティを設定して、 MySQL データベース。

次のスクリーンショットに示すように、設定ファイルはHiveのconfディレクトリから開かれます。

ターミナルでHive設定ディレクトリ内のhive-site.xmlファイルを編集用に開く

以下のスクリーンショットは、4つのプロパティすべてが設定された完成ファイルを示しています。

hive-site.xml には、javax.jdo.option 接続プロパティが 4 つ表示されています。

上記のスクリーンショットから、以下のことがわかります。ここでは、確立するために必要な 4 つのプロパティを定義しています。 MySQL Hiveにおけるメタストアとして。

これらは次のとおりです。

  1. この物件は接続用です URLここでは、接続を定義します。URL このプロパティでは、JDBC接続文字列として機能し、メタストアの場所も表します。
  2. このプロパティは接続ドライバ名用です。ここでは、com.mysql.jdbc.Driver を値タグに指定する必要があります。
  3. このプロパティは、接続ユーザー名を定義するために使用されます。ここでは、ユーザー名として「hiveuser」を定義しました。
  4. このプロパティは接続パスワードを指定するために使用されます。ここでは、「hivepassword」をユーザーパスワードとして定義しています。

プロパティを hive-site.xml に配置したら、手動で保存 (Ctrl+S) してファイルを閉じます。このファイルを閉じた後、Hive テーブルを作成し、テーブルの詳細を確認する必要があります。 MySQL ストレージ。

このコードを hive-site.xml に配置します。

ハイブサイト.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

上記の2つの値は、使用するコネクタのバージョンによって異なります。 MySQL Connector/J 8 ではドライバクラスの名前が com.mysql.cj.jdbc.Driver に変更され、明示的なポートと SSL 設定も必要となるため、最新の URL 通常は jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false と読み取れます。パスワードは平文で保存されているため、このファイルは Hive サービス アカウントのみが読み取れるようにする必要があります。

ステップ7) テーブルの作成
以下のHiveシェルに示すように、Hiveにテーブル「guru99」を作成します。

Hiveシェルで、整数型と文字列型の列を持つguru99テーブルを作成する

上記のスクリーンショットから、次のことがわかります。

  • 「guru99」という名前のテーブルを作成し、2つの列名を設定します。
  • 列名はデータ型とともに示されており、一方は整数型、もう一方は文字列型である。

次のステップでは、それがどこに保存されているかを確認します。 MySQL どうか。

ステップ8) MySQL シェルモード
まずメタストアデータベースが選択され、その後に続くテーブル一覧が以下に示されます。

MySQL シェルでメタストアを使用し、テーブルを表示してメタストアのテーブルを一覧表示します。

上記のスクリーンショットから、次のことがわかります。

  • まず、「use metastore」でデータベースを選択する必要があります。
  • メタストアを選択したら、スクリーンショットに示すように「show tables」コマンドを使用して、そのメタストアに存在するテーブルを確認できます。
  • Hiveで作成されたテーブルに対応するメタデータは、TBLSの下に保存されます。 MySQL データベース
  • 「guru99」テーブルはHiveで作成されるため、対応するメタデータは MySQL TBLSの下で

ステップ 9) 「select * from TBLS」と入力します。
作成されたテーブルが存在するかどうかを確認します MySQL あるいはそうでない場合もあります。クエリとその結果は以下のスクリーンショットに示されています。

MySQL シェルで「select * from TBLS」を実行し、guru99テーブルの行を表示する

select * from TBLS と入力すると、Hive シェル モードで作成したテーブルが表示されます。

上記のスクリーンショットから、次のことがわかります。

  • Hiveで作成されたテーブル名「guru99」は、 MySQL シェルモード
  • これに加えて、上記のスクリーンショットに示されているように、テーブルの作成時間、アクセス時間、その他のプロパティなどの情報も提供されます。

schematoolを使用してHiveメタストアスキーマを初期化する方法

接続の createDatabaseIfNotExist フラグ URL 空のメタストアデータベースを作成しますが、Hive が内部に必要とする約 70 個のテーブルは作成しません。Hive 1.x 以降では、このジョブは schematool ユーティリティに属しており、スキップされます。ping これは、新しく構成されたメタストアが起動しない最も一般的な理由です。

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

このコマンドは、hive-site.xmlから同じ4つのプロパティを読み込み、hiveuserアカウントに接続し、Hiveのバージョンに一致するバンドルされたSQLスクリプトを実行します。実行が成功すると完了メッセージが表示され、その後はいつでも状態を確認できます。

$HIVE_HOME/bin/schematool -dbType mysql -info

以下のフラグは、メタストアスキーマのライフサイクル全体を網羅しています。

オプション 何それがありません
-dbType バックエンドの名前を指定します(例:mysql、derby、postgres、oracle、mssql)。
-initSchema 現在のHiveバージョンのメタストアテーブルを作成します
-情報 データベースに記録されているスキーマバージョンを報告します。
-upgradeSchema Hiveのアップグレード後に既存のスキーマを移行します
-検証 スキーマをチェックし、不足しているテーブルやバージョンの不一致がないかを確認します。

初回起動前に知っておくべき関連プロパティが 1 つあります。hive.metastore.schema.verification が true の場合、Hive はスキーマ バージョンを比較します。 MySQL 自身のバージョンと照合し、不一致の場合は実行を拒否します。このチェックは安全対策なので、正しい対応はアップグレードを停止するのではなく実行することです。 MySQL バックエンドは、Hiveのインストールで使用されます。 Hiveをインストールする Ubuntu.

Hiveメタストアでよく発生するエラーとその解決方法

この段階で発生するほとんどの障害は、ごく少数のメッセージのうちのいずれかを生成し、それぞれがHive自体ではなく、その上の特定のステップを指し示しています。

症状 原因と解決策
メタストアにバージョン情報が見つかりません スキーマが作成されませんでした。接続で指定したデータベースに対して、-initSchema オプションを指定して schematool を実行してください。 URL
JDBCドライバのClassNotFoundException コネクタJARがHive libディレクトリに存在しないか、Connector/J 8が使用中で、クラスがcom.mysql.cj.jdbc.Driverになっています。手順3のシンボリックリンクを再確認してください。
ユーザーhiveuserのアクセスが拒否されました 権限は1つのホストにのみ付与されています。localhostとワイルドカードホストの両方にアカウントを作成し、flush privilegesを実行してください。
IDENTIFIED BY 付近に構文エラーがあります MySQL 8. GRANT文からIDENTIFIED BYを削除しました。まずCREATE USERを発行し、その後GRANTを発行してください。
公開鍵の取得は許可されていません Connector/J 8 はデフォルトで暗号化されていないハンドシェイクを拒否します。JDBC に useSSL=false と allowPublicKeyRetrieval=true を追加してください。 URL 信頼できるネットワーク上で
Hiveのアップグレード後にテーブルが欠落している スキーマは依然として旧バージョンと一致しています。スキーマ検証を無効にする代わりに、-upgradeSchema オプションを指定して schematool を実行してください。

メタストアが確実に応答すると、記録されるテーブル定義は、以下で説明するステートメントを使用して作成されます。 Hiveでテーブルを作成、変更、削除する.

よくあるご質問

Hiveはダービーへの支援を発送します。 MySQL, PostgreSQL, Oracle (NAIST) と Microsoft SQL Serverschematoolは、-dbTypeフラグを介してそれぞれを受け入れます。Derbyはデフォルトのままで、単一セッションに限定されます。

Embedded は Hive プロセス内で Derby を実行します。Local は Hive 内でメタストアコードを実行しますが、外部データベース (例: MySQLRemoteは、複数のクライアントが共有する独自のThriftサービスとしてメタストアを実行します。

DBS レコードはデータベース、TBLS レコードはテーブル、COLUMNS_V2 レコードは列定義、SDS レコードはストレージ記述子、PARTITIONS レコードはパーティションエントリを表します。これらの名前は内部的なものであり、手動で編集するのではなく、クエリを使用して確認してください。

Hadoop認証情報プロバイダのキーストアに保存し、hive.metastore.credential.provider.pathをそのファイルを指すように設定してから、プレーンな値を削除してください。hive-site.xmlのファイル権限を制限することが、最低限の代替策です。

HDFS 上のファイルは残りますが、すべてのテーブル、パーティション、列の定義が消え、Hive はそれらを読み取れなくなります。 MySQL したがって、メタストアデータベースのダンプは通常のクラスタバックアップの一部です。

Thriftメタストアサービスは、デフォルトでポート9083でリッスンします。この設定はhive.metastore.portで行います。クライアントは、JDBC認証情報を直接使用するのではなく、hive.metastore.urisを使用してサービスにアクセスします。これにより、データベースのパスワードがクライアントマシンに公開されるのを防ぎます。

はい。メタストアのクエリログに対する異常検知機能により、ジョブのタイムアウト前に、突然の呼び出しスパイク、パーティション一覧表示の遅延、テーブルの急激な増加などを検出します。モデルは候補となる事象を絞り込み、管理者が最終的な原因を確認します。

Copilotは短いコメントからjavax.jdo.optionプロパティブロックを作成し、エージェントアシスタントがセットアップ全体をスクリプト化できます。トレーニングデータでは古いコネクタ名が優先されるため、ドライバクラスとポートを確認してください。