Mysql 與 hadoop 數(shù)據(jù)同步(遷移)雹舀,你需要知道 Sqoop

上篇文章 Mysql 到 Hbase 數(shù)據(jù)如何實(shí)時同步,強(qiáng)大的 Streamsets 告訴你 我們說到了如何使用 Streamsets 來進(jìn)行 mysql 到 hbase 的數(shù)據(jù)實(shí)時同步(遷移)。使用 Streamsets 的優(yōu)點(diǎn)是部署簡單兰粉,配置靈活焊唬,無需編寫代碼恋昼。

認(rèn)真閱讀上篇文章的朋友會發(fā)現(xiàn),Streamsets 能夠?qū)崟r跟蹤數(shù)據(jù)的變化赶促,將數(shù)據(jù)同步更新到 hbase 中液肌。但是對于歷史數(shù)據(jù)(并且數(shù)據(jù)不改動的記錄)的同步,文章中并沒有提及到鸥滨。當(dāng)然嗦哆,并不是因?yàn)?Streamsets 不能從事這些事情谤祖,而是筆者暫時沒有使用它來進(jìn)行歷史數(shù)據(jù)的遷移。因此老速,對于歷史數(shù)據(jù)的遷移粥喜,筆者今天來介紹另外一個工具 - Sqoop。相對于 Streamsets橘券,大家應(yīng)該更加熟悉 Sqoop额湘。

如果你工作中需要將關(guān)系型數(shù)據(jù)庫(Mysql、Oracle等等)中的數(shù)據(jù)同步到 hadoop(HDFS旁舰、hive锋华、hbase) 中,或者將 hadoop 中的數(shù)據(jù)同步到關(guān)系型數(shù)據(jù)庫中箭窜,那這篇文章應(yīng)該能幫助到你毯焕。

注:Streamsets 以及 Sqoop 都屬于數(shù)據(jù)同步、遷移方面比較流行的解決方案磺樱,類似的工具還有很多纳猫,比如 Datax、kettle 等等坊罢,從事數(shù)據(jù)方面工作的朋友可以去多多了解续担,找到適合自己工作場景的方案。

認(rèn)識一下

Sqoop 的命名活孩,仔細(xì)一看是不是有點(diǎn)像 sql 和 hadoop 兩個詞語的拼接產(chǎn)物物遇。其實(shí)從它的命名來看也就很明顯:它是用來將關(guān)系型數(shù)據(jù)庫和 Hadoop 中的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)移的工具,并且這種轉(zhuǎn)換是雙向的憾儒⊙耍看下圖就能一目了然:


從關(guān)系型數(shù)據(jù)庫到 hadoop 我們稱之為 import,從 hadoop 到關(guān)系型數(shù)據(jù)庫我們稱之為 export。文章后面大家就會看到 "import"起趾、"export" 對應(yīng)命令的兩個模式诗舰。

安裝

對于 Sqoop 的安裝,這里就不做介紹了训裆,網(wǎng)上有很多的教程眶根,因?yàn)槭且粋€工具,所以安裝起來也是很方便簡單边琉。需要注意的是 Sqoop 有兩個大的版本:Sqoop1属百、Sqoop2。


訪問 Sqoop 官網(wǎng) 变姨,官網(wǎng)上的 1.4.x 的為 Sqoop1, 1.99.* 為 Sqoop2族扰。

關(guān)于 Sqoop1 與 Sqoop2 的區(qū)別,通俗來講就是:

  1. sqoop1 只是一個客戶端工具,Sqoop2 加入了 Server 來集中化管理連接器
  2. Sqoop1 通過命令行來工作渔呵,工作方式單一怒竿,Sqoop2 則有更多的方式來工作,比如 REST api接口扩氢、Web 頁
  3. Sqoop2 加入權(quán)限安全機(jī)制

對于筆者來說耕驰,Sqoop 就是一個同步工具,命令行足夠滿足工作需求录豺,并且大部分?jǐn)?shù)據(jù)同步都是在同一個局域網(wǎng)內(nèi)部(也就沒有數(shù)據(jù)安全之類問題)耍属,所以選擇的是 Sqoop1(具體版本是 1.4.6)

框架原理

通過上圖可以看出, Sqoop Client 通過 shell 命令來使用 sqoop, sqoop 中的 Task Translater 將命令轉(zhuǎn)換成 hadoop 中的 mapreduce 任務(wù)進(jìn)行具體的數(shù)據(jù)操作」欤可以這樣理解,例如 Mysql 中某個表數(shù)據(jù)同步到 hadoop 這個場景示启,Sqoop 會將表記錄分成多份兢哭,每份分到各自 mapper 中去進(jìn)行落地 hadoop(保證同步效率)。大家可能發(fā)現(xiàn)夫嗓,其實(shí)這里的 mapreduce 沒有 reduce,只有 map迟螺。

實(shí)操

了解了 Sqoop 是什么,能做什么以及大概的框架原理舍咖,接下來我們直接使用 Sqoop 命令來感受一下使用 Sqoop 是如何簡單及有效矩父。本文案例中的關(guān)系型數(shù)據(jù)庫使用的是 mysql,oracle 以及其他使用 jdbc 連接的關(guān)系型數(shù)據(jù)庫操作類似排霉,差別不大窍株。

運(yùn)行 sqoop help 可以看到 Sqoop 提供了哪些操作,如下圖


