目次
1.ニーズと計画の概要
- 要件:最初に83個のMySQLテーブルすべてをHiveデータウェアハウスにインポートしてから、新しいデータをHiveデータウェアハウスのodsレイヤーに段階的にインポートします。
- 解決策:一時テーブルを作成し、各テーブルの情報を一時テーブルに挿入し、MySQL一時テーブル情報をローカルにエクスポートしてから83 Sqoopジョブを作成し、最後にSqoopジョブを実行して83テーブルの増分インポートを実現します。前提つまり、83個のテーブルすべてに時間フィールドがあり、Sqoopはこの時間フィールドを監視できます。
2、Sqoopジョブ
1.Sqoopジョブの使用例
1.ジョブリストのクエリ
[root@hdp301 ~]# sqoop job --list
2.ジョブを削除します
[root@hdp301 ~]# sqoop job --delete kangll
3.テストジョブを作成します
sqoop job --create kangll -- import --connect jdbc:mysql://192.168.2.226:3306/yx \
--table stat_url_count \
--username root \
--password winner@001 -m 1 \
--hive-import \
--hive-table dwd_url_count \
--external-table-dir /yax/dwd/sfyp_test.db/dwd_url_count \
--incremental append \
--check-column last_timestamp \
--last-value '2015-11-30 16:59:43.1' \
--fields-terminated-by "\001"
4.ジョブを実行します
[root@hdp301 ~]# sqoop job -exec kangll
印刷されたログ
5.実行結果を表示する
Sqoopジョブを作成する理由。ジョブはモニタリングの最新のタイムスタンプフィールドを/root/.sqoop/metastore.db.scriptに保存できるため、Sqoopジョブを使用して保存しない場合、デフォルトは次のようになります。見つかった最初の指定された値と最大値を取得します
6.2つの新しいデータをMySQLに挿入します
7.ログにクエリを表示する方法
8.ハイブテーブルのデータをクエリします
2.Sqoopインクリメンタルインポート
注:Sqoopは、mysqlをハイブに変換するときにlastmodifiedモードを使用した増分インポートをサポートしていません
nohup sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true \ --connect ${driver} \ --username ${dbUsername} \ --password ${dbPasswd} \ --table "${tableName}" \ --hive-import \ --hive-database data_exchange \ --hive-table "${tableName}" \ --hive-partition-key "dt" \ --hive-partition-value "${date}" \ --fields-terminated-by '\001' \ --external-table-dir "/winhadoop/ods/data_exchange.db/${tableName}" \ --check-column jhpt_update_time \ --incremental append \ --last-value '1990-02-02 12:21:21' \ --target-dir "/sqoop/data/append/" \ --m 1 \ --null-string '\\N' \ --null-non-string '\\N' \ --mapreduce-job-name data_exchange_${tableName} >> ${sfyp_log}/ods_data_exchange.${date}.log
もう1つのポイント:Sqoopジョブのパスワード保存パラメーター
--password-file /input/sqoop/pwd/sqoopPWD.pwd
パスワードを保存するファイルを作成し、HDFSにアップロードします
echo -n "hadoop" > sqoopPWD.pwd
hdfs dfs -mkdir -p /input/sqoop/pwd/sqoopPWD.pwd
echo -n "hadoop" > sqoopPWD.pwd
hdfs dfs -mkdir -p /input/sqoop/pwd/sqoopPWD.pwd
hdfs dfs -put sqoopPWD.pwd /input/sqoop/pwd
hdfs dfs -chmod 400 /input/sqoop/pwd/sqoopPWD.pwd