歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Sqoop安裝配置及Hive導入

Sqoop安裝配置及Hive導入

日期:2017/2/28 13:48:58   编辑:Linux教程

Sqoop是一個用來將Hadoop(Hive、HBase)和關系型數據庫中的數據相互轉移的工具,可以將一個關系型數據庫(例如:MySQL ,Oracle ,Postgres等)中的數據導入到Hadoop的HDFS中,也可以將HDFS的數據導入到關系型數據庫中。

官網地址:http://sqoop.apache.org/
一、安裝配置
1.下載
最新版本1.4.6,下載http://mirrors.cnnic.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
解壓:tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop-1.4.6.bin

2.環境變量配置

vi ~/.bash_profile

export SQOOP_HOME=/home/hadoop/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin:$PATH
使其生效source .bash_profile
3.配置Sqoop參數

復制conf/sqoop-env-template.sh 為:conf/sqoop-env.sh


# Hadoop
export HADOOP_PREFIX=/home/hadoop/hadoop-2.6.0
export HADOOP_HOME=${HADOOP_PREFIX}
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
# Native Path
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native"
# Hadoop end

#Hive
export HIVE_HOME=/home/hadoop/hive-1.2.1
export PATH=$HIVE_HOME/bin:$PATH

#HBase
export HBASE_HOME=/home/hadoop/hbase-1.1.2
export PATH=$HBASE/bin:$PATH4.復制mysql驅動

將mysql的驅動jar(mysql-connector-java-5.1.34.jar)復制到lib目錄下
二、hive導入測試
sqoop ##sqoop命令
import ##表示導入
--connect jdbc:mysql://ip:3306/sqoop ##告訴jdbc,連接mysql的url
--username root ##連接mysql的用戶名
--password 123456 ##連接mysql的密碼
--table test ##從mysql導出的表名稱
--query ##查詢語句
--columns ##指定列
--where ##條件
--hive-import ##指定為hive導入
--hive-table ##指定hive表,可以使用--target-dir //user/hive/warehouse/table_name 替換
--fields-terminated-by '\t' ##指定輸出文件中的行的字段分隔符
-m 1 ##復制過程使用1個map作業
以上的命令中後面的##部分是注釋,執行的時候需要刪掉;另外,命令的所有內容不能換行,只能一行才能執行。以下操作類似。


准備數據

CREATE TABLE `t_user` (
`id` varchar(40) COLLATE utf8_bin NOT NULL,
`name` varchar(40) COLLATE utf8_bin NOT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));
INSERT t_user VALUES(uuid_short(), CONCAT('姓名',ROUND(RAND()*50)), ROUND(RAND()*100));1.導入數據到HDFS
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user
命令會啟動一個job mapreduce 程序導入數據
驗證導入到hdfs上的數據:
hdfs dfs -ls /user/hadoop/t_user
hdfs dfs -cat /user/hadoop/t_user/part-m-0000*
注:
1)默認設置下導入到hdfs上的路徑是: /user/{user.name}/tablename/(files),比如我的當前用戶是hadoop,那麼實際路徑即: /user/hadoop/t_user/(files)。
如果要自定義路徑需要增加參數:--warehouse-dir 比如:
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/test/sqoop
2)若表是無主鍵表的導入需要增加參數 --split-by xxx 或者 -m 1
Sqoop根據不同的split-by參數值來進行切分,然後將切分出來的區域分配到不同map中.每個map中再處理數據庫中獲取的一行一行的值,寫入到HDFS中.同時split-by根據不同的參數類型有不同的切分方法,如比較簡單的int型,Sqoop會取最大和最小split-by字段值,然後根據傳入的num-mappers來確定劃分幾個區域。
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --split-by 字段名
2.導入數據到Hive
增加參數 –hive-import
sqoop import --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user --warehouse-dir /user/sqoop --hive-import --create-hive-table
驗證導入到hive上的數據:
hive>show tables;
hive>select * from t_user;
3.把數據從hdfs導出到mysql中
復制表結構:create table t_user1 select * from t_user where 1=2;
sqoop export --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --table t_user1 --export-dir '/user/hadoop/t_user/part-m-00000' --fields-terminated-by ','
4.列出mysql數據庫中的所有數據庫
sqoop list-databases --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
5.連接mysql並列出數據庫中的表
sqoop list-tables --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456
6.將關系型數據的表結構復制到hive中,只是復制表的結構,表中的內容沒有復制
sqoop create-hive-table --connect jdbc:mysql://192.168.1.93/test --username hive --password 123456 --hive-table t_user1 --fields-terminated-by "\t" --lines-terminated-by "\n";
參數說明:
--fields-terminated-by "\0001" 是設置每列之間的分隔符,"\0001"是ASCII碼中的1,它也是hive的默認行內分隔符, 而sqoop的默認行內分隔符為","
--lines-terminated-by "\n" 設置的是每行之間的分隔符,此處為換行符,也是默認的分隔符;
7.將數據從關系數據庫導入文件到hive表中,--query 語句使用
--query 查詢語句 如 "select * from t_user"
8.將數據從關系數據庫導入文件到hive表中,--columns --where 語句使用
--columns 列名 如:"id,age,name"
--where 條件 如:"age > 40"

相關閱讀

通過Sqoop實現Mysql / Oracle 與HDFS / Hbase互導數據 http://www.linuxidc.com/Linux/2013-06/85817.htm

[Hadoop] Sqoop安裝過程詳解 http://www.linuxidc.com/Linux/2013-05/84082.htm

用Sqoop進行MySQL和HDFS系統間的數據互導 http://www.linuxidc.com/Linux/2013-04/83447.htm

Hadoop Oozie學習筆記 Oozie不支持Sqoop問題解決 http://www.linuxidc.com/Linux/2012-08/67027.htm

Hadoop生態系統搭建(hadoop hive hbase zookeeper oozie Sqoop) http://www.linuxidc.com/Linux/2012-03/55721.htm

Hadoop學習全程記錄——使用Sqoop將MySQL中數據導入到Hive中 http://www.linuxidc.com/Linux/2012-01/51993.htm

Sqoop 的詳細介紹:請點這裡
Sqoop 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved