Pivotal Knowledge Base

フォローする

Pivotal HD クラスタ上での HiveServer2 設定と beeline クライアント利用方法

環境

製品 バージョン
Pivotal HD  
HiveServer2   

目的

この記事はHiveServer2の設定に必要な手順を列挙する。この記事ではPivotal HDクラスタが既に存在し、HiveServerが稼働していることを前提とする。

導入

本項目では、HiveServer2がどのようなもので、どのように動作するのか一般的な概要について述べる。

HiveServer2はリモートクライアントがHiveServer1に対してクエリを実行したり結果を取得したりするためのサーバインターフェースである。HiveServer2は、HiveServer1のリリースを変更しない限り、HiveServer1のデータを修正することなくアクセス可能である。HiveServer2を利用するために、データの変更・変換を行う必要はない。HiveServer1のかわりにHiveServer2に移行してすぐに使用することもできる。

HiveServer2は以下の機能をサポートしている。

  • 複数クライアントの同時実行サポート
  • 不審なユーザによるアクセスを防ぐためにユーザ認証を利用することが可能
  • ユーザデータへのアクセス権に関連して認証を強制
  • JDBCやODBCといったオープンなAPIを使用したクライアントに対してより良いサポートを提供

手順

HiveServer2設定のため以下の手順を実行する。

  1. HiveServer2をインストールするノードを選択

    理論的には、Pivotal HDクラスタの任意のノードにインストール可能だが、マスターサービスノードへのインストールが好ましい。もし、すでにHiveServer1がインストールされている場合、HiverServer2を稼働させるため同一ノードを使用することになるであろう。その理由として、いずれHiveServer1が廃止され、結果としてその使用を停止することになるからである。ただし、この場合、HiverServer2を起動する前にHiveServer1を先に停止しておく必要がある。

  2. HiveServer2パッケージをインストール

    既存 PHD クラスタはすでにPivotal HD Install & Configuration Manager utility(ICM)を使用するよう設定されているので、クラスタノード上には /etc/yum.repos.d/gphd.repo がすでに存在し、yum を利用してHiveServer2をインストールすることが可能である。

    [gpadmin@hdw3 ~]$  sudo yum install hive-server2
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     Dependencies Resolved
    ..
    ..
    Installing:
     hive-server2                                  noarch                                  0 .11.0_gphd_2_1_1_0-83                                   gphd-admin-localrepo                                  5.1 k
    ..
    ..
    Installed:
      hive-server2.noarch 0:0.11.0_gphd_2_1_1_0-83
    Complete!
    注意: yumが使用できない場合は、rpmコマンドでhive-server2パッケージをインストール
    例: rpm -ivh <PHDバイナリへのパス>/hive/rpm/hive-server2-x.x.x_gphd_x_x_x_x-x.noarch.rpm
  3. /etc/gphd/hive/conf/hive-site.xml を編集 
  4. デフォルトでは、HiveServer1とHiveServer2はポート番号10000にバインドしようとするので、HiveServer2を起動する前にHiveServer1が停止していることを確認 

    注意: ポート番号の変更は必須ではないが、必要に応じてhive.server2.thrift.portパラメータによりポート番号の変更は可能。

  5.  <property>
      <name>hive.server2.thrift.port</name>
      <value>10001</value>
      <description>TCP port number to listen on, default 10000</description>
    </property>
  6. データ破損を回避するため以下のパラメータ設定が必要

    HiveはApache Zookeeperを使用したロッキングの機能を保持する。Zookeeperは信頼性の高い分散コーディネーションを実装している。設定時の手順以外では、ZookeeperはHiveユーザからは隠蔽されている。 
     <property>
      <name>hive.support.concurrency</name>
      <description>Whether Hive supports concurrency or not. A Zookeeper instance must be up and running for the default Hive lock manager to support read-write locks.
    </description>
      <value>true</value>
    </property>
    <property>
      <name>hive.zookeeper.quorum</name>
      <description>Zookeeper quorum used by Hive's Table Lock Manager</description>
      <value>hdw1.hadoop.local,hdw2.hadoop.local,hdw3.hadoop.local</value>
    </property>

    以上の設定により、Hiveは自動的に各クエリのためロックの取得をし始める。SHOW LOCKS <テーブル名>;コマンドで現在使用しているロックを確認することができる。

    Hiveがサポートしているロックは2種類あり、concurrencyが有効になっているとき、これらのロックは自動的に有効となる。
     
    Shared Lock: テーブルを読むときに要求されるロックである。複数の同時進行でのshared lockが認められる。

    Exclusive Lock: テーブルに対して変更を伴うすべての操作に対して要求されるロックである。他のテーブル変更操作に対する排他制御だけでなく、他のプロセスによるクエリに対する排他制御も行う。
    テーブルがパーティション構成の場合、1つのパーティションにexclusive lockを要求することで、矛盾した同時変更を防ぐために当該テーブルにはshared lockが要求される。矛盾した同時変更の例としては、パーティションが変更されている間にテーブルを削除するといった操作があげられる。

    Hiveサーバがnamenodeに対する接続数過多を防ぐために、 ipc.client.connection.maxidletimeにデフォルト値の10秒を明示的に設定する必要がある。理由は、PHDでは初期設定において、core-site.xmlの当該パラメータを1時間に設定するので、HiveServer2を使用するとout of memoryエラーが生じてしまうためである。

    <property>
    <name>ipc.client.connection.maxidletime</name>
    <value>10000</value>
    </property>
  7. 上記設定完了後、HiveServer2を起動

    [gpadmin@hdw3 conf]$ sudo service hive-server2 start
    starting hive-server2, logging to /var/log/gphd/hive/hive-server2.log
                                                               [  OK  ]
  8. beelineユーティリティを使用しHiveServer2に接続

    BeelineはSQLLine CLI ベースのJDBCクライアントで、HiveServer2との相互連携に特化して開発されている。使用されるJDBCドライバは、HiveServer2のThrift APIを適用し、HiveServer2と通信を行う。Hiveを使った開発はHiveServer1からHiveSever2に移行しつつあるので、beelineに慣れておく必要がある。

    注意: この例では、hdw3はHiveServer2がインストールされているサーバで、HiveServer2のポート番号が10001である。そのため、実際のインストールに適合するよう適切に変更されたい。

    [gpadmin@hdm1 init.d]$ beeline
    Beeline version 0.11.0-gphd-2.1.1.0 by Apache Hive
    beeline> !connect jdbc:hive2://hdw3:10000 username password org.apache.hive.jdbc.HiveDriver
    Connecting to jdbc:hive2://hdw3:10001
    Connected to: Hive (version 0.11.0-gphd-2.1.1.0)
    Driver: Hive (version 0.11.0-gphd-2.1.1.0)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    0: jdbc:hive2://hdw3:10000> show tables
    . . . . . . . . . . . . . > ;
    +------------+
    |  tab_name  |
    +------------+
    | passwords  |
    +------------+
    1 row selected (1.487 seconds)
    0: jdbc:hive2://hdw3:10000>
  9. セキュアクラスタ上のHiveServer2に接続する場合
    [gpadmin@hdm1 init.d]$ beeline
    2: jdbc:hive2://hdm1:10001> !connect jdbc:hive2://hdm1:10001/default;principal=hive/hdm1.gphd.local@GPHD.LOCAL
    Connecting to jdbc:hive2://hdm1:10001/default;principal=hive/hdm1.gphd.local@GPHD.LOCAL
    Enter username for jdbc:hive2://hdm1:10001/default;principal=hive/hdm1.gphd.local@GPHD.LOCAL: gpadmin
    Enter password for jdbc:hive2://hdm1:10001/default;principal=hive/hdm1.gphd.local@GPHD.LOCAL: *******
    Connected to: Hive (version 0.12.0-gphd-3.0.1.0)
    Driver: Hive (version 0.12.0-gphd-3.0.1.0)
    Transaction isolation: TRANSACTION_REPEATABLE_READ
    3: jdbc:hive2://hdm1:10001/default> show tables;
    +------------+
    | tab_name |
    +------------+
    | book |
    | book1 |
    | book10 | 

    注意: もし、アクセス権限がない、あるいはクラスタがセキュアである場合は、任意のread/write操作を実行することができない上に以下のエラーが発生する。そのため、適切な権限を付与すること。 

    3: jdbc:hive2://hdm1:10001/default> select * from book;
    Error: Error while processing statement: Authorization failed:No privilege 'Select' found for inputs { database:default, table:book, columnName:word}. Use show grant to get more details. (state=,code=403)
    0: jdbc:hive2://hdm1.gphd.local:10001/default> grant select on table book to user gpadmin ;
     

    0: jdbc:hive2://hdm1.gphd.local:10001> select * from book;
    +-------+
    | word  |
    +-------+
    +-------+ 

追加情報

Beeline に関する様々な情報:

  • beeline -e "show tables" : テーブル一覧表示
  • beeline -f [SQL を含むファイル] : ファイルに含まれるSQLを実行
  • beeline -help | -h : beelineユーティリティのオプション一覧表示
  • !quit : beelineターミナルから退出
  • set env:TERM; env:TERM=xterm; : beelineクライアントに環境変数値を設定
  • beeline -u jdbc:hive2://localhost:10001 -n gpadmin -p changeme : beelineでHiveServer2に接続する文法
  • beeline ウィキ: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

コメント

Powered by Zendesk