Phoenix 匯出csv檔案

來源:互聯網
上載者:User

標籤:

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.pigREGISTER /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.pigREGISTER /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檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.