Phoenix 導出csv文件


 

1. 是否存在高效的csv導出工具?

phoenix提供了BulkLoad工具,使得用戶可以將大數據量的csv格式數據高效地通過phoenix導入hbase,那么phoenix是否也存在高效導出csv數據的工具類呢?

這里可能有人會想是否能夠按照導出常規hbase的方法來導出數據。比如自己寫Java代碼,或者用hbase原生支持的工具類,或者說采用pig提供的hbase工具類。是否能這么干取決於你phoenix建表時候字段的數據類型。如果字段采用的不是varchar、char等字符類型以及unsigned_*類型,或者你的表是salted table,那么脫離phoenix的導出方式必然會導致導出的數據不正確。原因在於phoenix處理大部分數據類型數據字節格式化的方式與原生hbase不一樣。比如,phoenix salted table會在rowkey的第一個字節插入hash值來使數據均勻分布到每一個region上,所以用常規hbase導出工具導出勢必造成rowkey的導出不正確。

2. Pig Loader——最優且唯一的Phoenix導出csv文件工具

幸運的是phoenix官方確實提供了一個高效的導出工具類,但是必須依賴於pig。而且在試驗過程,也就發現只有這個唯一的工具可以完美地支持phoenix表數據的導出

關於pig的介紹以及使用不是這篇文章的重點,沒有接觸過的朋友請自行百度或者google檢索。

phoenix集成pig的介紹可以在下面的官網鏈接查看:

https://phoenix.apache.org/pig_integration.html

里面提到了兩個工具方法,一個用於海量數據的導入,類似於BulkLoad工具,另外一個工具方法用於海量數據的導出。這里我們關注數據的導出。

導出工具號稱為 Pig Loader。根據官網上的介紹:

A Pig data loader allows users to read data from Phoenix backed HBase tables within a Pig script.

意思是我們可以編寫pig腳本並使用phoenix-pig(phoenix繼承pig的模塊)提供的工具類來運行pig腳本實現海量數據的導出。

Pig Loader有兩種形式實現導出:

2.1 export using table

第一種是通過指定hbase表名來導出整個表數據,例如我想導出TEST表的所有記錄,那么可以用如下的腳本命令:

A = load ‘hbase://table/USER‘ using org.apache.phoenix.pig.PhoenixHBaseLoader(‘${zookeeper.quorum}‘);

需要將${zookeeper.quorum}替換成zookeeper集群機器ip加端口,eg: master,slave1,slave2:2181

當然我們還可以精確控制只導出表的哪幾個列:

A = load ‘hbase://table/USER/ID,NAME‘ using org.apache.phoenix.pig.PhoenixHBaseLoader(‘${zookeeper.quorum}‘);

上面的腳本表示導出TEST表所有記錄,但僅包含ID列和NAME列。

2.2 export using query

另外一種是通過指定query語句來控制導出的數據:

A = load ‘hbase://query/SELECT ID,NAME FROM USER WHERE AGE > 50‘ using org.apache.phoenix.pig.PhoenixHBaseLoader(‘${zookeeper.quorum}‘);

【注意】

使用query語句指定的導出方式存在很大的限制,比如說不能指定GROUP BY , LIMIT , ORDER BY , DISTINCT ;同時也無法指定使用聚合函數,如count,sum等。

3. 使用示例

下面我們通過兩個完整的使用示例介紹兩種導出方式的使用。Example1演示指定table方式的導出,而Example2演示指定query方式的導出。

3.1 Example1

vi example1.pig

REGISTER /data/phoenix-default/phoenix-4.6.0-HBase-1.0-client.jar; rows = load ‘hbase://table/USER‘ USING org.apache.phoenix.pig.PhoenixHBaseLoader(‘master,slave1,slave2:2181‘); STORE rows INTO ‘USER.csv‘ USING PigStorage(‘,‘);

執行shell命令:

pig -x mapreduce example1.pig

3.2 Example2

vi example2.pig

REGISTER /data/phoenix-default/phoenix-4.6.0-HBase-1.0-client.jar; rows = load ‘hbase://query/SELECT ID,NAME FROM USER‘ USING org.apache.phoenix.pig.PhoenixHBaseLoader(‘master,slave1,slave2:2181‘); STORE rows INTO ‘USER.csv‘ USING PigStorage(‘,‘);

執行shell命令:

pig -x mapreduce example2.pig

Phoenix 導出csv文件

標簽:

原文地址:http://blog.csdn.net/d6619309/article/details/51339217


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM