雖然hadoop具備海量、高可用等特性,但要想往裏面添加數據仍是得先造成文件,再上傳,過程比較麻煩。而對於咱們但願將原有關係型數據庫(mysql,Oracle)裏面的數據導入導出到HDFS則須要通過查詢、生成格式文件、上傳等三個步驟,不免寫很多代碼,敲很多命令,使用不是太方便。爲了提升工做效率,sqoop誕生了,它提供了簡單的功能,能夠一鍵導入導出到hdfs。mysql
下載地址:http://www.apache.org/dyn/closer.lua/sqoop/sql
請選擇與本身安裝hadoop匹配的版本,我本身的hadoop版本是2.7.1,sqoop版本是1.4.4數據庫
配置環境:apache
配置JAVA_HOME環境變量app
配置HADOOP_HOME環境變量oop
####################### jdk ############################### export JAVA_HOME=/home/jionsvolk/proc/jdk1.8.0_65 export JAVA_BIN=$JAVA_HOME/bin export PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH ######################## hadoop ########################### HADOOP_HOME=/home/hadoop/proc/hadoop-2.7.1 #HADOOP_HOME=/home/hadoop/proc/hadoop_cluster PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_HOME PATH
將mysql的驅動放到sqoop的安裝目錄下lua
注意mysql的jar包也須要與安裝服務mysql作匹配,好比我安裝的5.x版本,那麼就用5.x.jar包spa
配置SQOOP_HOMEorm
####################### sqoop ############################# export SQOOP_HOME=/home/hadoop/proc/sqoop-1.4.4 PATH=$PATH:$SQOOP_HOME/bin export PATH
在MySQL中建立表並插入數據排序
須要注意,表必定要有主鍵,覺得hadoop處理數據須要指定一個key,並作排序
在Hive中建立表
重點來了--使用sqoop命令執行導入操做
sqoop import --connect jdbc:mysql://192.168.245.150:3306/test --username root --password 12340101 --table acct --target-dir '/user/hive/warehouse/acct' --fields-terminated-by '|' -m 1
import:導入
--connect:mysql的鏈接串
--username:數據庫用戶名
--password:數據庫密碼
--table:數據庫表名
--target-dir:hdfs存放表的目錄(不包含表名)
--fields-ternimated-by:文件分隔符
-m:mr程序跑的時候map的數量(以前寫mr程序時,map數是由邏輯切片決定的),這裏是直接指定的。若是-m參數被設置爲大於1,則須要配合參數--split-by tbl_name.column_name使用或者表必須定義主鍵列,不然會報一個錯:
ERROR tool.ImportTool: Error during import: No primary key could be found for table acct. Please specify one with --split-by or perform a sequential import with '-m 1'
執行命令輸出結果:
能夠看到最終執行的仍是mr程序
驗證hadoop裏面是否已經有文件
若是要想追加數據到acct表中,則只須要在上面的命令中添加--append參數
若是想要查看更多import命令參數可使用
sqoop import -help
如:
--where 能夠指定查詢條件
--query 能夠寫一個查詢語句,再也不指定--table參數
執行命令:
sqoop export --connect jdbc:mysql://192.168.245.150:3306/test --username root --password 12340101 --export-dir '/user/hive/warehouse/acct' --table acct_new -m 1 --fields-terminated-by '|'
export:導出
--export-dir:指定hdfs被導出的目錄
其餘命令選項使用 sqoop export -help查看
查看執行命令的結果:
在MySQL中查看導出結果
爲何數據重複的?由於前面先導入一次,而後追加一次,因此有兩份數據