sqoop import使用

一、sqoop作用洞豁?

sqoop是一個數(shù)據(jù)交換工具盐固,最常用的兩個工具是導(dǎo)入導(dǎo)出。

導(dǎo)入導(dǎo)出的參照物是hadoop族跛,向hadoop導(dǎo)數(shù)據(jù)就是導(dǎo)入闰挡。

二、sqoop的版本礁哄?

sqoop目前有兩個版本长酗,1.4.X為sqoop1;1.99.X為sqoop2桐绒。兩個版本不兼容夺脾。

三、使用sqoop列出mysql下的所有數(shù)據(jù)庫

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root --password 123456

information_schema

hive

mysql

test

復(fù)制代碼

四茉继、Import工具的使用

4.1將mysql中的某張表導(dǎo)入到hdfs上咧叭,現(xiàn)在test下有一張person表

4.2執(zhí)行sqoop語句

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 -table person

4.3在hdfs用戶的家目錄下,產(chǎn)生了一個person文件夾

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls

Found 2 items

drwx------? - root supergroup? ? ? ? ? 0 2016-07-03 23:00 .Trash

drwxr-xr-x? - root supergroup? ? ? ? ? 0 2016-07-21 22:30 person

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls person

Found 3 items

-rw-r--r--? 1 root supergroup? ? ? ? ? 0 2016-07-21 22:30 person/_SUCCESS

-rw-r--r--? 1 root supergroup? ? ? ? 17 2016-07-21 22:30 person/part-m-00000

-rw-r--r--? 1 root supergroup? ? ? ? 12 2016-07-21 22:30 person/part-m-00001

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person/part-*

1,zhangsan,false

2,lisi,true

復(fù)制代碼

4.4delete-target-dir參數(shù)

當(dāng)再次執(zhí)行sqoop語句的時候烁竭,會報錯菲茬,因為person文件夾已經(jīng)存在了,我們需要先刪除這個文件夾再運行sqoop語句派撕。

也可以使用sqoop提供的delete-target-dir參數(shù)

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 -table person --delete-target-dir

4.5append參數(shù)

如果目標(biāo)文件夾在hdfs上已經(jīng)存在婉弹,那么再次運行就會報錯≈蘸穑可以使用--delete-target-dir來先刪除目錄镀赌。也可以使用append來往目錄下追加數(shù)據(jù)。append和delete-target-dir是相互沖突的际跪。

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table person --append

執(zhí)行完成后商佛,查看hdfs上的文件

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls person

Found 5 items

-rw-r--r--? 1 root supergroup? ? ? ? ? 0 2016-07-21 22:50 person/_SUCCESS

-rw-r--r--? 1 root supergroup? ? ? ? 17 2016-07-21 22:50 person/part-m-00000

-rw-r--r--? 1 root supergroup? ? ? ? 12 2016-07-21 22:50 person/part-m-00001

-rw-r--r--? 1 root supergroup? ? ? ? 17 2016-07-21 23:48 person/part-m-00002

-rw-r--r--? 1 root supergroup? ? ? ? 12 2016-07-21 23:48 person/part-m-00003

復(fù)制代碼

4.6target-dir參數(shù)

上述的所有操作都是吧mysql中的數(shù)據(jù)寫到一個默認(rèn)的目錄下喉钢,可以使用target-dir來指定hdfs的目錄名

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table person --append --target-dir person-mysql

查看hdfs上的目錄

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls

Found 4 items

drwx------? - root supergroup? ? ? ? ? 0 2016-07-03 23:00 .Trash

drwxr-xr-x? - root supergroup? ? ? ? ? 0 2016-07-21 23:53 _sqoop

drwxr-xr-x? - root supergroup? ? ? ? ? 0 2016-07-21 23:48 person

drwxr-xr-x? - root supergroup? ? ? ? ? 0 2016-07-21 23:53 person-mysql

復(fù)制代碼

4.7map的個數(shù)

現(xiàn)在mysql表person中的數(shù)據(jù)增加到了11條

再次執(zhí)行sqoop語句來導(dǎo)入

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --table person --target-dir person-mysql

查看hdfs上的目錄

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls person-mysql

Found 5 items

-rw-r--r--? 1 root supergroup? ? ? ? ? 0 2016-07-21 23:59 person-mysql/_SUCCESS

-rw-r--r--? 1 root supergroup? ? ? ? 41 2016-07-21 23:59 person-mysql/part-m-00000

-rw-r--r--? 1 root supergroup? ? ? ? 35 2016-07-21 23:59 person-mysql/part-m-00001

-rw-r--r--? 1 root supergroup? ? ? ? 24 2016-07-21 23:59 person-mysql/part-m-00002

-rw-r--r--? 1 root supergroup? ? ? ? 37 2016-07-21 23:59 person-mysql/part-m-00003

復(fù)制代碼

從上面的結(jié)果可以發(fā)現(xiàn),這個作業(yè)啟動了4個map任務(wù)良姆,所以sqoop默認(rèn)配置就是4個map肠虽,用戶也可以通過-m參數(shù),自己指定map的數(shù)量

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --table person --target-dir person-mysql -m 1

查看hdfs上的目錄發(fā)現(xiàn)歇盼,這次只啟動了一個map任務(wù)

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls person-mysql

