1. 程式人生 > >sqoop學習2(資料匯入與匯出命令)

sqoop學習2(資料匯入與匯出命令)

最近學習了下這個導資料的工具,但是在export命令這裡卡住了,暫時排不了錯誤。先記錄學習的這一點吧

sqoop是什麼

sqoop(sql-on-hadoop):是用來實現結構型資料(如關係型資料庫)和hadoop之間進行資料遷移的工具。它充分利用了mapreduce的並行特點以及批處理的方式加快資料的傳輸,同時也藉助mapreduce實現了容錯。

sqoop架構

1)sqoop目前有兩個版本sqoop1(1.4.x)和sqoop2(1.99.x),這裡安裝的是sqoop1版本

2)sqoop1是由client端直接接入hadoop,任務通過解析生成對應的mapreduce執行

3)sqoop1架構圖


4)匯入(import)與匯出(export)
匯入:往hdfs上導資料
匯出:從hdfs上匯出去

匯入流程:
1)讀取要匯入資料的表結構
2)讀取引數,設定好job
3)呼叫mapreduce執行任務
----a 首先要對資料進行切分
----b 寫入範圍,以便讀取
----c 讀取範圍引數(第二步中設定的引數)
----d 建立RecordReader並從資料庫中讀取資料
----e 建立map
----f 執行map

匯出流程:匯入過程的逆向過程

sqoop常用命令

命令初步認識

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test'
註釋: sqoop:表示sqoop命令 import:表示匯入 --connect jdbc:mysql://spark1:3306 :表示告訴jdbc,連線mysql的url。這個是在hive的hive-site.xml中設定的 wujiadong:表示mysql資料庫中的一個數據庫 --username root: 連線mysql的使用者名稱 --password xxx: 連線mysql的密碼,我這裡省略了 --table stud_info: 從mysql要匯出資料的表名稱 --fields-terminated-by '\t': 指定輸出檔案中的行的欄位分隔符,我這沒有寫 -m 1
表示複製過程使用1個map作業,如果不寫的話預設是4個map 注:因我安裝mysql時沒有設定密碼,所以沒有加密碼項

我導資料時候有時遇到匯入不成功,報10020埠連線不上,試試在namenode上執行命令:
mr-jobhistory-daemon.sh start historyserver 之後再去導資料

1)version:顯示sqoop版本

檢視安裝的sqoop版本
[[email protected] ~]# sqoop version

2)help:檢視sqoop幫助資訊

[[email protected] ~]# sqoop help

3)list-databases:打印出關係資料庫所有的資料庫名

顯示出mysql資料庫下所有資料庫名
[[email protected] sqoop]# sqoop list-databases --connect jdbc:mysql://spark1:3306 --username root


資料庫連線引數

–connect <jdbc-uri> :Jdbc連線url,示例如--connect jdbc:mysql://spark1:3306

–connection-manager :指定要使用的連線管理類

–driver :指定jdbc要使用的驅動類

-P :從控制檯讀取輸入的密碼,注意P是大寫的

–password :Jdbc url中的資料庫連線密碼

–username :Jdbc url中的資料庫連線使用者名稱

–verbose :在控制檯打印出詳細執行資訊

–connection-param-file :一個記錄著資料庫連線引數的檔案

4)list-tables:打印出關係資料庫某一資料庫的所有表名

顯示mysql資料庫中wujiadong這個資料庫中所有的表名
[[email protected] ~]# sqoop list-tables --connect jdbc:mysql://spark1:3306/wujiadong -username root


5)import:將資料庫表的資料匯入到hive中,如果在hive中沒有對應的表,則自動生成與資料庫表名相同的表

–append : 資料追加到HDFS上一個已存在的資料集上

–as-avrodatafile : 將資料匯入到一個Avro資料檔案中

–as-sequencefile : 將資料匯入到一個sequence檔案中

–as-textfile : 將資料匯入到一個普通文字檔案中,生成該文字檔案後,可以在hive中通過sql語句查詢出結果

–boundary-query : 邊界查詢,也就是在匯入前先通過SQL查詢得到一個結果集,然後匯入的資料就是該結果集內的資料,格式如:–boundary-query ‘select id,creationdate from person where id = 3’,表示匯入的資料為id=3的記錄.注意查詢的欄位中不能有資料型別為字串的欄位,否則會報錯:java.sql.SQLException: Invalid value forcolumns : 指定要匯入的欄位值,格式如:–columns id,username

