文章目錄
- 1.RDBMS到HDFS
-
- 1.1全部導入
- 1.2導入指定列 --columns
- 1.3導入指定行--where
- 1.4查詢導入
- 1.5增量導入資料
- 1.6導入檔案格式
- 2.RDBMS到Hive
- 3.RDBMS到Hbase
- 4.HIVE/HDFS到RDBMS
在Sqoop中,“導入”概念指:從非大資料叢集(RDBMS)向大資料叢集(HDFS,HIVE,HBASE)中傳輸資料,叫做:導入,即使用import關鍵字。
1.RDBMS到HDFS
- 确定Mysql服務開啟正常
- 在Mysql中建立一張表并插入一些資料
create database student;
create table student (
sid int auto_increment primary key,
sname varchar(10),
age int default 20,
gender varchar(10) default 'male'
);
- 導入資料
1.1全部導入
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--delete-target-dir \
--target-dir /student \
--fields-terminated-by '\t' \
--split-by sid \
--m 2
1.2導入指定列 --columns
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--columns sid,sname \
--delete-target-dir \
--target-dir /student \
--fields-terminated-by '\t' \
--split-by sid \
--m 2
提示:columns中如果涉及到多列,用逗号分隔,分隔時不要添加空格
1.3導入指定行–where
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--where 'sid between 10 and 20' \
--delete-target-dir \
--target-dir /student \
--fields-terminated-by '\t' \
--split-by sid \
--m 2
1.4查詢導入
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--query "select sid from student where \$CONDITIONS" \
--delete-target-dir \
--target-dir /student \
--fields-terminated-by '\t' \
--split-by sid \
--m 1
提示:
must contain \$CONDITIONS' in WHERE clause.
如果query後使用的是雙引号,則CONDITIONS前必須加轉移符,防止shell識别為自己的變量。
1.5增量導入資料
- incremental指定增量導入的模式
- append:追加資料記錄
- lastmodified:可追加更新的資料
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--table student \
--where "sid>10" \
--username root \
--password ok \
--incremental append \
--check-column sid \
--last-value 10 \
--target-dir /student \
--fields-terminated-by '\t' \
--split-by sid \
--m 1
1.6導入檔案格式
- –as-textfile 導入資料為text檔案(預設)
- –as-avrodatafile 導入資料為avro檔案
- –as-sequencefile 導入資料為sequence檔案
- –as-parquetfile 導入資料為parquet檔案
2.RDBMS到Hive
導入必要jar包
cp /opt/hive/lib/hive-common-1.1.0-cdh5.14.2.jar /opt/sqoop/lib
cp /opt/hive/lib/hive-exec-1.1.0-cdh5.14.2.jar /opt/sqoop/lib
–create-hive-table:自動建立表,生産中一般不使用
–hive-overwrite:覆寫原有表資料
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--m 1 \
--hive-import \
--fields-terminated-by '\t' \
--hive-overwrite \
--create-hive-table \
--hive-database student \
--hive-table student
提示:該過程分為兩步,第一步将資料導入到HDFS,第二步将導入到HDFS的資料遷移到Hive倉庫,第一步預設的臨時目錄是/user/root/表名
導入資料到Hive分區
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--m 1 \
--hive-import \
--fields-terminated-by '\t' \
--hive-overwrite \
--create-hive-table \
--hive-database student \
--hive-table student \
--hive-partition-key "date" \
--hive-partition-value '20200929'
--hive-partition-key "date" \
--hive-partition-value '20200929'
指定分區字段和值
3.RDBMS到Hbase
導入必要jar包
cp /opt/hbase/lib/* /opt/sqoop/lib/ -n
sqoop-import \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student \
--m 1 \
--hbase-create-table \
--hbase-table student \
--hbase-row-key sid \
--column-family info
提示:sqoop1.4.6隻支援HBase1.0.1之前的版本的自動建立HBase表的功能
4.HIVE/HDFS到RDBMS
sqoop-export \
--connect jdbc:mysql://hadoop100:3306/student \
--username root \
--password ok \
--table student2 \
--m 1 \
--export-dir /student \
--input-fields-terminated-by "\t"
提示:Mysql中如果表不存在,不會自動建立