Scoop入門
5298 ワード
sqoopって何??リレーショナル・データベース(mysql、oracleなど)とhadoop(hdfs、hive、hbase)の間のデータ統合ツールです.データ統合の本質:sqoopコマンドをmapreduceのjobに変換し、データの転送を行います.
import:リレーショナル・データベースからhaodop export:hadoopからリレーショナル・データベース(hdfsからリレーショナル・データベース).リレーショナル・データベースhdfsリレーショナル・データベース->hive(sqoopでは逆)リレーショナル・データベース->hbase(sqoopでは逆)
利点:プラットフォーム間のデータを転送統合する;拡張性はまだしも、oozieなどと組み合わせることができます.欠点:コマンドが柔軟ではありません.機能はあまり豊富ではありません.sqoop 0.xエラーを報告しやすい.
sqoopのインストール:1、解凍構成環境変数2、mv./conf/sqoop-env-template.sh ./conf/sqoop-env.sh 3、プロファイル:vi./conf/sqoop-env.sh 4、mysqlのドライバパッケージをsqoopインストールディレクトリのlibパッケージの下cp/home/mysql-connector-java-5.18.8にインポートする.jar ./lib/5、起動テスト:sqoop version sqoop help
sqoopのコマンドは行のみで、改行する場合は
1、mysqlをリストするデータベース:sqoop list-databases--connect jdbc:mysql://hadoop01:3306/ -username root -password root ;
2、あるデータベースの下の表をリストする:sqoop list-tables--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root ;
3、mysqlのデータをhdfsにインポートする:-mはmapperの数を指定し、–fields-terminated-by't'は分割sqoop import--connect jdbcを指定する:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ --target-dir ‘/sq/im/01’ ;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ -m 1 –fields-terminated-by ‘\t’ --target-dir ‘/sq/im/03’ ;
4、mysqlのデータをインポートするhiveテーブル:
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –create-hive-table --hive-import --hive-table ‘qf1603.hfile1’ ;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –create-hive-table --hive-overwrite --hive-import –hive-table ‘qf1603.squser4’ --delete-target-dir –null-string ‘\N’ --null-non-string ‘\N’ ;
5、mysqlで指定した列をhdfsにエクスポートする:-column'uid,uname,size'sqoop import--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –columns ‘uid,uname,size’ --target-dir ‘/sq/im/06’ –null-string ‘\N’ --null-non-string ‘\N’ ;
6、mysqlで指定されたフィルタデータをhdfsにインポートする:–where''sqoop import--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –columns ‘uid,uname,size’ --where ‘uid%2=0’ –target-dir ‘/sq/im/07’ –null-string ‘\N’ --null-non-string ‘\N’ ;
7、複雑なクエリーを指定する:–query''Cannot specify--query and--table together.Query [select uid,uname,size from user ] must contain ‘$CONDITIONS’ in WHERE clause –where ‘uid%2=0’\
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –query ‘select uid,uname,size from user where $CONDITIONS’ –target-dir ‘/sq/im/10’ –null-string ‘\N’ --null-non-string ‘\N’ ;
8、–split-by##は通常-mと組み合わせてsqoop import--connect jdbcを使用します.mysql://hadoop01:3306/ywp -username root -password root -m 2 --table ‘user’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –columns “uid,uname” --split-by ‘uid’ –target-dir ‘/sq/im/11’ –null-string ‘\N’ --null-non-string ‘\N’ ;
9.hdfsのデータをmysqlにエクスポートする:CREATE TABLE
sqoop export --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 --table ‘user1’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –export-dir ‘/user/hive/warehouse/qf1603.db/user1’ –input-null-string ‘\N’ --input-null-non-string ‘\N’ ;
###???だめですsqoop export--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 --table ‘user1’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –hive-table ‘qf1603.user1’ --coumns ‘uid,uname’ –input-null-string ‘\N’ --input-null-non-string ‘\N’ ;
ディレクトリファイルのデータ列をエクスポートするにはmysqlテーブルの列と等しく、タイプができるだけ一致する必要があります.mysqlのテーブルとフィールドの符号化には注意が必要です.
–connect–username|username–password|password–tableリレーショ型データベースのテーブル–target-dir hdfsディレクトリ-m mapper個数を指定–fields-terminated-by–lines-terminated-by–null-string'N'文字列タイプの空値変換N–null-non-string'N'非文字列タイプの空値変換N–create-hive-hive-table–hive-import–hive-overwrite–hive-table-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-taete-target-dir hdfsにインポート先ディレクトリが存在する場合は削除–colums'-where'-query'-query代替です.-table、-columns、-where queryは指定する必要があります.-target-dir queryには$CONDITIONS query文が含まれている必要があります.注意二重引用符($CONDITIONS)で包むか、単一引用符($CONDITIONS)で包むか、queryを-tableと組み合わせて使用できません.-columns、-where無効query whereこの条件がある場合はandまたはorが必要です
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –query “select uid,uname,size from user where uid>3 and $CONDITIONS” –target-dir ‘/sq/im/31’ –null-string ‘\N’ --null-non-string ‘\N’ ;
-split-by–export-dirエクスポートhdfsディレクトリを指定–input-null-string–input-null-non-string
import:リレーショナル・データベースからhaodop export:hadoopからリレーショナル・データベース(hdfsからリレーショナル・データベース).リレーショナル・データベースhdfsリレーショナル・データベース->hive(sqoopでは逆)リレーショナル・データベース->hbase(sqoopでは逆)
利点:プラットフォーム間のデータを転送統合する;拡張性はまだしも、oozieなどと組み合わせることができます.欠点:コマンドが柔軟ではありません.機能はあまり豊富ではありません.sqoop 0.xエラーを報告しやすい.
sqoopのインストール:1、解凍構成環境変数2、mv./conf/sqoop-env-template.sh ./conf/sqoop-env.sh 3、プロファイル:vi./conf/sqoop-env.sh 4、mysqlのドライバパッケージをsqoopインストールディレクトリのlibパッケージの下cp/home/mysql-connector-java-5.18.8にインポートする.jar ./lib/5、起動テスト:sqoop version sqoop help
sqoopのコマンドは行のみで、改行する場合は
1、mysqlをリストするデータベース:sqoop list-databases--connect jdbc:mysql://hadoop01:3306/ -username root -password root ;
2、あるデータベースの下の表をリストする:sqoop list-tables--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root ;
3、mysqlのデータをhdfsにインポートする:-mはmapperの数を指定し、–fields-terminated-by't'は分割sqoop import--connect jdbcを指定する:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ --target-dir ‘/sq/im/01’ ;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ -m 1 –fields-terminated-by ‘\t’ --target-dir ‘/sq/im/03’ ;
4、mysqlのデータをインポートするhiveテーブル:
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘hfile’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –create-hive-table --hive-import --hive-table ‘qf1603.hfile1’ ;
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –create-hive-table --hive-overwrite --hive-import –hive-table ‘qf1603.squser4’ --delete-target-dir –null-string ‘\N’ --null-non-string ‘\N’ ;
5、mysqlで指定した列をhdfsにエクスポートする:-column'uid,uname,size'sqoop import--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –columns ‘uid,uname,size’ --target-dir ‘/sq/im/06’ –null-string ‘\N’ --null-non-string ‘\N’ ;
6、mysqlで指定されたフィルタデータをhdfsにインポートする:–where''sqoop import--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -table ‘user’ -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –columns ‘uid,uname,size’ --where ‘uid%2=0’ –target-dir ‘/sq/im/07’ –null-string ‘\N’ --null-non-string ‘\N’ ;
7、複雑なクエリーを指定する:–query''Cannot specify--query and--table together.Query [select uid,uname,size from user ] must contain ‘$CONDITIONS’ in WHERE clause –where ‘uid%2=0’\
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –query ‘select uid,uname,size from user where $CONDITIONS’ –target-dir ‘/sq/im/10’ –null-string ‘\N’ --null-non-string ‘\N’ ;
8、–split-by##は通常-mと組み合わせてsqoop import--connect jdbcを使用します.mysql://hadoop01:3306/ywp -username root -password root -m 2 --table ‘user’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –columns “uid,uname” --split-by ‘uid’ –target-dir ‘/sq/im/11’ –null-string ‘\N’ --null-non-string ‘\N’ ;
9.hdfsのデータをmysqlにエクスポートする:CREATE TABLE
user1
(uid
bigint(20)NOT NULL AUTO_INCREMENT, uname
varchar(45) DEFAULT NULL, PRIMARY KEY ( uid
) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; sqoop export --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 --table ‘user1’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –export-dir ‘/user/hive/warehouse/qf1603.db/user1’ –input-null-string ‘\N’ --input-null-non-string ‘\N’ ;
###???だめですsqoop export--connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 --table ‘user1’ –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ –hive-table ‘qf1603.user1’ --coumns ‘uid,uname’ –input-null-string ‘\N’ --input-null-non-string ‘\N’ ;
ディレクトリファイルのデータ列をエクスポートするにはmysqlテーブルの列と等しく、タイプができるだけ一致する必要があります.mysqlのテーブルとフィールドの符号化には注意が必要です.
–connect–username|username–password|password–tableリレーショ型データベースのテーブル–target-dir hdfsディレクトリ-m mapper個数を指定–fields-terminated-by–lines-terminated-by–null-string'N'文字列タイプの空値変換N–null-non-string'N'非文字列タイプの空値変換N–create-hive-hive-table–hive-import–hive-overwrite–hive-table-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-table hive-taete-target-dir hdfsにインポート先ディレクトリが存在する場合は削除–colums'-where'-query'-query代替です.-table、-columns、-where queryは指定する必要があります.-target-dir queryには$CONDITIONS query文が含まれている必要があります.注意二重引用符($CONDITIONS)で包むか、単一引用符($CONDITIONS)で包むか、queryを-tableと組み合わせて使用できません.-columns、-where無効query whereこの条件がある場合はandまたはorが必要です
sqoop import --connect jdbc:mysql://hadoop01:3306/ywp -username root -password root -m 1 –fields-terminated-by ‘\t’ --lines-terminated-by ‘’ --where ‘uid%2=0’ –query “select uid,uname,size from user where uid>3 and $CONDITIONS” –target-dir ‘/sq/im/31’ –null-string ‘\N’ --null-non-string ‘\N’ ;
-split-by–export-dirエクスポートhdfsディレクトリを指定–input-null-string–input-null-non-string