1.概要
sqoopは、Apacheツール「のHadoopとリレーショナルデータベースサーバ間の転送データ」ですです。
データをインポートする:MySQLの、OracleのインポートデータをHadoopのHDFS、HIVE、HBaseの他のデータ・ストレージ・システムに。データ・ストレージ・システムとリレーショナルデータベース用のHadoop互いに移行します。
データのエクスポート:MySQLなどのリレーショナルデータベースにHadoopのファイルシステムからデータをエクスポートします。、
2、作業のメカニズム
インポートまたはエクスポートのコマンドは、MapReduceのプログラムに変換します。
主のInputFormatとカスタマイズにOUTPUTFORMATで翻訳されたMapReduceで。
3、sqoop使用
データのインポート
RDBMSからHDFSに単一のテーブルをご紹介します。テーブルの各行は、HDFSのレコードであると考えられます。すべてのレコードがテキストファイルとしてテキストデータに保存されている(またはアブロ、バイナリデータファイルのシーケンスなど)されています
MySQLのテーブルガイドHDFS
コード
/** 将mysql的表导入 hdfs **/
bin/sqoop import \ --启动sqoop
--connect jdbc:mysql://hdp-04:3306/userdb \ --sqoop 的所在位置
--username root \
--password root \
--target-dir \ -- 目标的目录
/sqooptest \
--fields-terminated-by ',' \ --新生成的库字段以什么分区,指定分隔符
--table emp \ --导入的表明
--split-by id \ --如果maptask大于2,则表示根据什么字段来做切片
--m 2 --几个maptask
注:
あなたが--m 1を設定した場合、それは実行がmaptaskデータのインポートを開始することを意味します。
分割として1 --m設定されていない場合、デフォルトは4つのマップタスクの実行データのインポートを開始することで、あなたは列を指定する必要がありますマップタスクのタスクに応じて。
導入テーブルmysqlのハイブ
コード
bin/sqoop import \
--connect jdbc:mysql://hdp-04:3306/userdb \
--username root \
--password root \
--hive-import \ -- 指定导入hive
--fields-terminated-by ',' \
--table emp \
--split-by id \
--m 2
インポートテーブルデータのサブセット
私たちは、「どこで」句のサブセットインポートテーブルにSqoopインポートツールを使用することができます。これは、独自のデータベース・サーバに適切なSQLクエリを実行し、HDFSの宛先ディレクトリに結果を格納します。
どこ次のように句の構文は次のとおりです。
--where <condition>
サブセットをインポートするには、以下のコマンドは、テーブルのデータをemp_add。クエリのサブセットは、従業員のIDとアドレスを取得し、居住地の市は(秒-悪い)です。
bin/sqoop import \
--connect jdbc:mysql://hdp-node-01:3306/test \
--username root \
--password root \
--where "city ='sec-bad'" \子集条件声明
--target-dir /wherequery \
--table emp_add \
--m 1
増分データmysqlのテーブルには、新しいデータインポートHDFSです
表中の増分インポートのみインポートテクノロジー行が新しく追加されました。
sqoopサポート2つのデルタMySQLは、ハイブモードに導入しました
- 一つは、例えば、指定することによって、カラムをインクリメント、すなわち、追記です。
--incremental append --check-column num_id --last-value 0
- 他の種類は、次のようなタイムスタンプ、に基づいています。
--incremental lastmodified --check-column created --last-value '2018-02-01 11:0:00'
以上のデータより作成されたそれだけで「:0 00 2018年2月1日11」をインポートすることです。
追加モード
インクリメンタル導入を行うための「増分」、「チェック欄」、および「最後の値」オプションを追加する必要があります。
次のコマンド構文は、Sqoopインクリメンタルインポートオプションを使用しています:
--incremental <mode> --指定模式。,表示增量导入
--check-column <column name> --根据 哪一行盘点增量,指定递增的列
--last value <last check column value> --从哪一行开始
コード
bin/sqoop import \
--connect jdbc:mysql://hdp-04:3306/userdb \
--target-dir /sqooptest \
--username root \
--password root \
--table emp \
--m 1 \
--incremental append \ -- 表示增量导入
--check-column id \ --指定递增的列
--last-value 1205 --上次导入到多少行
Sqoop的数据导出
5.1、将数据从HDFS文件导出到RDBMS数据库
导出前,目标表必须存在于目标数据库中。
默认操作是将文件中的数据使用INSERT语句插入到表中
更新模式下,是生成UPDATE语句更新表数据
HDFSのエクスポートデータファイルのmysqlへ
bin/sqoop export \
--connect jdbc:mysql://hdp-04:3306/userdb \ --mysql的位置
--username root \
--password root \
--input-fields-terminated-by ',' \ --Hdfs的分隔符
--table emp \ --表名
--export-dir /sqooptest/ --导出的数据在哪
MySQLへのエクスポートテーブルデータ(HDFSファイル)のハイブ
bin/sqoop export \
--connect jdbc:mysql://hdp-04:3306/userdb \
--username root \
--password root \
--input-fields-terminated-by ',' \
--table t_from_hive \
--export-dir /user/hive/warehouse/t_a/