Cloudera Labs中的Phoenix

 

Fayson發表於Hadoop實操訂閱html

607java

舒適提示:要看高清無碼套圖,請使用手機打開並單擊圖片放大查看。sql

1.導讀數據庫


Cloudera Labs在2016-06-27宣佈打包了Apache Phoenix項目,版本爲4.7.0,並基於CDH5.7.0。安裝依舊是你們熟悉的Parcel方式,下載地址爲:http://archive.cloudera.com/cloudera-labs/phoenix/parcels/1.3/apache

Fayson這兩天親測了一下,CDH5.12.1也能勉強一用,想知道具體該怎樣安裝和使用,歡迎關注本公衆號明天的文章。性能優化

Cloudera Labs說白了就是有羣人在「實驗室」會研究或者玩玩一些有趣的好比其餘Apache的項目,雖然會偶爾打包一些項目,可是官方是不Support的。另外Cloudera Labs也不會保證從舊的Phoenix版本升級到4.7的兼容性。dom

2.概述分佈式


ApachePhoenix是Apache HBase上一個高效的SQL引擎,也挺火的。不少公司都在使用它,好比Salesforce,它開源了這個項目,並將該項目貢獻到社區。如今也已是頂級項目了。工具

ClouderaLabs在2015-05-06宣佈打包Phoenix並集成到CDH平臺,本文主要爲了描述這幾個問題:Phoenix能夠作什麼?爲何你們想要使用它?和已有的SQL工具相好比何?它的一些優點能夠取代現有的一些工具嗎?oop

固然咱們首先會先介紹一下Phoenix以及它的一些獨特的特性,另外會給出一些它的使用場景以及和其它SQL工具的對比。

3.Apache Phoenix是什麼


首先Phoenix是HBase之上的SQL工具,至於HBase是什麼,我就不介紹了,你若不懂,就不須要往下繼續看了。Phoenix旨在經過標準的SQL語法來簡化HBase的使用,並可使用標準的JDBC鏈接HBase,而不是經過HBase的Java客戶端APIs。它可讓你執行全部的CRUD和DDL操做,好比建立一張表,插入數據以及查詢數據。SQL和JDBC能夠大大減小用戶代碼的開發,固然它也提供一些性能優化的手段,經過SQL和JDBC,你能夠更方便的將HBase集成到你現有的系統或者工具。

當Phoenix接收到SQL查詢後,它會在本地編譯成HBase的API,而後推到集羣進行分佈式的查詢或計算。它自動建立了一個元數據庫用來存儲HBase的表的元數據信息。由於Phoenix是直接調用的HBase的API,coprocessors和自定義的filters,因此對於大量小查詢能夠實現毫秒級返回,千萬級別的數據實現秒級返回。

4.使用場景


Phoenix很是適合HBase的隨機訪問,它的二級索引特性同時可讓你實現非主鍵查詢的快速返回,而不須要進行全表掃描。它可讓你像傳統數據庫表的方式建立和管理HBase中的表,同時Phoenix也支持複合主鍵。

Phoenix能夠給Rowkey加鹽,從而避免由於簡單遞增的Rowkey引發的RegionServer熱點問題。經過指定不一樣的租戶鏈接實現數據訪問的隔離,從而實現多租戶,租戶只能訪問屬於他的數據。

雖然Phoenix有這麼多優點,可是它依舊沒法替代RDBMS。好比它還有如下限制:

  • Phoenix不支持跨行的事務
  • 查詢優化和join機制比大多數RDBMS要簡陋
  • 二級索引是經過索引表實現的,主表和索引表的同步會存在問題,雖然只是在一段很短的時間內。因此索引沒法徹底知足ACID
  • 多租戶功能比較簡單

5.與Hive/Impala的比較


Hive/Impala也能夠做爲HBase之上的SQL工具。包括Phoenix這3個工具在不少功能上都有一些重疊,好比它們都提供SQL執行以及JDBC驅動