Found 2 items

-rw-r--r--? 1 root supergroup? ? ? ? ? 0 2016-07-22 00:02 person-mysql/_SUCCESS

-rw-r--r--? 1 root supergroup? ? ? ? 137 2016-07-22 00:02 person-mysql/part-m-00000

4.8where參數(shù)

where參數(shù)可以進行一些簡單的篩選

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --table person --target-dir person-mysql -m 1 --where "gender=0"

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person-mysql/part*

1,zhangsan,false

3,003,false

4,004,false

6,006,false

7,007,false

8,008,false

9,009,false

11,011,false

復(fù)制代碼

4.9query參數(shù)

query參數(shù)就可以讓用戶隨意寫sql語句來查詢了舔痕。query和table參數(shù)是互斥的。

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --target-dir person-mysql -m 1 --query "select * from person where name='003' and gender=0 and \$CONDITIONS"

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person-mysql/part-*

3,003,false

4.10壓縮

如果想要使得導(dǎo)入到hdfs上的數(shù)據(jù)被壓縮豹缀,就可以使用-z或者--compression-codec來進行壓縮,-z壓縮方式是gzip壓縮慨代,--compression-codec可以自定義壓縮方式

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --target-dir person-mysql -m 1 --table person -z

查看hdfs上的結(jié)果:

(my_python_env)[root@hadoop26 ~]# hadoop fs -ls person-mysql

Found 2 items

-rw-r--r--? 1 root supergroup? ? ? ? ? 0 2016-07-22 00:38 person-mysql/_SUCCESS

-rw-r--r--? 1 root supergroup? ? ? ? 99 2016-07-22 00:38 person-mysql/part-m-00000.gz

使用Snappy方式壓縮

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --target-dir person-mysql -m 1 --table person --compression-codec org.apache.hadoop.io.compress.SnappyCodec

4.11空值處理

像如圖id=12的記錄是沒有name和gender的邢笙,如果不加處理,導(dǎo)入到hdfs上是這樣子的:

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person-mysql/part*

1,zhangsan,false

2,lisi,true

3,003,false

4,004,false

5,005,true

6,006,false

7,007,false

8,008,false

9,009,false

10,010,true

11,011,false

12,null,null

復(fù)制代碼

sqoop提供了--null-string來處理字符類型的空值侍匙,提供了--null-non-string來處理非字符類型的空值氮惯。

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --delete-target-dir --target-dir person-mysql -m 1 --table person --null-string "" --null-non-string "false"

執(zhí)行結(jié)果是:

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person-mysql/part*

1,zhangsan,false

2,lisi,true

3,003,false

4,004,false

5,005,true

6,006,false

7,007,false

8,008,false

9,009,false

10,010,true

11,011,false

12,,false

復(fù)制代碼

4.12增量傳輸

增量導(dǎo)入的一個場景就是昨天導(dǎo)入了一批數(shù)據(jù),今天又增加了部分?jǐn)?shù)據(jù)想暗,現(xiàn)在要把這部分?jǐn)?shù)據(jù)也導(dǎo)入到hdfs中妇汗。

sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456? --target-dir person-mysql -m 1 --table person --null-string "" --null-non-string "false" --check-column "id" --incremental append --last-value 5

執(zhí)行結(jié)果是:

復(fù)制代碼

(my_python_env)[root@hadoop26 ~]# hadoop fs -cat person-mysql/part-m-00001

6,006,false

7,007,false

8,008,false

9,009,false

10,010,true

11,011,false

12,,false

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市说莫,隨后出現(xiàn)的幾起案子杨箭,更是在濱河造成了極大的恐慌,老刑警劉巖储狭,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件互婿,死亡現(xiàn)場離奇詭異,居然都是意外死亡辽狈,警方通過查閱死者的電腦和手機慈参,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刮萌,“玉大人驮配,你說我怎么就攤上這事∽湃祝” “怎么了壮锻?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長元扔。 經(jīng)常有香客問我躯保,道長,這世上最難降的妖魔是什么澎语? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任途事,我火速辦了婚禮验懊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尸变。我一直安慰自己义图,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布召烂。 她就那樣靜靜地躺著碱工,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奏夫。 梳的紋絲不亂的頭發(fā)上怕篷,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音酗昼,去河邊找鬼廊谓。 笑死,一個胖子當(dāng)著我的面吹牛麻削,可吹牛的內(nèi)容都是我干的蒸痹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼呛哟,長吁一口氣:“原來是場噩夢啊……” “哼叠荠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扫责,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤榛鼎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后公给,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體借帘,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年淌铐,在試婚紗的時候發(fā)現(xiàn)自己被綠了肺然。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡腿准,死狀恐怖际起,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吐葱,我是刑警寧澤街望,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站弟跑,受9級特大地震影響灾前,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孟辑,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一哎甲、第九天 我趴在偏房一處隱蔽的房頂上張望蔫敲。 院中可真熱鬧,春花似錦炭玫、人聲如沸奈嘿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裙犹。三九已至,卻和暖如春衔憨,著一層夾襖步出監(jiān)牢的瞬間叶圃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工巫财, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盗似,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓平项,卻偏偏與公主長得像,于是被迫代替她去往敵國和親悍及。 傳聞我的和親對象是個殘疾皇子闽瓢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

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