溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

sqoop的常用命令

發(fā)布時(shí)間:2020-07-29 14:41:17 來(lái)源:網(wǎng)絡(luò) 閱讀:826 作者:原生zzy 欄目:大數(shù)據(jù)

1. 基礎(chǔ)命令

列出MySQL中有那些數(shù)據(jù)庫(kù)

sqoop list-databases \  
--connect jdbc:mysql://hadoop01:3306/ \
--username hadoop \
--password root \

列出MySQL中的數(shù)據(jù)庫(kù)有哪些表

sqoop list-tables \  
--connect jdbc:mysql://hadoop01:3306/mysql \ 
--username hadoop \ 
--password root \

在hive中創(chuàng)建一個(gè)跟MySQL數(shù)據(jù)庫(kù)表中一樣的表

create-hive-table  
--connect jdbc:mysql://hadoop01:3306/test 
--username hadoop 
--password root 
--table book 
--hive-table test_hk

2.sqoop的數(shù)據(jù)導(dǎo)入

語(yǔ)法:sqoop import (generic-args) (import-args)
常用參數(shù)

-connect jdbc 連接地址 
--connection-manager 連接管理者 
--driver 驅(qū)動(dòng)類(lèi) 
--hadoop-mapred-home $HADOOP_MAPRED_HOME 
--help help 信息 
-P 從命令行輸入密碼 
-m  指定maptask的個(gè)數(shù),指定maptask的并行度
--target-dir  指定導(dǎo)出數(shù)據(jù)在hdfs上的存儲(chǔ)目錄
--fields-terminated-by  指定每條記錄中字段之間的分隔符
--where 指定查詢(xún)sql的where條件
--query  指定sql查詢(xún)
--columns 指定查詢(xún)的列  (不指定默認(rèn)導(dǎo)出所有的列)
--password 密碼
 --username 賬號(hào)
 --verbose 打印流程信息
 --connection-param-file 可選參數(shù)

MySQL ---> HDFS

#不指定分隔符和路徑
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \  #指定連接
--username hadoop \   #指定MySQL的用戶(hù)名
-password root \     #指定MySQL的密碼
--table book \        #指定導(dǎo)出的MySQL的表
-m 1             #啟動(dòng)一個(gè)maptask
#ps:如果沒(méi)有指定文件的存儲(chǔ)目錄,那么默認(rèn)的會(huì)保存在hdfs上的/user/用戶(hù)/book 目錄中,默認(rèn)的字段的分隔符逗號(hào)。

#指定導(dǎo)入路徑和分割符
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--target-dir /user/hadoop/book \
--fields-terminated-by '\t' \
-m 1

#導(dǎo)入where的結(jié)果
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--where "bid>2" \
--table book \
--target-dir /user/hadoop/book1 \
-m 1
ps:where后的條件,用雙引號(hào),如果條件的字段為string則里面使用單引號(hào)

#導(dǎo)入query結(jié)果數(shù)據(jù)
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--target-dir /user/hadoop/book3 \
--query 'select * from book where 1=1 and $CONDITIONS' \
--split-by bid \   #指定maptask切分的列,列的值.hashcode/maptask的個(gè)數(shù)
--fields-terminated-by '\t' \
-m 1
ps:
1.query外層使用單引號(hào),SQL 語(yǔ)句當(dāng)中的條件使用雙引號(hào),否則會(huì)報(bào)錯(cuò);
2.在使用query時(shí),必須有where子句,并且必須加入 and $CONDITIONS ,否則會(huì)報(bào)錯(cuò)
3.--query不能和--where、--columns一起使用的
4.--query sql語(yǔ)句,放入雙引號(hào)中需要加轉(zhuǎn)義

MySQL ---> hive
?Sqoop導(dǎo)入關(guān)系型數(shù)據(jù)到hive,的過(guò)程是先導(dǎo)入hdfs中,然后在load到hive。

#普通導(dǎo)入
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--hive-import \
-m 1
ps:導(dǎo)入數(shù)據(jù)到hive表中時(shí),默認(rèn)在default庫(kù)下,表名和MySQL導(dǎo)入的表名一樣。,默認(rèn)采用'\u0001'分隔。

