複数のHDFSストレージフォーマットでのSqoop全量およびインクリメンタルインポート
6224 ワード
背景環境の紹介 CentOS 6.7 MySQL 5.7 Coudera 5.13.0
1.データの準備(MySQL)
1.mysqlでsqp_を作成するtestテーブル
2.さまざまなタイプのデータを挿入します.文字列には特殊な文字が含まれています.
2.ORCストレージでのSqoopインポート
ORC(Optimized Row Columnar、最適化された行列記憶)は、データの読み書き速度が速く、サポートされるデータ型が広く、ZLIB、SNAPPY圧縮をサポートしています.
2.1全量
ターゲットテーブルorcフォーマットストレージを作成し、SNAPPY方式で圧縮するターゲットテーブル
sqoopインポート1.インポート前にターゲットテーブルを空にする
2.sqoopインポートの実行
**関連パラメータの説明**–num-mappersまたは-mはN個のmapを起動してデータを並列にインポートします.デフォルトは4個です.数値をクラスタのノード数より高く設定しないほうがいいです.テスト環境リソースは1つの しか指定しません.–split-by mapタスクの分割に使用するフィールドを指定し、指定した一意性の高いフィールドを使用することを推奨します.このパラメータを指定しないと、ソース・テーブルのプライマリ・キー・フィールドが自動的に検索され、ソース・テーブルにプライマリ・キー・フィールドがないとエラーが表示されます.-num-mappersが1に指定されている場合、mapタスクの分割は行われず、このオプションは無効です. –hcatalog-databaseターゲットライブラリ名 –hcatalog-tableターゲットテーブル名 –hcatalog-storage-stanzaストレージフォーマットを指定します.デフォルト:stored as orcfile**注意:hcatalogモード–hive-overwriteは効果がないので、truncateデータプログラム** を追加します.
2.2増分
インクリメンタルパーティション表の作成
1.データをインポートする前にターゲットパーティションデータを空にする
2.sqoopインポートを実行し、queryでインクリメンタルフィルタ条件をフィルタする
3.次の日のデータを実行し、–whereでインクリメンタルフィルタ条件を指定します.
3.TextFileでのSqoopインポート
3.1全量
TextFileはhiveのデフォルトのフォーマットで、最初にインポートしたときにhiveがテーブルを作成しなかった場合、リレーショナル・データベースのテーブル構造に基づいて自動的にhiveテーブルが生成されます.
**関連パラメータの説明**-null-string文字タイプnull値のフォーマットです.指定されていない場合、文字列nullが使用されます.Nはhiveによってnull値 と識別できます.–null-non-string非文字タイプnullのフォーマット.指定されていない場合、文字列nullは で使用されます.–hive-drop-import-delims hiveにデータをインポートすると、rと01のような文字 が削除されます.–hive-delims-replacementデータの、r,and01などの文字 をカスタム文字列で置き換えます.–directダイレクトインポートモード.リレーショナル・データベースに付属するインポート・エクスポート・ツールを使用します.TextFileでは効率を向上させることができますが、-null-string、-null-non-string、-hive-drop-import-delimsなどのオプションと競合しています.
注意-hive-drop-import-delimsオプションは、hiveにデータをインポートすると、rおよび01のようなデフォルトの分割記号のみが削除されるため、ターゲットテーブルでは–fields-terminated-byおよび–lines-terminated-byパラメータを指定せずにデフォルトの分割方法を使用することが望ましい
3.2増分
4.ParquetでのSqoopインポート
Parquetは劣勢なストレージ実装です.
4.1全量
4.2増分
5.hbaseでのSqoopインポート
5.1全量
5.2増分
1.データの準備(MySQL)
1.mysqlでsqp_を作成するtestテーブル
drop table if exists sqp_test;
create table sqp_test(
id bigint PRIMARY KEY AUTO_INCREMENT COMMENT ' ID',
c1 varchar(64),
c2 text,
c3 int,
c4 bigint,
c5 double,
c6 decimal(22,6),
c7 datetime
);
2.さまざまなタイプのデータを挿入します.文字列には特殊な文字が含まれています.
truncate table sqp_test;
INSERT INTO sqp_test
(c1, c2, c3, c4, c5, c6, c7)
VALUES(' ', ' ', 100, 100, 100.2, 100.2, '2019-01-01 12:10:10');
INSERT INTO sqp_test
(c1, c2, c3, c4, c5, c6, c7)
VALUES('null ', null, null, null, null, null, '2019-01-01 23:59:59');
INSERT INTO sqp_test
(c1, c2, c3, c4, c5, c6, c7)
VALUES(' ', '', null, null, null, null, null);
INSERT INTO sqp_test
(c1, c2, c3, c4, c5, c6, c7)
VALUES(' ', '\t|\\|\'|
|,|\"|@|',
null, null, null, null, '2019-01-02 12:12:12.2345');
INSERT INTO sqp_test
(c1, c2, c3, c4, c5, c6, c7)
VALUES('end', 'ABCDEFG,ABCD',
PI(), PI(), PI(), PI(), '2019-01-02 12:12:12.2345');
2.ORCストレージでのSqoopインポート
ORC(Optimized Row Columnar、最適化された行列記憶)は、データの読み書き速度が速く、サポートされるデータ型が広く、ZLIB、SNAPPY圧縮をサポートしています.
2.1全量
ターゲットテーブルorcフォーマットストレージを作成し、SNAPPY方式で圧縮するターゲットテーブル
drop table if exists default.sqp_test_orc;
create table default.sqp_test_orc(
id bigint COMMENT ' ID',
c1 string,
c2 string,
c3 int,
c4 bigint,
c5 double,
c6 decimal(22,6),
c7 string
) stored as orc tblproperties ("orc.compress"="SNAPPY");
sqoopインポート1.インポート前にターゲットテーブルを空にする
hive -e "truncate table default.sqp_test_orc"
2.sqoopインポートの実行
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--table sqp_test \
--split-by id \
--num-mappers 1 \
--hcatalog-database default \
--hcatalog-table sqp_test_orc \
--hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")'
**関連パラメータの説明**
2.2増分
インクリメンタルパーティション表の作成
drop table if exists default.sqp_test_orc_add;
create table default.sqp_test_orc_add(
id bigint COMMENT ' ID',
c1 string,
c2 string,
c3 int,
c4 bigint,
c5 double,
c6 decimal(22,6),
c7 string
)
COMMENT 'sqoop '
partitioned by (etl_date string COMMENT ' ')
stored as orc tblproperties ("orc.compress"="NONE");
1.データをインポートする前にターゲットパーティションデータを空にする
hive -e "alter table default.sqp_test_orc_add DROP IF EXISTS partition(etl_date='20190101')"
2.sqoopインポートを実行し、queryでインクリメンタルフィルタ条件をフィルタする
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--query "select * from sqp_test where c7>='2019-01-01' and c7
3.次の日のデータを実行し、–whereでインクリメンタルフィルタ条件を指定します.
hive -e "alter table default.sqp_test_orc_add DROP IF EXISTS partition(etl_date='20190102')"
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--table sqp_test \
--where "c7>='2019-01-02' and c7
3.TextFileでのSqoopインポート
3.1全量
TextFileはhiveのデフォルトのフォーマットで、最初にインポートしたときにhiveがテーブルを作成しなかった場合、リレーショナル・データベースのテーブル構造に基づいて自動的にhiveテーブルが生成されます.
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--table sqp_test \
--null-string '\\N' \
--null-non-string '\\N' \
--hive-drop-import-delims \
--split-by id \
--num-mappers 1 \
--hive-import \
--hive-overwrite \
--hive-database default \
--hive-table sqp_test_txt
**関連パラメータの説明**
注意-hive-drop-import-delimsオプションは、hiveにデータをインポートすると、rおよび01のようなデフォルトの分割記号のみが削除されるため、ターゲットテーブルでは–fields-terminated-byおよび–lines-terminated-byパラメータを指定せずにデフォルトの分割方法を使用することが望ましい
3.2増分
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--table sqp_test \
--where "c7>='2019-01-01' and c7='2019-01-02' and c7
4.ParquetでのSqoopインポート
Parquetは劣勢なストレージ実装です.
4.1全量
sqoop import \
--connect "jdbc:mysql://quickstart.cloudera:3306/devdb?useUnicode=true&characterEncoding=UTF-8" \
--username devuser \
--password devuser \
--table sqp_test \
--split-by id \
--num-mappers 1 \
--as-parquetfile \
--hive-import \
--hive-overwrite \
--hive-database default \
--hive-table sqp_test_prq
4.2増分
5.hbaseでのSqoopインポート
5.1全量
5.2増分