2011-12-27 12 views
12

hadoopとhbase cdh3u2がインストールされています。 hadoopには、パス/home/file.txtにファイルがあります。HDFSからHBaseへのデータインポート(cdh3u2)

one,1 
two,2 
three,3 

このファイルをhbaseにインポートします。最初のフィールドはStringとして解析され、2番目のフィールドは整数として解析され、hbaseにプッシュされます。私はdvanceにこの

aThanksを行うために役立つ....

+0

は何をあなたの鍵になりたいですか?それらを1つの列ファミリに、または2つの別々の列ファミリにプッシュしますか? –

答えて

20

それは、シンプル、簡単、かつ柔軟性があるので、私はHBaseのにインジェストのためのApacheの豚を使用して好きです。

ここでは、テーブルと列ファミリを作成した後、あなたの仕事を行うPigスクリプトを示します。

$ hbase shell 
> create 'mydata', 'mycf' 

移動HDFSのファイル:テーブルとカラムファミリを作成するには、あなたがやる、そして、

$ hadoop fs -put /home/file.txt /user/surendhar/file.txt 

HBaseStorageを格納するための豚のスクリプトを記述(あなたは見ていること上記のスクリプトでは、鍵がstrdataになるだろう

A = LOAD 'file.txt' USING PigStorage(',') as (strdata:chararray, intdata:long); 
STORE A INTO 'hbase://mydata' 
     USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
       'mycf:intdata'); 

注こと:set up and run Pig方法まで)。何かから独自のキーを作成する場合は、FOREACHステートメントを使用してキーを生成します。 HBaseStorageは、前の関係(この場合はA::strdata)の最初のものが鍵であると仮定します。


いくつかの他のオプションは次のようになります。

  • は、上記と同じことを行うためにJava MapReduce仕事を書きます。
  • the clientでHTableと直接対話し、行ごとに配置します。これははるかに小さなファイルでのみ行う必要があります。
  • csvの行をシェルputコマンドに変換する何らかのスクリプト(つまりsed、perl、python)を使用してhbaseシェルでデータをプッシュします。この場合も、レコードの数が少ない場合にのみ行う必要があります。

    $ cat /home/file.txt | transform.pl 
    put 'mydata', 'one', 'mycf:intdata', '1' 
    put 'mydata', 'two', 'mycf:intdata', '2' 
    put 'mydata', 'three', 'mycf:intdata', '3' 
    
    $ cat /home/file.txt | transform.pl | hbase shell 
    
+0

ねえドナルド。あなたはこの投稿をチェックしていただけますか? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes –

+0

ドナルドあなたはこの答えを書くためのヒーローです! –

+0

そのPIGスクリプトに必要なHBaseジャーを登録するのを忘れないでください。そのように "REGISTER /usr/lib/hbase/lib/*.jar;" – PinoSan

関連する問題