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
(2)、sqoop/bin/configure-sqoopの編集
(3)、テスト
3、sqoopコマンドラインの概要
(1)、sqoop list-databasesコマンド
pgデータベースの下にあるすべてのデータベースをリストします.
例:
(2)、sqoop list-tablesコマンド
pgデータベースの下にあるデータベースの下にあるすべてのテーブルをリストします.例:
(3)、sqoop create-hive-tableコマンド
hiveでリレーショナル・データベースと同じテーブルを作成します.
次のようになります.
(4)、sqoop importコマンド
sqoopのコア機能は、リレーショナル・データベースからhiveまたはhdfsにデータをインポートする
hive例へのデータのインポート:
次のようになります.
hdfsの例にデータをインポートします.
次のようになります.
更新
sqoopでテーブルをインポートすると、同じテーブルがpgからhiveまでほとんどnullの行が多く出ることがわかります.フィールドにnがあるためです.調べたところ、hive-drop-import-delimsでこの問題を解決できることがわかりました.使い方は、直接--hive-drop-import-delimsを加えるだけでいいです.後に文字を指定しなくても、デフォルトでn,r,01などの文字が削除されます.
例:
注意すべき点は--hive-drop-import-delimsと--directは互換性がありません!
クラスタマシンがデータベースにアクセスする権限の問題もあります.
これではMapReduce方式で同期する必要があり、問題はまた発生した:テーブルにプライマリ・キーがなければ、-m 1を加える必要があり、-mはいくつかのmapタスクを起動してデータを読み取ることを示し、データベースのテーブルにプライマリ・キーがなければこのパラメータは設定しなければならず、1に設定するしかない.そうしないとエラーを示す.
例:
また、次のプロンプトが表示されます.hdfs://qunarcluster/user/ticketdev/table_nameこのディレクトリにすでに問題があるので、前にこのディレクトリを削除してからsqoopコマンドを実行する必要があります.
更新
pgにデータが文字化けしている場合、hiveに同期するとhive表面積が文字化けしてしまいます.
同期時に文字コードを制限することができます.
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