sqoop導入導出練習

sqoop簡介

雖然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導入HDFS

在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參數

從HDFS導入MySQL

執行命令:

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中查看導出結果

爲何數據重複的?由於前面先導入一次,而後追加一次,因此有兩份數據

相關文章
相關標籤/搜索