不像Impala和Hive,Phoenix與HBase結合更加緊密,從而能夠更好的利用HBase的一些特性,好比coprocessors和skip scans。

  • Phoenix的目標是在HBase之上提供一個高效的類關係型數據庫的工具,定位爲低延時的查詢應用。Impala則主要是基於HDFS的一些主流文件格式如文本或Parquet提供探索式的交互式查詢。Hive相似於數據倉庫,定位爲須要長時間運行的批做業。
  • Phoenix很適合須要在HBase之上使用SQL實現CRUD,Impala則適合Ad-hoc的分析類工做負載,Hive則適合批處理如ETL。
  • Phoenix很是輕量級,由於它不須要額外的服務。
  • Phoenix還支持一些高級功能,好比多個二級索引,flashback查詢等。不管是Impala仍是Hive都沒法提供二級索引支持。

如下是比較:

 

Apache Phoenix

Impala

Hive

語法

SQL

SQL

HiveQL

定位

爲低延時應用在HBase之上提供高效的SQL查詢

大數據集之上的交互式探索分析

批處理好比ETL

二級索引

Yes(沒法保證ACID)

No

No

額外的服務

No

Yes

Yes

HBase的高級特性

Yes

No

No

6.安裝


若是須要安裝Phoenix,至少須要HBase1.0,從CDH5.4之後開始打包HBase1.0。

1.下載Phoenix的Parcel:http://archive.cloudera.com/cloudera-labs/phoenix/

2.經過Cloudera Manager安裝Parcel,首先在Cloudera Manager裏配置一個新的Parcel倉庫地址,而後下載,分發,激活。

3.若是你想要使用HBase的二級索引功能,在重啓HBase服務以前,須要在hbase-site.xml中添加如下內容:

<property>
    <name>hbase.regionserver.wal.codec</name>
    <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>

4.在激活Phoenix的Parcel包以後,請確認已經重啓了HBase的服務。

7.Phoenix的命令行工具


Phoenix的命令行工具在/usr/bin目錄下,在使用Phoenix的命令行工具以前,須要配置Java的環境變量。

export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export PATH=$PATH:$JAVA_HOME/bin
  • phoenix-sqlline.py是執行SQL的命令腳本,在執行該命令以前,你須要指定HBase集羣的Zookeeper地址,好比:phoenix-sqlline.py zk01.example.com:2181。若是想要在命令行執行一個SQL文件,能夠在命令行直接帶上該文件。好比:sqlline.py zk01.example.com:2181 sql_queries.sql
  • phoenix-psql.py能夠用來加載CSV數據,後面也能夠直接帶上須要執行的SQL腳本,也能夠不加。好比:phoenix-psql.py zk01.example.com:2181 create_stmts.sql data.csvsql_queries.sql
  • 性能測試腳本phoenix-performance.py,能夠用於一次插入多少行數據。好比:phoenix-psql.py zk01.example.com:2181 100000

8.接下來的工做


Phoenix項目正在調研使用Tephra(來自CASK)來作事務管理,PHOENIX-400。同時也在考慮集成Cost-based的查詢優化,PHOENIX-1177。雖然Phoenix支持tracing,http://phoenix.apache.org/tracing.html,但監控和管理工做還有待優化和完善。

9.總結


Phoenix簡化了HBase不少場景的使用方式。與Cloudera Labs中的其餘工具同樣,Cloudera官方不會提供Support,僅供實驗使用。若是有任何反饋意見,能夠在Cloudera Labs的社區與Cloudera進行反饋和互動。https://community.cloudera.com/t5/Cloudera-Labs/bd-p/ClouderaLabs

10.參考網址


https://blog.cloudera.com/blog/2015/05/apache-phoenix-joins-cloudera-labs/

https://community.cloudera.com/t5/Storage-Random-Access-HDFS/HBase-Phoenix-support-for-CDH-5-7/td-p/41965

https://blog.cloudera.com/blog/2015/11/new-apache-phoenix-4-5-2-package-from-cloudera-labs/

https://www.cloudera.com/developers/cloudera-labs.html

https://community.cloudera.com/t5/Cloudera-Labs/bd-p/ClouderaLabs

相關文章
相關標籤/搜索