12

hadoopとhbasecdh3u2をインストールしました。hadoopでは、パスにファイルがあります/home/file.txt。それは次のようなデータを持っています

one,1
two,2
three,3

このファイルをhbaseにインポートしたいと思います。その中で、最初のフィールドは文字列として解析され、2番目のフィールドは整数として解析されてから、hbaseにプッシュされる必要があります。これを行うのを手伝ってください

よろしくお願いします。

4

1 に答える 1

21

シンプルでわかりやすく、柔軟性があるため、HBaseへの取り込みにApachePigを使用するのが好きです。

これは、テーブルと列ファミリーを作成した後、あなたに代わって仕事をするPigスクリプトです。テーブルと列ファミリーを作成するには、次のようにします。

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

ファイルをHDFSに移動します。

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

次に、HBaseStorageに保存するpigスクリプトを記述します( Pigの設定方法と実行方法を調べる必要がある場合があります)。

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');

上記のスクリプトでは、キーはになっていることに注意してくださいstrdata。何かから独自のキーを作成する場合は、FOREACHステートメントを使用してキーを生成します。HBaseStorageは、前の関係(A::strdataこの場合)の最初のものがキーであると想定します。


他のいくつかのオプションは次のとおりです。

  • 上記と同じことを行うJavaMapReduceジョブを記述します。
  • クライアントとHTableを直接対話し、行ごとに配置します。これは、はるかに小さいファイルでのみ実行する必要があります。
  • putcsvの行をシェルコマンドに変換するある種のスクリプト(つまり、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
    
于 2011-12-27T14:42:48.877 に答える