Cloudera LabsにApache Phoenixが!
@shiumachiさんのツイートにもあるように、SQL on HBaseの実相である Apache PhoenixがCloudera Labに追加されました。
HBaseに対してSQLを実行できるApache Phoenixが Cloudera Labs に追加されました! http://t.co/Q9iUXyNrxI
— Sho Shimauchi (@shiumachi) May 6, 2015
Apache Phoenix
Apache PhoenixはOSSで開発されている、HBase上のリレーショナルデータベースのレイヤーです。多くの人が慣れているSQLを利用して、低遅延でHBaseのデータにアクセスができます。http://phoenix.apache.org/index.html
HBaseはGoogleのBigtableを参考に開発されている低遅延なNoSQLの一つですが、ネイティブでSQLに対応していません。データへのアクセスはプログラムから(あるいはhbase shellから)行う必要があります。
SQLでHBaseにアクセスしたい場合、今まではHiveやImpalaから利用することもできました。しかし、これらはHBaseへのアクセスが主目的ではなく効率が良くありません。PhoenixはHBaseのみをターゲットにしているため効率が良いのです。
以下のClouderaのブログの表にもあるように、それぞれ特色があります。

- Apache Phoenix:HBase上のデータに対して低遅延でアクセス
- Cloudera Impala:大量データセットに対して対話的な分析
- Apache Hive:ETLなどのバッチ
目的が異なるため、PhoenixやImpalaだけで全て解決、ということにはならないので注意が必要です。
Cloudera Quickstart VMでPhoenixを試す
手順はドキュメントに記載されており、やることもあまり多くはないので概ね問題なくセットアップできるはずです。(Cloudera Managerのおかげです。ありがとう!)。なおPhoenixにはHBase 1.0が必要なので、CDH5.4にアップデート(もしくはCDH5.4のQuickstart VMを利用)してから使ってみてください。
ParcelのレポジトリにPhoenixのURLを追加
CLABS_PHOENIXのダウンロード
アクティブ化済みの状態
安全バルブに以下のプロパティを追加
ドキュメントに従い以下のプロパティをhbase-site.xmlの高度な設定にある、安全バルブに追加します。
[xml]
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
[/xml]
設定を保存し、HBaseのサービスを再起動します。
Phoenixを使って見る
ドキュメントにあるように、環境変数を設定して対話的なシェルを実行します。
[code]
[cloudera@quickstart hbase]$ export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
[cloudera@quickstart hbase]$ export PATH=$PATH:$JAVA_HOME/bin
[cloudera@quickstart hbase]$ /usr/bin/phoenix-sqlline.py quickstart.cloudera:2181
Setting property: [isolation, TRANSACTION_READ_COMMITTED]
issuing: !connect jdbc:phoenix:quickstart.cloudera:2181 none none org.apache.phoenix.jdbc.PhoenixDriver
Connecting to jdbc:phoenix:quickstart.cloudera:2181
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
15/05/07 07:16:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
15/05/07 07:16:33 WARN impl.MetricsConfig: Cannot locate configuration: tried hadoop-metrics2-phoenix.properties,hadoop-metrics2.properties
Connected to: Phoenix (version 4.3)
Driver: PhoenixEmbeddedDriver (version 4.3)
Autocommit status: true
Transaction isolation: TRANSACTION_READ_COMMITTED
Building list of tables and columns for tab-completion (set fastconnect to true to skip)…
70/70 (100%) Done
Done
sqlline version 1.1.8
0: jdbc:phoenix:quickstart.cloudera:2181>
[/code]
コマンドプロンプトが表示されました。 無事に起動したようです!(なお、プロンプトが戻ってくるまでそれなりに時間がかかります。)
それでは、公式ドキュメントのFAQのHello Worldに従って、テーブルを作ってデータを投入し、クエリしてみましょう。
[code]
0: jdbc:phoenix:quickstart.cloudera:2181> create table test (mykey integer not null primary key, mycolumn varchar);
1 row affected (0.016 seconds)
0: jdbc:phoenix:quickstart.cloudera:2181> upsert into test values (1,’Hello’);
1 row affected (0.016 seconds)
0: jdbc:phoenix:quickstart.cloudera:2181> upsert into test values (2,’World!’);
1 row affected (0.007 seconds)
0: jdbc:phoenix:quickstart.cloudera:2181> select * from test;
+——————————————+———————————–+
| MYKEY | MYCOLUMN |
+——————————————+———————————–+
| 1 | Hello |
| 2 | World! |
+——————————————+———————————–+
2 rows selected (0.086 seconds)
0: jdbc:phoenix:quickstart.cloudera:2181>
[/code]
うまくいきました!簡単ですね!
さて、次は
手元の環境では以下のような問題に遭遇しています。調査していないので原因は不明ですが、そのうちにクリーンインストールしたQuickstart VM環境で試してみる予定です。
- Quickstart に書かれている、非対話形式(phoenix_psql.py)でのクエリはうまくいかず
- テーブルは作成されクエリもエラーにならないが、データがupsertされない。従ってSELECTの結果が0件になってしまう。なぜ?
- テーブル一覧にテーブルが表示されない (phoenix-sqlline.pyから!tables)。なぜ?
- 特定のテーブルの列情報が見えない (phoenix-sqlline.pyから!columns table名)。なぜ?





コメント