Cloud HadoopでHive Queryを実行する
このページではCloud Hadoopクラスタを生成し、Object Storageにデータを保存した後、HueとBeelineを通じて簡単なHive Queryを実行する方法をご説明します。
始める前に
次のような順番でCloud Hadoopを設定してください。
アーキテクチャの例
引き続き保管する必要のあるデータはObject Storage バケットに保存し、Cloud Hadoopクラスタは必要な時のみ使います。
Hive Queryを実行すると次のような順番でクエリが実行されます。
- Hive ClientでCloud HadoopクラスタにあるHiveサーバにクエリを提出します。
- サーバはクエリを処理してマスターサーバに設置された Hive Metadata データベース(MySQL)にメタデータをリクエストします。
- サーバはObject Storageのバケット内に保存されたデータをロードします。
- Hiveサーバはクライアントに結果を表示します。
Hiveテーブルの生成
このセクションではNAVERクラウドプラットフォームObject Storage バケットにサンプルデータファイルをアップロードして、Hiveでこのデータを使用できるようにHive External Tableを生成します。
Object Storageバケットにあるデータを使用するためには
hive-site.xml
に次のような構成が必要です。fs.s3a.access.key=API-ACCESS-KEY fs.s3a.connection.ssl.enabled=false fs.s3a.endpoint=http://kr.objectstorage.ncloud.com fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem fs.s3a.secret.key=API-SECRET-KEY
バケットにサンプルデータファイルをアップロード
サンプルデータをダウンロードしてデータセットファイルをObject Storage バケットにアップロードします。
提供されるサンプルデータは Lahman's Basebasll Database 2012バージョンの一部であり、データの全ての著作権はSean Lahmanにあります。
Hiveでデータファイルのlocationをフォルダ単位で読み取るため、フォルダ一つにデータセット一つを保存されることをお勧めします。
Hive External Tableの生成
Ambari Hive View2.0またはHue Hive 編集機で以下の文を用いてHive External Tableを生成します。ここで
location
はデータセットファイルが保存されたbucket pathを指定します。DROP table allstarfull; CREATE external TABLE if not EXISTS `allstarfull` ( `playerID` VARCHAR(20), `yearID` INT, `gameNum` INT, `gameID` VARCHAR(30), `teamID` VARCHAR(4), `lgID` VARCHAR(4), `GP` INT, `startingPos` INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' location 's3a://deepdrive-hue/input/lahman2012/allstarfull';
Hiveクエリの実行
Cloud Hadoopで提供する多様なツールを使用してHiveクエリを実行できます。このセクションでは次のようなツールを使ってクエリを実行する方法をご案内します。
- HueのHive Interpreter
- Hive Clients の中でSQLLine CLIに基づいたBeeline
HueのHive Interpreter
HueにログインしてHive Interpreterで簡単なHiveQLクエリを使用してS3にアップロードした ファイルがHiveテーブルと接続されたか確認します。
SELECT * FROM allstarfull LIMIT 10;
結果は次の通りです。
Beeline
Hive Clientsが設置されたホストに直接アクセスしてBeelineセッションをスタートします。
beeline -u "jdbc:hive2://[HIVE-SERVER2-SERVER]:10000" -n hive
ホストアクセスは ノード直接アクセスガイドをご参照ください。
Beeline プロンプトが表示されたらHiveQLクエリを実行します。今回は結果を出力せずに Object Storageに保存します。
beeline> INSERT OVERWRITE DIRECTORY 's3a://deepdrive-hue/output/' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT playerid, sum(gp) from allstarfull group by playerid;
参考 クエリを保存する前にObject Storageバケットに指定した位置(ディレクトリ)が存在するか確認します。
結果が正常に保存されたか確認します。
hadoop fs -cat s3a://deepdrive-hue/output/000000_0
結果は次の通りです。
aaronha01,24 aasedo01,1 abreubo01,2 adamsac01,0 adcocjo01,2 ageeto01,2 aguilri01,3 aguirha01,1 alexado01,0 alfoned01,1 allendi01,6 allenjo02,1 alleyge01,1 allisbo01,2 alomaro01,12 ...
クラスタの終了
作業が実行されていない時にコストがかかるのを防ぐためには、Cloud Hadoopクラスタを終了します。これ以上不要なデータセットファイルはバケットから削除するか、バケット自体を削除します。
削除が完了したファイルまたはバケットはリカバリーできません。
Cloud Hadoop クラスタの終了
Cloud Hadoop クラスタを終了すると、ノードのローカルファイルシステムや HDFS内に保存されたファイルが全て無くなります。必要なファイルはObject Stroageバケットにコピーするなど、別途コピーしておく必要があります。
Cloud Hadoopコンソールから終了するクラスタを選択して 削除 ボタンをクリックします。
Object Stroage ファイルまたはバケットを削除する
Object Storageコンソールから削除するファイルを選択して 編集 > 削除するをクリックします。
バケットを削除する際は、バケットの右側ボタンをクリックして バケットを削除をクリックします。