sqoop基本操作

2021-10-08 02:28:38 字數 3481 閱讀 6856

匯入到hdfs

// \代表在shell視窗中換行

bin/sqoop import \

// 連線的url

--connect jdbc:mysql://hadoop102:3306/mydb \

// 使用者名稱

--username root \

// 密碼

--password 123456 \

// 要導哪個表的資料

--table staff \

// 將資料匯入到hdfs的哪個路徑

--target-dir /company \

// 如果目標目錄存在就刪除

--delete-target-dir \

// 匯入到hdfs上時,mysql中的字段使用\t作為分隔符

--fields-terminated-by "\t" \

// 設定幾個maptask來執行

// 是無法被匯入的!盡量選取主鍵列,數字列

--split-by id

// 只匯入id和name 列

--columns id,name \

// 只匯入復合過濾條件的行

--where 'id >= 10 and id <= 20' \

// 執行查詢的sql,講查詢的資料進行匯入,如果使用了--query,不加再用--table,--where,--columns

// 只要使用--query ,必須新增$conditons,這個條件會被sqoop自動替換為一些表示式

--query "sql"

案例:

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/mydb \

--username root \

--password 123456 \

--query "select * from t_emp where \$conditions and id >=2" \

--target-dir /t_emp \

--delete-target-dir \

--fields-terminated-by "\t" \

--split-by id

2.匯入到hive

sqoop匯入到hive,先講資料匯入到hdfs,再講hdfs的資料,load到hive表中!

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/company \

--username root \

--password 123456 \

--table staff \

//匯入到hive

--hive-import \

//匯入到hive表中字段的分隔符

--fields-terminated-by "\t" \

// 是否以insert overwrite方式覆蓋匯入資料

--hive-overwrite \

// 要匯入的hive表的名稱,會自動幫助我們建表。建議還是在hive中手動建表,需要注意和mysql表的資料型別匹配

--hive-table staff_hive

案例:

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/mydb \

--username root \

--password 123456 \

--table t_emp \

--hive-import \

--fields-terminated-by "\t" \

--hive-overwrite \

--hive-table t_emp

3.匯入到hbase

目前使用的sqoop1.4.6對應的是低版本的hbase,目前的1.3.0的hbase版本有點高!

在執行匯入時,sqoop是可以幫我們自動建表,在使用1.3.0hbase時,建表會失敗!

建議手動建表!

bin/sqoop import \

--connect jdbc:mysql://hadoop102:3306/mydb \

--username root \

--password 123456 \

--table t_emp \

//如果表不存在,hbase自動建表

--hbase-create-table \

// 匯入的表名

--hbase-table "t_emp" \

// mysql的哪一列作為rowkey

--hbase-row-key "id" \

//匯入的列族名

--column-family "info" \

--split-by id

一、sqoop匯出

bin/sqoop export \

--connect 'jdbc:mysql://hadoop102:3306/mydb?useunicode=true&characterencoding=utf-8' \

--username root \

--password 123456 \

--table t_emp2 \

--export-dir /t_emp \

--update-key id \

--update-mode allowinsert \

--input-fields-terminated-by "\t"

在mysql中,執行插入時,如果對於某些唯一列,出現了重複的資料,那麼會報錯duplicate key!

此時,對於重複的列,如果希望指定更新其他列的操作,那麼可以使用以下寫法:

insert into t_emp2 value(6,『jack』,30,3,100001) on duplicate key update

name=values(name),age=values(age),deptid=values(deptid),empno=values(empno);

在執行export匯出時,預設的匯出語句適用於向乙個新的空表導資料的場景!每一行要匯出的記錄,都會

轉換為insert語句執行查詢,此時如果說觸犯了表的某些約束,例如主鍵唯一約束,此時insert失敗,

job失敗!

如果要匯入的表已經有資料了,此時可以指定–update-key引數,通過此引數,可以講匯入的資料,使用

updata語句進行匯入,此時,只會更新重複的資料,不重複的資料是無法匯入的!

如果希望遇到重複的資料,就更新,不重複的資料就新增匯入,可以使用–update-key,結合

–update-mode(預設為updateonly)=allowinsert。

sql的命令編寫在指令碼中,引數名和引數值之間,需要換行!

sqoop基本操作

sqoop list databases connect jdbc mysql username root password 123456sqoop list tables connect jdbc mysql test username root password 123456sqoop impo...

Sqoop的基本操作

sqoop list databases connect jdbc mysql mini05 3306 username root password rootsqoop list tables connect jdbc mysql mini05 3306 up1 username root pass...

Sqoop基本使用

在 sqoop 中,匯入 概念指 從非大資料集群 rdbms 向大資料集群 hdfs,hive,hbase 中傳輸資料,叫做 匯入,即使用 import 關鍵字。1 確定 mysql 服務開啟正常 2 在 mysql 中新建一張表並插入一些資料 mysql uroot p123456 mysql c...