Sqoop的導入和導出

Sqoop的導入和導出

博客資源:

MySQL創建測試表和數據,Sqoop相關練習腳本:

鏈接:https://pan.baidu.com/s/1M_Zr3-cJNJMZQHhUA3XZKQ
提取碼:csgw

導入

將MySQL的數據導入到hdfs

本地連接node-1上的數據庫:

使用SQLyog連接

[外鏈圖片轉存失敗(img-tkNF0JbA-1568774625614)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\00創建連接.jpg)]

先新建一個測試數據庫,名爲:userdb

[外鏈圖片轉存失敗(img-qzP3i8hk-1568774625616)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\01創建新數據庫.jpg)]

先在本地使用之前安裝好的sqlyang連接node-1 的MySQL,創建好測試數據。

[外鏈圖片轉存失敗(img-cxvulDdn-1568774625616)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\02導入相關腳本.jpg)]

使用命令將emp表的數據導入到hdfs上

bin/sqoop import \								# 啓動導入名利
--connect jdbc:mysql://node-1:3306/sqoopdb \	# 連接串
--username root \								# MySQL的用戶名
--password hadoop \								# MySQL的密碼
--target-dir /sqoopresult \						# 導出存放路徑
--table emp --m 1								# 導出的表, --m 1表示使用一個MapReduce程序

注意:該命令運行時不加後面的註釋

每段後面的 \ 表示命令還沒結束,不要執行。如果命令較長,Sqoop支持這種寫法來換成多行寫。

[外鏈圖片轉存失敗(img-rmMPEahh-1568774625617)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\03MySQL數據導入至hdfs.jpg)]

查看導入的數據。

命令:hdfs dfs -cat /sqoopresult/part-m-00000

或者直接在hdfs的可視化界面查看。

[外鏈圖片轉存失敗(img-oxMMbd5L-1568774625617)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\04查看導入到hdfs的數據.jpg)]

將MySQL的數據導入到Hive

導入表結構使用命令:

bin/sqoop create-hive-table \					# 啓動導入數據到Hive
--connect jdbc:mysql://node-1:3306/userdb \		# MySQL連接串
--table emp_add \								# MySQL中要導出表名
--username root \								# MySQL的用戶名
--password hadoop \								# MySQL的密碼
--hive-table pttest.emp_add_sp					# Hive中保存的位置

注意:在Hive中是沒有表的,Sqoop會在導入時在Hive中選擇恰當的格式創建表。

這裏導入只有表結構,沒有數據。

[外鏈圖片轉存失敗(img-J0vb5kvl-1568774625618)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\05導入表結構到Hive.jpg)]

導入表結構和數據:

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--table emp_add \
--hive-table pttest.emp_add_sp \
--hive-import \									# 這裏表示導入數據
--m 1											# 啓動一個MapReduce程序

[外鏈圖片轉存失敗(img-kGcZrleN-1568774625619)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\06導入表和數據到Hive.jpg)]

導入表數據的子集到HDFS

只導入 city ='sec-bad' 的數據

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--where "city ='sec-bad'" \							# 和之前不同的是這裏加了和where條件
--target-dir /wherequery \
--table emp_add --m 1

查看命令:hdfs dfs -cat /wherequery/part-m-00000

[外鏈圖片轉存失敗(img-fd5c4uIQ-1568774625620)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\07導入部分數據到HDFS上.jpg)]

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--target-dir /wherequery12 \
--query 'select id,name,deg from emp WHERE  id>1203 and $CONDITIONS' \
--split-by id \
--fields-terminated-by '\t' \
--m 1
  1. 這裏 query 後面直接跟了一條SQL語句,後面的 and $CONDITIONS 是固定格式
  2. split-by 表示按什麼進行切分
  3. fields-terminated-by 指定分隔符

查看命令:hdfs dfs -cat /wherequery12/part-m-00000

[外鏈圖片轉存失敗(img-49g2iMVf-1568774625621)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\08導入部分數據到HDFS上.jpg)]

增量導入

bin/sqoop import \
--connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--table emp --m 1 \
--incremental append \							# 這裏表示增量導入
--check-column id \								# 導入時相關的字段
--last-value 1205								# 上一次最後導入的值

導出

Sqoop不會自動在MySQL上面創建表,所以,對於數據從HDFS上導出到MySQL中,需要我們先在MySQL中創建好表。

  1. 首先在MySQL上創建好表,使用SQLyog連接好MySQL,再創建好表。

    CREATE TABLE employee ( 
       id INT NOT NULL PRIMARY KEY, 
       name VARCHAR(20), 
       deg VARCHAR(20),
       salary INT,
       dept VARCHAR(10));
    
  2. 老套路,在HDFS上創建好對應的文件夾,在Linux上創建好測試文件上傳到HDFS上創建好的文件中。

    hadoop fs -mkdir /emp_data
    cd /export/data/
    mkdir sqoopdata
    cd sqoopdata/
    vi 1.txt
    hadoop fs -put 1.txt /emp_data/
    

    [外鏈圖片轉存失敗(img-iKV32aPo-1568774625621)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\09創建導出數據.jpg)]

  3. 進入Sqoop的安裝目錄,然後使用命令導出數據

    bin/sqoop export \
    --connect jdbc:mysql://node-1:3306/userdb \
    --username root \
    --password hadoop \
    --table employee \
    --export-dir /emp_data/
    

    [外鏈圖片轉存失敗(img-vU1jXHeD-1568774625622)(D:\學習筆記\Sqoop\上傳圖片\上傳下載數據\10導出成功.jpg)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章