Apache Hive 入門

hadoop

対象者

  • Apache Hive で何ができるのか人
  • Apache Hive のアーキテクチャの概要を知りたい人
  • Apache Hive を動かしてみたい人
  • Hadoop を触ったことある人

Apache Hive とは

Apache Hive とは Hadoop のデータセットを SQL クエリで「読み取り・書き込み・管理」するソフトウェアです。

もっと正確に知りたいよ!って人は原文をどうぞ

The Apache Hive™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

https://cwiki.apache.org/confluence/display/Hive/Home

Apache Hive のアーキテクチャ

Apache Hive は主に次の 4 つのサービスから構成されています。

  • MetaStore サービス
  • HiveServer サービス
  • HiveServer2 サービス
  • WebHCat サービス

Apache Hive と クライアント、Hadoop、データベースの関連は以下のようになっています。

MetaStore サービス

Apache Hive がメタストアからメタデータをロードしたりストアしたりするためのサービスです。

Apache Hive におけるメタデータは、分散ファイルシステム上のファイルの内容をテーブルとして認識するために利用します。メタデータにはデータの型や区切り文字などが記録されています。

下記のファイルを例に具体的なメタデータを例示します。

  1. アクセスするデータ
  2. 24957,Mr. Lemuel Schamberger MD,2014-01-17 06:50:01
    25471,Cornelius Schinner,2014-01-04 10:56:48
  3. 具体的なメタデータ
    • 1番目のフィールドは ID
    • 2番目のフィールドは名前
    • 3番目のフィールドは時間
    • フィールドの区切り文字は ‘,’
    • 行の区切り文字は ‘¥n’

なお、メタデータを格納するメタストアとしては、データベース(MySQL, MariaDBなど)を利用します。

HiveServer サービス

リモートクライアントからの受け取った SQL クエリを実行し結果を取得するサービスです。hive コマンドで Apache Hive にアクセスした場合は、このサービスが SQL クエリを実行します。

なお、Hive で利用可能な SQL 構文は、HiveQL と呼ばれ、CTAS (create table as select) が利用可能であったり、トランザクションが使えなかったりと若干の違いが見られる。

HiveServer2 サービス

HiveServer の改良版であり、マルチクライアントの並列実行と認証をサポートします。
beeline コマンドや ODBC, JDBC で Apache Hive にアクセスした場合は、このサービスが SQL クエリを実行します。

俺はもっと詳しく知りたいんだ。って方は下記のページをどうぞ。

The current implementation, based on Thrift RPC, is an improved version of HiveServer and supports multi-client concurrency and authentication. It is designed to provide better support for open API clients like JDBC and ODBC.

https://cwiki.apache.org/confluence/display/Hive/Setting+up+HiveServer2

WebHCat

リモートクライアントからの受け取った Rest API を実行し結果を取得するサービスです。curl コマンドなどを利用して Apache Hive を操作することが可能です。

詳細を知りたい方は下記のドキュメントをご覧ください。

WebHCat UsingWebHCat - Apache Hive - Apache Software Foundation

Apache Hive を触ってみる

下記の記事に Apache Hive をインストールする手順が記載されています。

Apache Hiveのインストール手順 - Qiita
概要 Apache Hadoop と Hive のインストール手順です。 それぞれ別記事に分けて書きます。 目次 Apache Hadoopのインストール手順 Apache Hiveのインストール手順 HadoopでWo...

今回は Hadoop と Apache Hive が既にインストールされている AWS EMR を利用することで、インストールする手間を省略します。

なお、今回 Apache Hive で操作するテスト用のデータは下記のものとします。

$ vim test.csv
24957,Mr. Lemuel Schamberger MD,2014-01-17 06:50:01
25471,Cornelius Schinner,2014-01-04 10:56:48
29089,Dr. Buford Schmitt IV,2014-01-17 09:09:54
26653,Kaya Hartmann,2014-01-12 00:54:56
23678,Dr. Sheila Balistreri,2013-12-28 04:15:09
22632,Cyrus Hackett,2014-01-22 20:34:43
24794,Cielo Wolf,2014-01-10 01:00:27
27733,Kaycee Lindgren,2014-01-25 18:26:25
29774,Cathrine Harvey,2014-01-17 11:30:28
24616,Lola Marvin,2014-01-12 11:18:54
22805,Elisha Crooks,2014-01-26 08:52:18
21365,Cleve Pagac,2014-01-22 05:06:21
21744,Eldon Champlin DDS,2014-01-11 08:02:30
25471,Cornelius Schinner,2014-01-04 10:56:48
23680,Dr. Sheila Balistreri,2013-12-28 04:25:09
22632,Cyrus Hackett,2014-01-22 20:34:43

hive コマンドを触る