#全量集
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--fields-terminated-by '\t' \   #列分割符
--lines-terminated-by '\n'  \   #行分隔符 ,默認(rèn)也是\n
--hive-import \
--hive-overwrite \  #覆蓋導(dǎo)入
--create-hive-table \ #創(chuàng)建表(默認(rèn)也會(huì)自動(dòng)創(chuàng)建表)
--hive-table test.book \  #hive的表名
--delete-target-dir  #刪除中間存放的臨時(shí)目錄
ps:表會(huì)自動(dòng)創(chuàng)建,但是庫(kù)不會(huì),所以在執(zhí)行語(yǔ)句前,一定要保證hive的數(shù)據(jù)庫(kù)存在,否則會(huì)把報(bào)錯(cuò)。

#增量導(dǎo)入,增量數(shù)據(jù)導(dǎo)入僅導(dǎo)入新添加的行
#它需要添加 'incremental' , 'check-column', 和 'last-value' 選項(xiàng)來(lái)執(zhí)行增量導(dǎo)入
sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--target-dir /user/hadoop/book \
--incremental append \ #指定是增量導(dǎo)入 
--check-column bid  \  #指定增量的列
--last-value 500 \  #指定上一次的結(jié)束的列的值,(是從>500開(kāi)始)一直到末尾
-m 1
ps:
1.--incremental有兩個(gè)值,append必須指定增量的列,指定使用--check-column(一般是MySQL的主鍵);lastmodified,最后一次修改表的時(shí)間
2.增量備份如果想要導(dǎo)入hive中,只能指定--target-dir,導(dǎo)入到存放表的目錄下,默認(rèn)的hive不支持增量導(dǎo)入(即不能添加--hive-import)

MySQL ---> hbase

#sqoop import \
--connect jdbc:mysql://hadoop02:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id

#字段解釋
--connect jdbc:mysql://hadoop04:3306/mysql 表示遠(yuǎn)程或者本地 Mysql 服務(wù)的 URI
--hbase-create-table 表示在 HBase 中建立表。
--hbase-table new_help_keyword 表示在 HBase 中建立表 new_help_keyword。
--hbase-row-key help_keyword_id 表示hbase表的rowkey是mysql表的help_keyword_id
字段。
--column-family person 表示在表 new_help_keyword 中建立列族 person。
--username 'root' 表示使用用戶(hù) root 連接 mysql。
--password 'root' 連接 mysql 的用戶(hù)密碼
--table help_keyword 表示導(dǎo)出 mysql 數(shù)據(jù)庫(kù)的 help_keyword 表。

3.sqoop的數(shù)據(jù)導(dǎo)出

語(yǔ)法:sqoop export (generic-args) (export-args)
常用參數(shù)

--direct 快速導(dǎo)入
--export-dir HDFS 導(dǎo)出數(shù)據(jù)的目錄 
-m,--num-mappers 都少個(gè) map 線(xiàn)程 
--table 導(dǎo)出哪個(gè)表 
--call 存儲(chǔ)過(guò)程
--update-key 通過(guò)哪個(gè)字段來(lái)判斷更新 
--update-mode 插入模式,默認(rèn)是只更新,可以設(shè)置為 allowinsert.
--input-null-string 字符類(lèi)型 null 處理 
--input-null-non-string 非字符類(lèi)型 null 處理
--staging-table 臨時(shí)表
--clear-staging-table 清空臨時(shí)表
--batch 批量模式

HDFS ---> MySQL

sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--export-dir /sqoopdata \
--fields-terminated-by ','

hive----> MySQL

sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username hadoop \
--password root \
--table book \
--export-dir /user/hive/warehouse/uv/dt=2011-08-03 \
--input-fileds-terminated-by '\t'

hbase---->MySQL
默認(rèn)的沒(méi)有命令直接將hbase中的數(shù)據(jù)導(dǎo)入到MySQL,因?yàn)樵趆base中的表數(shù)據(jù)量通常比較大,如果一次性導(dǎo)入到MySQL,可能導(dǎo)致MySQL直接崩潰。
但是可以用別的辦法進(jìn)行導(dǎo)入:

  1. 將 Hbase 數(shù)據(jù),扁平化成 HDFS 文件,然后再由 sqoop 導(dǎo)入
  2. 將 Hbase 數(shù)據(jù)導(dǎo)入 Hive 表中,然后再導(dǎo)入 mysql
  3. 直接使用 Hbase 的 Java API 讀取表數(shù)據(jù),直接向 mysql 導(dǎo)入,不需要使用 sqoop
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI