sqoop v1.4.5使用例(postgresql)

4961 ワード

1、Sqoopの紹介
Apache sqoopは、Apache hadoopと構造化データベース間で大規模なデータを効率的に転送するためのツールで、MySQL、postgresql、Oracle、HDFS間でデータを転送するために使用できます.Sqoopは2012年3月にスタートし、現在はApacheのトッププロジェクトである.現在最も安定しているsqoop 1バージョンもsqoop 1の最後のバージョンは1.4.6で、最新のsqoop 2バージョンは1.99.7です.Sqoop 1とsqoop 2の間には互換性がありません.
ダウンロードアドレス:http://sqoop.apache.org
文書アドレス:http://sqoop.apache.org/docs/...
2、Sqoop取付
(1)、sqoop/conf/sqoop-envを編集する.sh
    hbase hive       ,    zookeeper      zookeeper home,        hive,    。

export HIVE_HOME=XXXX

(2)、sqoop/bin/configure-sqoopの編集
              :

             HCAT_HOME 、ACCUMULO_HOME、ZOOKEEPER_HOME

(3)、テスト
     :sqoop version

    :    

06/09/19 15:28:49 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5
Sqoop 1.4.5
git commit id 5b34accaca7de251fc91161733f906af2eddbe83
Compiled by abe on Fri Aug 1 11:19:26 PDT 2014

3、sqoopコマンドラインの概要
(1)、sqoop list-databasesコマンド
pgデータベースの下にあるすべてのデータベースをリストします.
例:
sqoop list-databases --connect jdbc:postgresql://host:port --username user --password pass

(2)、sqoop list-tablesコマンド
pgデータベースの下にあるデータベースの下にあるすべてのテーブルをリストします.例:
sqoop list-tables --connect jdbc:postgresql://host:port/database --username user --password pass

(3)、sqoop create-hive-tableコマンド
hiveでリレーショナル・データベースと同じテーブルを作成します.
sqoop create-hive-table  --connect jdbc:postgresql://host:port/database --username user --password pass --table table_name --hive-database hive_database --hive-table hive_table_name

次のようになります.
--table           

--hive-database   hive     

--hive-table   hive     

(4)、sqoop importコマンド
sqoopのコア機能は、リレーショナル・データベースからhiveまたはhdfsにデータをインポートする
hive例へのデータのインポート:
 sqoop import --connect jdbc:postgresql://$HOST:$PORT/$DATABASES --username $USER --password $PASS --direct --hive-import --hive-database $hive_db --hive-table $hive_tb --map-column-java $arg --map-column-hive $arg --table $pg_tb --where "$wh" -- --schema public --input-null-string '\\N' --input-null-non-string '\\N'

次のようになります.
--connect:       ,                   

--username:             

--password:         

--direct:sqoop       ,            MapReduce       

--hive-import:       hive,    --hbase-import 

--hive-database:     hive      

--hive-table:     hive    

--map-column-java:         java           ,                    ,             bigint,  Java         long ,      ,          java        ,   : –map-column-java DB_ID=String,id=Integer

--map-column-hive:  hive  ,             ,   :–map-column-hive TBL_ID=String,LAST_ACCESS_TIME=string

--table:           

--where:            ,           

-- --schema:pg    schema  

--input-null-string:string       null     

--input-null-non-string:  string       null     



hdfsの例にデータをインポートします.
sqoop import --connect jdbc:postgresql://$HOST:$PORT/$DATABASES --username user --password pass --append --target-dir /user/ticketdev  --direct --table ttd_first_order_info -- --schema transformation

次のようになります.
--append:    ,                ,  copy     
--target-dir:    

更新
sqoopでテーブルをインポートすると、同じテーブルがpgからhiveまでほとんどnullの行が多く出ることがわかります.フィールドにnがあるためです.調べたところ、hive-drop-import-delimsでこの問題を解決できることがわかりました.使い方は、直接--hive-drop-import-delimsを加えるだけでいいです.後に文字を指定しなくても、デフォルトでn,r,01などの文字が削除されます.
例:
sqoop import --connect jdbc:postgresql://$HOST:$PORT/$DATABASES --username $USER --password $PASS --hive-drop-import-delims --hive-import --hive-database $hive_db --hive-table $hive_tb --table $pg_tb -- --schema $pg_db

注意すべき点は--hive-drop-import-delimsと--directは互換性がありません!
クラスタマシンがデータベースにアクセスする権限の問題もあります.
これではMapReduce方式で同期する必要があり、問題はまた発生した:テーブルにプライマリ・キーがなければ、-m 1を加える必要があり、-mはいくつかのmapタスクを起動してデータを読み取ることを示し、データベースのテーブルにプライマリ・キーがなければこのパラメータは設定しなければならず、1に設定するしかない.そうしないとエラーを示す.
例:
sqoop import  -m 1 --connect jdbc:postgresql://$HOST:$PORT/$DATABASES --username $USER --password $PASS --hive-drop-import-delims --hive-import --hive-database $hive_db --hive-table $hive_tb --table $pg_tb -- --schema $pg_db

また、次のプロンプトが表示されます.hdfs://qunarcluster/user/ticketdev/table_nameこのディレクトリにすでに問題があるので、前にこのディレクトリを削除してからsqoopコマンドを実行する必要があります.
更新
pgにデータが文字化けしている場合、hiveに同期するとhive表面積が文字化けしてしまいます.
同期時に文字コードを制限することができます.
sqoop import --connect "jdbc:postgresql://HOST:PORT/database?useUnicode=true&characterEncoding=utf-8" --username USER --password PASS --direct --hive-import --hive-database hive_db --hive-table hive_tb --table pg_tb -- --schema pg_schema