これらのshoeスクリプトは、エクスポートをループで実行しますが、これは面倒で時間がかかります。
方法:ハイブクエリの結果をhdfsに保存してから、mysqlにエクスポートします
#先判断hdfs是否存在目标目录,不存在就创建
hadoop fs -test -e /tmp/$DB.db/$TABLE
if [ $? -ne 0 ]; then
echo "Directory not exists!"
hadoop fs -mkdir -p $HDFSDIR
echo "目标目录创建成功"
else
echo ""
fi
#将hive查询结果导出到hdfs
hive -e "
insert overwrite directory '$HDFSDIR' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' select * from $DB.$TABLE"
#使用sqoop从hdfs导出到mysql
sqoop export \
--connect jdbc:mysql://$IP:3306/$MYSQLDB \
--username $USERNAME --password $PWD \
--table $MYSQLTABLE \
--export-dir $HDFSDIR \
--update-key $FIELD \
--update-mode allowinsert
上記のスクリプトの変数には、独自の値が割り当てられています
$ DBハイブデータベース
$ TABLEハイブテーブル名
$ HDFSDIRハイブクエリ結果データが保存されるhdfsディレクトリ
$ IPmysqlサーバーIP
$ MYSQLDBmysqlデータベース
$ MYSQLTABLE mysql表
$ FIELDは、フィールドの更新と挿入のエクスポートに応じて、複数の用途、接続が存在する可能性があることを指定します
この方法は2つのステップで実行されます。最初のステップは、ニーズに応じてパーティションフィールドが必要かどうかに基づくことができ、クエリにパーティションフィールドを追加する必要があり、2番目のステップは完全または増分のニーズに基づいています。書き出す