–query,-e<statement> : 從查詢結果中匯入資料,該引數使用時必須指定–target-dir、–hive-table,在查詢語句中一定要有where條件且在where條件中需要包含$CONDITIONS,示例:–queryselect * from person where $CONDITIONS ‘ –target-dir /user/hive/warehouse/person –hive-table person

–split-by<column-name> :表的列名,用來切分工作單元,一般後面跟主鍵IDtable <table-name> :關係資料庫表名,資料從該表中獲取

–target-dir <dir> :指定hdfs路徑


增量匯入

check-column (col):用來作為判斷的列名,如id
–incremental (mode):append:追加,比如對大於last-value指定的值之後的記錄進行追加匯入。lastmodified:最後的修改時間,追加last-value指定的日期之後的記錄
–last-value (value):指定自從上次匯入後列的最大值(大於該指定的值),也可以自己設定某一值

資料從mysql匯入到hdfs

例項1:將mysql中wujiadong資料庫中的表stud_info表中的資料匯入到hdfs(--target-dir)

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test'   如果這個目錄存在會報錯。
[[email protected] ~]# hadoop fs -lsr /user/sqoop_test 匯入成功後檢視
[[email protected] ~]# hadoop fs -cat /user/sqoop_test/part* 可以直接檢視匯入的資料。這裡出現了中文亂碼暫時不管,後面解決

如果執行之後不成功可以試試在命令後加上-m 1 只啟動一個map



例項2:在1的基礎上繼續往這個檔案中匯入資料(append)

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --append --target-dir 'hdfs://spark1:9000/user/sqoop_test'  可以看到比原來的多瞭解一個檔案


例項3:在1基礎上刪除已存在檔案並匯入資料(--delete-target-dir)

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test'   --delete-target-dir

例項4:增量匯入資料到hdfs

例項5:指定條件匯入(注意不能含中文)

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test' -m 1 --where "stud_gend='M'" --append 

