Sqoop資料傳輸

2021-10-10 15:47:45 字數 4773 閱讀 5122

apache sqoop(sql-to-hadoop)專案旨在協助rdbms與hadoop之間進行高效的大資料交流。使用者可以通過 sqoop 輕鬆地把關係型資料庫的資料匯入到 hadoop 及其相關的系統 (如hbase和hive)中;同時也可以把資料從 hadoop 系統裡抽取並匯出到關係型資料庫裡。

sqoop是乙個在結構化資料和hadoop之間進行批量資料遷移的工具,結構化資料可以是mysql、oracle等rdbms。sqoop底層用mapreduce程式實現抽取、轉換、載入,mapreduce天生的特性保證了並行化和高容錯率。

sqoop import \

--connect jdbc:mysql:

//single:

3306

/mysqltest \

--username root \

--password kb10 \

--query "select sid,student_id,course_id,score from score where \$conditions" \

--target-dir /kb10/test1119 \

--split-by sid \

-m 2 \

--check-column sid \

--last-value 0

* 首先表明要連線的資料庫型別,客戶機的ip位址或者主機名,資料庫名稱,使用者名稱和密碼。

* 可以通過命令 table 來指定匯入某一張表,也可以通過查詢命令 query 來獲取指定字段內容。

* \$conditions 通過 check-column 和 last-value 結合實現增量匯入資料的條件。

* 首次匯入為全量匯入,last-value 為 0。增量匯入資料時 last-value 為當前已匯入資料行數。

* target-dir 指定資料匯入目錄。

sqoop import \

--connect jdbc:mysql:

//single:

3306

/kb10 \

--username root \

--password kb10 \

--table student \

--hive-import \

--hive-table test1118 \

--fields-terminated-by '|' \

--hive-overwrite \

--delete-target-dir

* delete-target-dir 表示如果目錄已存在則刪除

* 從關係型資料庫向hive匯入資料,無需指定路徑,會自動儲存到之前手動建立的目錄下

/opt/software/hadoop/hive110/warehouse

sqoop import \

--connect jdbc:mysql:

//single:

3306

/kb10 \

--username root \

--password kb10 \

--table student \

--hbase-table kb10:mysql_stu \

--column-family score \

--hbase-create-table \

--hbase-row-key stuno \

--hbase-bulkload

* hbase-table 指定命名空間和表名

* column-family 指定列簇名

* hbase-row-key 指定行鍵(排序字段),必須是**中存在的欄位名

* hbase-bulkload 不用指定輸出的路徑,自動資料轉移

* 若表不存在,可以通過 hbase-create-table 命令自動建立

* 也可以在shell視窗下手動建立,需要指定命名空間、表名、列簇名

//建立命名空間

create_namespace school

//hbase手動建表,school為命名空間,mysql_school為表名,後面三個為列簇名

create 'school:mysql_school'

,'basicscore'

,'classinfo'

,'scoreinfo'

//使用columns從資料庫的表中刪選部分字段匯入hbase

sqoop import \

--connect jdbc:mysql:

//single:

3306

/school \

--username root \

--password kb10 \

--table stu_info \

--columns id,stuname,stugender,province,city,district \

--hbase-table school:mysql_school \

--column-family basicinfo \

--hbase-row-key id \

--hbase-bulkload

//如果使用query語句則無需--hbase-bulkload

//查詢語句後面必須有where $conditions

sqoop import \

--connect jdbc:mysql:

//single:

3306

/school \

--username root \

--password kb10 \

--query 'select id,proname,classname,opendate from stu_info where $conditions' \

--hbase-table school:mysql_school \

--column-family classinfo \

--hbase-row-key id \

* hbase 內容為 byte[ ],shell 視窗下中文無法正常顯示,如下圖

create table hive_shop

( id int

, name varchar(50

),mobile varchar(20

),address varchar

(100),

vol2020 int

);

sqoop export \

--connect jdbc:mysql:

//single:

3306

/kb10 \

--username root \

--password kb10 \

--table hive_shop \

--columns id,name,mobile,address,vol2020 \

--fields-terminated-by ',' \

--export-dir '/kb10/shop1118/000000_0'

* fields-terminated-by 表示原表字段分隔符

* export-dir 表示匯出檔案路徑,hdfs和hive的檔案儲存路徑有所不同

//插入資料

insert overwrite directory '/kb10/shop1118/'

row format delimited

fields terminated by ','

stored as textfile

select

shopid,

shopname,

contact.mobile mobile,

concat_ws(''

,address) address,

volumn[

'2020'

] vol2020

from shop;

//匯出資料

export table table_name [partition (part_column=

"value"[,

...]

)]to 'export_target_path'

[for

replication

('event_id'

)]

//上傳資料

load data [local] inpath 'hdfs_path' into table [partition (part_column=

"value"[,

...]

)];//匯入資料

import [

[external] table new_table [partition (part_column=

"value"[,

...]

)]]from 'source_path'

[location 'import_target_path'

]

C SFTP資料傳輸

我們有些客戶公司的資料比較重要,為了安全集團公司內部都使用的是區域網,但是有時候又不得不予外界網際網路做資料互動,所以有些不重要的系統是放在外界網際網路的,這樣以來內部系統和外部系統的資料互動就成為了問題,這樣以來就使用到了sftp伺服器來作為資料傳輸的中介。下面不說了,直接上c 此處使用了第三方動...

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

flex wcf 資料傳輸

最近跟哲子做個專案,本來可以用asp.net輕鬆搞定,但是鑑於大家都比較想試用下學習已久的技術,所以便出現了flex與wcf entity這樣得前後臺組合。專案開始之初,著實為兩者之間的互動頭疼一番,在經過大量資料得獲取後,終於解決,以下寫出簡要的注意事項,由於wcf 我還是個徹頭徹尾的門外漢,資料...