Apache Hive は、Hadoop エコシステムで広く使用されている分散 SQL クエリエンジンです。Hive は、データベース、テーブル、およびパーティションのデータを管理します。ストレージバックエンドでデータをクエリするためのストレージの場所を指定できます。
JindoFS の構成
たとえば、emr-jfs という名前のネームスペースは、次の構成で作成されます。
- jfs.namespaces=emr-jfs
- jfs.namespaces.emr-jfs.oss.uri=oss://oss-bucket/oss-dir
- jfs.namespaces.emr-jfs.mode=block
データウェアハウス、データベース、テーブル、またはパーティションのストレージの場所を指定する
- データウェアハウスのストレージの場所を指定する
hive-site 構成ファイルには、hive.metastore.warehouse.dir パラメーターが含まれています。このパラメーターは、Hive データウェアハウスがデータを格納するディレクトリを指定します。たとえば、このパラメーターを
jfs://emr-jfs/user/hive/warehouseに設定します。 - データベースのストレージの場所を指定する
Hive データベースにはストレージの場所があります。この場所は、データベース内のテーブルのデフォルトのストレージの場所としても使用されます。データベースを作成するときに、ストレージの場所を指定するパラメーターはオプションです。デフォルトでは、データベースのストレージの場所は、データベース名が追加された hive-site ファイルの hive.metastore.warehouse.dir パラメーターの値です。次の SQL ステートメントを実行して、ストレージの場所を指定できます。
- データベースを作成するときに、ストレージの場所を JindoFS のディレクトリに設定する:
CREATE DATABASE database_name LOCATION 'jfs://namespace/database_dir';たとえば、database_on_jindofs という名前の Hive データベースを作成し、ストレージの場所を
jfs://emr-jfs/warehouse/database_on_jindofsに設定するには、次のステートメントを実行します。CREATE DATABASE database_on_jindofs LOCATION 'jfs://emr-jfs/hive/warehouse/database_on_jindofs'; - データベースのストレージの場所を JindoFS のディレクトリに変更する:
- 次の SHOW CREATE ステートメントを実行して、データベースのストレージの場所をクエリします。
SHOW CREATE DATABASE database_name; - 返されたクエリ結果を表示します。デフォルトでは、データベースのストレージの場所は、データベース名が追加されたデータウェアハウスの場所です。
CREATE DATABASE `database_name` LOCATION 'hdfs://emr-jfs/user/hive/warehouse/database_name.db' - ストレージの場所を JindoFS のディレクトリに変更します。この操作は、既存のテーブルには影響しません。新しいテーブルのストレージの場所を指定しない場合、変更された場所はテーブルのデフォルトのストレージの場所として使用されます。
たとえば、jfs_table_name テーブルのパーティションのデータをクエリするには、次のステートメントを実行します。
ALTER DATABASE database_name SET LOCATION jfs_path;
- 次の SHOW CREATE ステートメントを実行して、データベースのストレージの場所をクエリします。
- データベースを作成するときに、ストレージの場所を JindoFS のディレクトリに設定する:
- テーブルまたはパーティションのストレージの場所を指定する
データベースのストレージの場所と同様に、テーブルまたはパーティションのストレージの場所も、上位レベルのストレージの場所に基づいて指定されます。パーティション化されていないテーブルのデータは、テーブルのストレージの場所に格納されます。パーティション化されたテーブルのデータは、それぞれのパーティションのストレージの場所に格納されます。次の SQL ステートメントを実行して、ストレージの場所を指定できます。
- テーブルを作成するときに、ストレージの場所を JindoFS のディレクトリに設定する:
CREATE [EXTERNAL] TABLE table_name [(col_name data_type,...)] LOCATION 'jfs://emr-jfs/database_dir/table_dir'; - テーブルまたはパーティションのストレージの場所を JindoFS のディレクトリに変更する:
- 次の DESCRIBE ステートメントを実行して、テーブルまたはパーティションのストレージの場所をクエリします。
DESCRIBE FORMATTED [PARTITION partition_spec] table_name; - ストレージの場所を JindoFS のディレクトリに変更します。
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "jfs_path";たとえば、jfs_table_name テーブルのパーティションのデータをクエリするには、次のステートメントを実行します。
DESCRIBE FORMATTED jfs_table_name PARTITION (partition_key1=123,partition_key2='xxxx');
- 次の DESCRIBE ステートメントを実行して、テーブルまたはパーティションのストレージの場所をクエリします。
- テーブルを作成するときに、ストレージの場所を JindoFS のディレクトリに設定する:
スクラッチディレクトリのデータをクエリする
Hive は、一時的な出力ファイルとジョブプランをスクラッチディレクトリに格納します。 hive-site 構成ファイルの hive.exec.scratchdir パラメーターを JindoFS のディレクトリに設定できます。また、次のコマンドのいずれかを実行して、このパラメーターを指定することもできます。
bin/hive --hiveconf hive.exec.scratchdir=jfs://emr-jfs/scratch_dir
および
set hive.exec.scratchdir=jfs://emr-jfs/scratch_dir;