模糊查詢
[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test' -m 1 --where "stud_code like '%201510%'" --append 


例項6:啟用壓縮

[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test' -m 1 --where "stud_gend='M'" --append -z
預設Gzip壓縮;其它壓縮方式用--compression-codec xxx

使用text命令檢視壓縮檔案
[[email protected] ~]# hadoop fs -text   /user/sqoop_test/part-m-00001.gz



例項7:匯入空值(NULL)處理

字串型別
[[email protected] ~]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test' -m 1 --where "stud_gend='M'" --append --null-string "**"
非字串型別
[[email protected] hive_test]# sqoop import --connect jdbc:mysql://spark1:3306/wujiadong --username root --table stud_info --target-dir 'hdfs://spark1:9000/user/sqoop_test' -m 1 --where "stud_gend='M'" --append --null-string "**" --null-non-string "##"

例項8:sql匯入

資料從mysql匯入到hive

--hive-home <dir>:直接指定hive安裝目錄
--hive-import:使用預設分隔符匯入hive
--hive-overwrite:覆蓋掉在hive表中已經存在的資料
--create-hive-table:生成與關係資料庫表的表結構對應的HIVE表。如果表不存在,則建立,如果存在,報錯
--hive-table <table-name>:匯入到hive指定的表,可以建立新表
--hive-drop-import-delims:入資料到hive時,刪除字串欄位中的 \n, \r, and \01 
--hive-delims-replacement:用自定義的字串替換掉資料中的\n, \r, and \01等字元


--hive-partition-key:建立分割槽,後面直接跟分割槽名即可,建立完畢後,通過describe 表名可以看到分割槽名,預設為string型
--hive-partition-value <v>:該值是在匯入資料到hive中時,與–hive-partition-key設定的key對應的value值
--map-column-hive <map>:生成hive表時,可以更改生成欄位的資料型別,格式如:–map-column-hive LAST_ACCESS_TIME=string
--fields-terminated-by:指定分隔符(hive預設的分隔符是/u0001)

例項1 :將mysql資料庫wujiadong1中的stud_info表中資料匯入到hive總的stud_info1表中(該表未先建立)

[[email protected] ~]# sqoop import --connect jdbc:mysql://192.168.220.144:3306/wujiadong1 --username root -table stud_info --hive-import -m 1 --hive-table stud_info1
沒有指定匯入到哪個資料庫,預設匯入到default資料庫中

例項2:將mysql資料庫wujiadong1中的stud_info表中資料匯入到hive的sqoop_test資料庫的stud_info表中(該表未先建立)

在hive中建立資料庫sqoop_test
hive> create database sqoop_test;
使用sqoop建立表並匯入表
[[email protected] ~]# sqoop import --connect jdbc:mysql://192.168.220.144:3306/wujiadong1 --username root --table stud_info --hive-import -m 1 --hive-table sqoop_test.stud_info  #指定匯入到那個資料庫中
進入hive檢視是否匯入成功
hive> use sqoop_test;
hive> show tables;
hive> desc stud_info;
hive> select * from stud_info;


例項3:在2的基礎上用--hive-overwrite覆蓋匯入

[[email protected] ~]# sqoop import --connect jdbc:mysql://192.168.220.144:3306/wujiadong1 --username root --table stud_info --hive-import -m 1 --hive-table sqoop_test.stud_info --hive-overwrite
只覆蓋資料,不覆蓋表結構

例項4:使用非預設分隔符“,”分隔hive表字段

[[email protected] ~]# sqoop import --connect jdbc:mysql://192.168.220.144:3306/wujiadong1 --username root --table stud_info --hive-import -m 1 --hive-table sqoop_test.stud_info1 --fields-terminated-by "," 
hive> show create table stud_info1; 檢視詳細資訊


例項5:增量匯入

資料從mysql匯入到hbase(學完hbase再學)

檔案輸出引數

–enclosed-by <char> : 給欄位值前後加上指定的字元,比如雙引號,示例:–enclosed-by ‘\”‘,顯示例子:”3″,”jimsss”

–fields-terminated-by <char> : 設定每個欄位是以什麼符號作為結束的,預設是逗號,也可以改為其它符號

–lines-terminated-by <char> : 設定每條記錄行之間的分隔符,預設是換行,但也可以設定自己所需要的字串

–delete-target-dir : 每次執行匯入命令前,若有就先刪除target-dir指定的目錄

6)export:從hdfs中匯出資料到關係資料庫中

--validate <class-name>:啟用資料副本驗證功能,僅支援單表拷貝,可以指定驗證使用的實現類

--validation-threshold <class-name>:指定驗證門限所使用的類

--direct:使用直接匯出模式(優化速度)

--export-dir <dir>:匯出過程中HDFS源路徑

--m,--num-mappers <n>:使用n個map任務並行匯出

--table <table-name>:匯出的目的表名稱

--update-key <col-name>:更新參考的列名稱,多個列名使用逗號分隔

--input-null-string <null-string>:使用指定字串,替換字串型別值為null的列

--input-null-non-string <null-string>:使用指定字串,替換非字串型別值為null的列

--staging-table <staging-table-name>:在資料匯出到資料庫之前,資料臨時存放的表名稱

相關推薦

sqoop學習2資料匯入匯出命令

最近學習了下這個導資料的工具,但是在export命令這裡卡住了,暫時排不了錯誤。先記錄學習的這一點吧sqoop是什麼sqoop(sql-on-hadoop):是用來實現結構型資料(如關係型資料庫)和hadoop之間進行資料遷移的工具。它充分利用了mapreduce的並行特點以

Hive之DML資料匯入資料匯出操作

總結: 資料的匯入 1)hdfs或者本地檔案匯入使用  load 或者 建立資料庫的同時指定檔案位置 location 2)從已有hive資料庫中表匯入相應的資料    使用       as   

Mysql的資料匯入匯出

2018年11月14日 18:38:32 wyh1128 閱讀數:6 標籤: mysql

oracle資料匯入匯出

資料的匯入匯出 說明: 針對的物件:  資料的匯入匯出牽涉到的角色主要是工程實施人員。 需解決的問題:把所需要的資料從一個數據庫中匯入到另外一個數據庫中。 1    工具方式 1.  使用PLSQL Developer工具主要為了方便工程實施人員操作資料庫,如匯入、匯出資

Oracle資料庫的備份 資料匯入匯出 Oracle

                                   資料庫的備份 1:資料庫的匯出:1.1需要備份的目錄1.2進入備份目錄1.3輸入exp指令 使用者名稱:scott  密碼 E:\>cd backup  目錄 E:\backup>exp  匯

R語言的資料匯入匯出

福爾·摩斯曾說過:“資料,資料,沒有資料的推理是罪惡!”不過比起有意思的統計分析,資料的匯入與匯出顯得十分的無趣,但是不得不說統計分析的資料匯入與匯出是個讓人沮喪的任務,而且耗時巨大。今天分享的是R中資料的輸出與一些特定格式的資料讀入。一、資料的輸出 R中提供了write.

