sqoop使用心得(sqoop増分注ぎ込み)

7360 ワード

sqoopは何をしているのか、ここでペンを無駄にしないで、ここでは主に次の初心者がsqoopに触れた問題について話します.
ビジネスシーンHiveがHqlを検索した結果MySqlに入り、現在本人は2つのステップで実現しています.
1 hiveクエリ結果を直接Hiveのテーブルaに入れる(aテーブルは作成する必要があり、構造はbと同じ)
2 sqoopでテーブルaの内容をMySqlテーブルb(bテーブルは既に存在する)にインポートし、
このとき、hiveでaテーブルを作成する必要があります.bテーブルのフィールドが多い場合は、構築テーブル文に書くフィールドが必要です.私は書きたくない.あなたも、sqoopでMySQLのbテーブルをhiveに直接インポートしていると思います.hiveテーブルのデフォルトの区切り文字は'001'なので、逆さまにするときは、テーブル区切りパラメータを持っていくことに注意してください.
--fields-terminated-by't'、以下の通りです.
sqoop import --connect jdbc:mysql://db.foo.com/corp --table EMPLOYEES\
 --fields-terminated-by '\t'
sqoopでhiveのテーブルをMySqlにインポートするには、hiveのテーブルセパレータが't',sqoopでなければスムーズにインポートできません.デフォルトを使用すると、sqoopでインポートするときにパラメータ--input-fields-terminated-by'001'を使用してもだめです.きっと--input-fields-terminated-by't'です.
2 sqoop hiveデータをMySqlがhiveテーブルのカラムの値nullに遭遇した場合にインポートします.
データをインポートする過程で、カラム値がnullの場合、hiveでnullの場合はNで置き換えられるので、MySqlにインポートするときは、2つのパラメータを追加する必要があります.--input-null-string'\N'--input-null-non-string'\N'、1つの''を追加する必要があります.もしあなたがこれを通じてまだフィールドがnullの場合を解決できないならば、やはり何かNumberFormalt異常を報告するならば、それは比較的に別のもので、大丈夫で、私たちはやはり方法を解決して、これは究極の武器です.ほほほ
sqoopでMySqlをインポートするたびに、MySqlテーブルに名前が付けられていることに注意してください.JAvaファイルは、その後JARパッケージに電話し、sqoopにhadoopのMRに提出してHiveテーブルのデータを解析します.では、レポートのエラーに基づいて、対応する行を見つけて、ファイルを書き直して、コンパイルして、再パッケージして、sqoopは-jar-file、--class-nameの組み合わせを通じて、自分のjarパッケージの中のclassを実行することを指定することができます.をクリックして、hiveテーブルの各行のデータを解析します.スクリプトは次のとおりです.完全な例は次のとおりです.
 
  

./bin/sqoop export --connect "jdbc:mysql://localhost/aaa?useUnicode=true&characterEncoding=utf-8"

--username aaa --password bbb --table table

--export-dir /hive/warehouse/table --input-fields-terminated-by '\t'

--input-null-string '\\N' --input-null-non-string '\\N'

--class-name com.chamago.sqoop.codegen.bi_weekly_sales_item

--jar-file /tmp/sqoop-chamago/bi_weekly_sales_item.jar


上面--jar-file 参数指定jar包的路径。--class-name 指定jar包中的class。
这样就可以解决所有解析异常了。


下面贴下sqoop经常用的命令,


1 导入MySQL表到Hive

./sqoop import --connect jdbc:mysql://localhost/aaa?useUnicode=true&characterEncoding=utf-8 --username
 aaa --password bbb --table table2 --hive-import

3 sqoopインクリメンタル注入
sqoopは2つのインクリメンタルMySqlをhiveにインポートするモードをサポートし、
1つはappendです.たとえば、次のような増分カラムを指定します.
--incremental append  --check-column num_iid --last-value 0 
もう1つは、タイムスタンプに基づいて、次のようにすることができます.
--incremental lastmodified --check-column created --last-value '2012-02-01 11:0:00' 
「2012-02-01 11:0:00」よりもcreatedの方が大きいデータのみをインポートします.