hive コマンドを実行して SQL クエリで先程作成した test.csv ファイルを操作してみます。

  1. hive シェルを起動
    $ hive
  2. hadoop の HDFS 上のパス /tmp/hive/ に test データベースを作成
    hive> CREATE DATABASE test LOCATION '/tmp/hive/';
        
        hive> show databases;
        default //最初から存在するデータベースです。
        test
  3. test_table テーブルを作成(メタデータを作成)
    hive> 
             CREATE TABLE test.test_table(
             id int,
             name varchar(20),
             time timestamp
             )
             ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n';
    
    hive> use test;
    hive> show tables;
    test_table

    ファイルをテーブルに変換するためのメタデータは次のように定義します。

    • 1番目のフィールドは ID
    • 2番目のフィールドは名前
    • 3番目のフィールドは時間
    • フィールドの区切り文字は ‘,’
    • 行の区切り文字は ‘¥n’
  4. test.csv ファイルの中身を test_table にロード
    (先程データベースの作成で指定したパスにコピー)
    hive> LOAD DATA LOCAL INPATH './test.csv' INTO TABLE test_table;
  5. SQL クエリを実行
    hive> select * from test_table;
    24957	Mr. Lemuel Schamberg	2014-01-17 06:50:01
    25471	Cornelius Schinner	2014-01-04 10:56:48
    29089	Dr. Buford Schmitt I	2014-01-17 09:09:54
    26653	Kaya Hartmann	2014-01-12 00:54:56
    23678	Dr. Sheila Balistrer	2013-12-28 04:15:09
    22632	Cyrus Hackett	2014-01-22 20:34:43
    24794	Cielo Wolf	2014-01-10 01:00:27
    27733	Kaycee Lindgren	2014-01-25 18:26:25
    29774	Cathrine Harvey	2014-01-17 11:30:28
    24616	Lola Marvin	2014-01-12 11:18:54
    22805	Elisha Crooks	2014-01-26 08:52:18
    21365	Cleve Pagac	2014-01-22 05:06:21
    21744	Eldon Champlin DDS	2014-01-11 08:02:30
    25471	Cornelius Schinner	2014-01-04 10:56:48
    23680	Dr. Sheila Balistrer	2013-12-28 04:25:09
    22632	Cyrus Hackett	2014-01-22 20:34:43

上記により、hive コマンドで SQL クエリを利用して test.csv ファイルのデータを操作可能であることを確認できました。

beeline コマンドを触る

beeline コマンドを実行して SQL クエリで test.csv ファイルを操作してみます。

  1. beelineを起動
    $ beeline
  2. beeline で先程作成した test データベースに接続
    (test データベースがない場合は、本記事の hive コマンドのセクションを読んでください)
  3. beeline> !connect jdbc:hive2://localhost:10000/test
    Enter username for jdbc:hive2://localhost:10000/test: hadoop
    Enter password for jdbc:hive2://localhost:10000/test: そのまま Enter
    デフォルトの EMR では、上記の username かつパスワード無しでログインできます。
  4. 先程作成した test_table に SQL クエリを実行
    select * from test_table;
    +----------------+-----------------------+------------------------+
    | test_table.id  |    test_table.name    |    test_table.time     |
    +----------------+-----------------------+------------------------+
    | 24957          | Mr. Lemuel Schamberg  | 2014-01-17 06:50:01.0  |
    | 25471          | Cornelius Schinner    | 2014-01-04 10:56:48.0  |
    | 29089          | Dr. Buford Schmitt I  | 2014-01-17 09:09:54.0  |
    | 26653          | Kaya Hartmann         | 2014-01-12 00:54:56.0  |
    | 23678          | Dr. Sheila Balistrer  | 2013-12-28 04:15:09.0  |
    | 22632          | Cyrus Hackett         | 2014-01-22 20:34:43.0  |
    | 24794          | Cielo Wolf            | 2014-01-10 01:00:27.0  |
    | 27733          | Kaycee Lindgren       | 2014-01-25 18:26:25.0  |
    | 29774          | Cathrine Harvey       | 2014-01-17 11:30:28.0  |
    | 24616          | Lola Marvin           | 2014-01-12 11:18:54.0  |
    | 22805          | Elisha Crooks         | 2014-01-26 08:52:18.0  |
    | 21365          | Cleve Pagac           | 2014-01-22 05:06:21.0  |
    | 21744          | Eldon Champlin DDS    | 2014-01-11 08:02:30.0  |
    | 25471          | Cornelius Schinner    | 2014-01-04 10:56:48.0  |
    | 23680          | Dr. Sheila Balistrer  | 2013-12-28 04:25:09.0  |
    | 22632          | Cyrus Hackett         | 2014-01-22 20:34:43.0  |
    +----------------+-----------------------+------------------------+

メタストアを確認する

Apache Hive により、メタストアにどのようなデータが作成されたのか確認します。EMR を利用している場合は、デフォルトではメタストアに MariaDB が利用されています。

  1. MariaDB にログイン
    mysql -u root
  2. hive データベースを選択
    MariaDB [(none)]> use hive
  3. テーブルのカラムの定義を確認
    MariaDB [hive]> select * from COLUMNS_V2;
    +-------+---------+--------------+-------------+-------------+
    | CD_ID | COMMENT | COLUMN_NAME  | TYPE_NAME   | INTEGER_IDX |
    +-------+---------+--------------+-------------+-------------+
    |     1 | NULL    | id           | int         |           0 |
    |     1 | NULL    | name         | varchar(20) |           1 |
    |     1 | NULL    | time         | timestamp   |           2 |
    +-------+---------+--------------+-------------+-------------+
  4. CD_IDに対応するテーブル名を確認
    MariaDB [hive]> select TBL_ID, TBL_NAME from TBLS;
    +--------+------------+
    | TBL_ID | TBL_NAME   |
    +--------+------------+
    |      1 | test_table |
    +--------+------------+
  5. SerDe(区切り文字や改行文字)を確認
    select * from SERDE_PARAMS;
    MariaDB [hive]> select * from SERDE_PARAMS ;
    +----------+----------------------+-------------+
    | SERDE_ID | PARAM_KEY            | PARAM_VALUE |
    +----------+----------------------+-------------+
    |        1 | field.delim          | ,           |
    |        1 | line.delim           | 
               |
    |        1 | serialization.format | ,           |
    +----------+----------------------+-------------+

参考にした書籍、記事

0

コメント

タイトルとURLをコピーしました