Sqoop的導入和導出
博客資源:
MySQL創建測試表和數據,Sqoop相關練習腳本:
鏈接:https://pan.baidu.com/s/1M_Zr3-cJNJMZQHhUA3XZKQ
提取碼:csgw
導入
將MySQL的數據導入到hdfs
本地連接node-1上的數據庫:
使用SQLyog連接
先新建一個測試數據庫,名爲:userdb
先在本地使用之前安裝好的sqlyang連接node-1 的MySQL,創建好測試數據。
使用命令將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支持這種寫法來換成多行寫。
查看導入的數據。
命令:hdfs dfs -cat /sqoopresult/part-m-00000
或者直接在hdfs的可視化界面查看。
將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中選擇恰當的格式創建表。
這裏導入只有表結構,沒有數據。
導入表結構和數據:
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
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
- 這裏
query
後面直接跟了一條SQL語句,後面的and $CONDITIONS
是固定格式 split-by
表示按什麼進行切分fields-terminated-by
指定分隔符
查看命令:hdfs dfs -cat /wherequery12/part-m-00000
增量導入
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中創建好表。
-
首先在MySQL上創建好表,使用SQLyog連接好MySQL,再創建好表。
CREATE TABLE employee ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20), deg VARCHAR(20), salary INT, dept VARCHAR(10));
-
老套路,在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/
-
進入Sqoop的安裝目錄,然後使用命令導出數據
bin/sqoop export \ --connect jdbc:mysql://node-1:3306/userdb \ --username root \ --password hadoop \ --table employee \ --export-dir /emp_data/