《機器學習實戰》第14章學習筆記資料約簡工具---SVD

一、SVD基本原理 提取這些資訊的方法稱為奇異值分解(Singular Value Decomposition, SVD )。 在很多情況下,資料中的一小段攜帶了資料集中的大部分資訊,其他資訊則要麼是噪聲,要麼就是毫不相關的資訊。線上性代數中還有很多矩陣分解技術。矩陣分解可以將原始矩陣表示成新的

資料探勘:資料資料物件屬性型別

一、概述 現實中的資料一般有噪聲、數量龐大並且可能來自異種資料來源。 資料集由資料物件組成,一個數據物件代表一個實體。 資料物件:又稱樣本、例項、資料點或物件。 資料物件以資料元組的形式存放在資料庫中,資料庫的行對應於資料物件,列對應於屬性。 屬性是一個數據欄位,表示資料物件的特徵,在

R語言點估計學習筆記EM演算法Bootstrap法

一、EM演算法       EM演算法是一種在觀測到資料後,用迭代法估計未知引數的方法。可以證明EM演算法得到的序列是穩定單調遞增的。這種演算法對於截尾資料或引數中有一些我們不感興趣的引數時特別有效。    EM演算法的步驟為:        E-step(求期望):在給定

JAVA學習練習扎金花21點

目前轉行學習JAVA。記得N年學過C++,接觸JAVA後感覺上手比較容易。學習半月熟練使用迴圈、判斷,自行看書瞭解JAVA類的使用,並嘗試用類完成程式設計。大概完成了老師題目,類和方法用得很混亂,但是總歸做出來了! 設計思路: 一、撲克牌類的建立 最初想法:將牌組建立為 i

計算機組成原理複習2資料的表示和運算

數制與編碼 1.進位計數法 基數是每個數位所用到的不同數碼的個數 2.不同進位制數之間的相互轉換 2進轉換8進位制:湊足3位,高位補0 2進位制轉換16進位制:湊足4位,高位補0 n任意轉化為十進位制:各個位上的數乘以n的(位數-1)次冪 除基取餘法+乘積取整法

利用XShell上傳、下載文件使用szrz命令,超實用!

rec pre xshell 命令 方法 font 所有 shel 不包含 借助XShell,使用linux命令sz可以很方便的將服務器上的文件下載到本地,使用rz命令則是把本地文件上傳到服務器。 其中,對於sz和rz的理解與記憶我用了如下的方法(很多時候容

Hadoop學習記錄二、hdfs shell命令

在/usr/local/hadoop-2.9.2/bin目錄下執行命令 1.檢視根目錄: ./hdfs dfs -ls / 2.檔案上傳:上傳到根目錄 ./hdfs dfs -put /tmp/test.txt /   3.檢視檔案內容 ./hdfs df

Linux基礎:利用SSH上傳、下載使用szrz命令

1、簡述   通常,利用SSH管理遠端Linux伺服器時,經常需要與本地互動檔案。當然,我們可以利用FTP方式,比如通過Filezilla客戶端軟體。不過直接使用SSH軟體(SecureCRT、Xshell)自帶的上傳和下載功能無疑使最方便快捷的。通常SSH軟體支援的檔

利用SecureCRT上傳、下載檔案使用szrz命令,超實用!

利用SecureCRT上傳、下載檔案(使用sz與rz命令)     藉助securtCRT,使用linux命令sz可以很方便的將伺服器上的檔案下載到本地,使用rz命令則是把本地檔案上傳到伺服器。     其中,對於sz和rz的理解與記憶我用瞭如下的方法(很多時候容易搞混

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料預處理

程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.ipynb 下一篇有一些資料的

程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之資料匯入&資料預處理

這篇主要是進行程式碼中的一些數值視覺化,幫助理解 程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_re

HIVE資料匯入匯出詳解

1.匯入 load data [local] inpath ''  [overwrite]  into database.table [partition(partcol=val)] 原始檔案在linux本地 加上local 如果原始資料檔案在hdfs 不用local

linux上資料庫匯入匯出mysql

匯入資料庫 1.建立資料庫。  create database stillmealdbs; 2.linux下檢視Mysql預設編碼、修改預設編碼 檢視MySQL資料庫的預設編碼        1使用status

Matlab檔案和資料匯入匯出

ref: https://blog.csdn.net/zengzeyu/article/details/72530596 Matlab檔案和資料的匯入與匯出 2017年05月19日 15:18:35 周吳鄭王 閱讀數:740