這些操作其實(shí)都會一一對應(yīng)到 sqoop bin 目錄下的一個個可運(yùn)行腳本文件,如果想了解細(xì)節(jié)攻柠,可以打開這些腳本進(jìn)行查看


工作中一般常用的幾個操作或者命令如下:

  1. list-databases : 查看有哪些數(shù)據(jù)庫
  2. list-tables : 查看數(shù)據(jù)庫中有哪些表
  3. import : 關(guān)系型數(shù)據(jù)庫到 hadoop 數(shù)據(jù)同步
  4. export : hadoop 到關(guān)系型數(shù)據(jù)庫數(shù)據(jù)同步
  5. version :查看 Sqoop 版本

列出數(shù)據(jù)庫

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/ --username root --password 12345678

列出表

sqoop list-databases --connect jdbc:mysql://192.168.1.123:3306/databasename --username root --password 12345678

mysql 到 hdfs

sqoop import
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password 12345678
--table tablename
--target-dir /hadoopDir/
--fields-terminalted-by '\t'
-m 1
--check-column id
--last-value num
--incremental append

--connect : 數(shù)據(jù)庫的 JDBC URL,后面的 databasename 想要連接的數(shù)據(jù)庫名稱

--table : 數(shù)據(jù)庫表

--username : 數(shù)據(jù)庫用戶名

--password : 數(shù)據(jù)庫密碼

--target-dir : HDFS 目標(biāo)目錄

--fields-terminated-by :數(shù)據(jù)導(dǎo)入后每個字段之間的分隔符

-m :mapper 的并發(fā)數(shù)量

--check-column : 指定增量導(dǎo)入時的參考列球订,這里是 id (主鍵)

--last-value : 上一次導(dǎo)入的最后一個值

--incremental append :導(dǎo)入方式為增量

注意:工作中需要增量同步的場景下,我們就可以使用 --incremental append 以及 --last-value瑰钮。比如這里我們使用 id 來作為參考列冒滩,如果上次同步到了 1000, 這次我們想只同步新的數(shù)據(jù)浪谴,就可以帶上參數(shù) --last-value 1000开睡。

mysql 到 hive

使用 imort --create-hive-table

sqoop import 
--create-hive-table 
-m 1 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root 
--password 12345678 
--table tablename
--hive-import 
--hive-database databasename_hive 
--hive-overwrite 
--hive-table tablename_hive

mysql 到 hbase

hbase shell
create_namespace 'database_tmp'
create 'database_tmp:table_tmp','info'

sqoop import 
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username 'root' 
--password '12345678' 
--table 'tablename' 
--hbase-table 'database_tmp:table_tmp' 
--hbase-row-key 'id' 
--column-family 'info'

首先進(jìn)入 hbase shell,創(chuàng)建好 namespace 以及 數(shù)據(jù)庫。database_tmp 位命名空間苟耻,table_tmp 為數(shù)據(jù)庫篇恒。

hdfs 到 mysql

sqoop export
--connect jdbc:mysql://192.168.1.123:3306/databasename
--username root
--password '12345678' 
--table tablename
--m 1
--export-dir /hadoopDir/
--input-fields-terminated-by '\t'
--columns="column1,column2"

--columns : 制定導(dǎo)出哪些列

hive 到 mysql

了解 hive 的朋友都知道,hive 的真實(shí)數(shù)據(jù)其實(shí)就是 hdfs 磁盤上的數(shù)據(jù)梁呈,所以 hive 到 mysql 的同步操作與 hdfs 到 mysql 的操作類似

hbase 到 mysql

目前 Sqoop 沒有提供直接將 hbase 數(shù)據(jù)同步到 mysql 的操作

總結(jié): 在 sql to hadoop 和 hadoop to sql 這種數(shù)據(jù)同步場景婚度,Sqoop 是一個很有效且靈活的工具,大家不妨使用它來從事數(shù)據(jù)方面的工作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝗茁,一起剝皮案震驚了整個濱河市醋虏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哮翘,老刑警劉巖颈嚼,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饭寺,居然都是意外死亡阻课,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門艰匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來限煞,“玉大人,你說我怎么就攤上這事员凝∈鹱ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵健霹,是天一觀的道長旺上。 經(jīng)常有香客問我,道長糖埋,這世上最難降的妖魔是什么宣吱? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瞳别,結(jié)果婚禮上征候,老公的妹妹穿的比我還像新娘。我一直安慰自己洒试,他們只是感情好倍奢,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垒棋,像睡著了一般卒煞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叼架,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天畔裕,我揣著相機(jī)與錄音,去河邊找鬼乖订。 笑死扮饶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乍构。 我是一名探鬼主播甜无,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岂丘?” 一聲冷哼從身側(cè)響起陵究,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奥帘,沒想到半個月后铜邮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寨蹋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年松蒜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已旧。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡秸苗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出运褪,到底是詐尸還是另有隱情难述,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布吐句,位于F島的核電站,受9級特大地震影響店读,放射性物質(zhì)發(fā)生泄漏嗦枢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一屯断、第九天 我趴在偏房一處隱蔽的房頂上張望文虏。 院中可真熱鬧,春花似錦殖演、人聲如沸氧秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丸相。三九已至,卻和暖如春彼棍,著一層夾襖步出監(jiān)牢的瞬間灭忠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工座硕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弛作,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓华匾,卻偏偏與公主長得像映琳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容