sqoop
Sqoop是一款開源的工具,主要用於在HADOOP不傳統的數據庫(mysql、postgresql等)進行數據的傳遞,可以將一個關係型數據庫(例如:MySQL、Oracle、Postgres等)中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關係型數據庫中。Sqoop中一大亮點就是可以通過hadoop的mapreduce把數據從關係型數據庫中導入數據到HDFS。
參數配置
1.使用參數
sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
2.使用文件
sqoop --options-file /users/homer/work/import.txt --table TEST
import.txt如下:
import
--connect
jdbc:mysql://localhost/db
--username
foo
配置文件支持添加註釋
#
# Options file for Sqoop import
#
# Specifies the tool being invoked
import
# Connect parameter and value
--connect
jdbc:mysql://localhost/db
# Username parameter and value
--username
foo
#
# Remaining options should be specified in the command line.
數據導入
1.連接數據庫
連接
$ sqoop import --connect jdbc:mysql://database.example.com/employees
#添加用戶名和密碼配置
sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
安全考慮可以把password放在文件裏
sqoop import --connect jdbc:mysql://database.example.com/employees \
--username venkatesh --password-file ${user.home}/.password
2.選擇導出數據
--table可以配置要導出的表
sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
--columns 可以配置要導出的列名
--columns "name,employee_id,jobtitle"
sqoop import --connect jdbc:mysql://localhost/db --username foo --password pwd --table user \
--columns "name,id,age"
--where 設置選擇條件
--where "age > 400"
sqoop import --connect jdbc:mysql://localhost/db --username foo --password pwd --table user \
--where "age > 400"
3.使用sql語句
--query 和--target-dir一起使用
sqoop import --connect jdbc:mysql://localhost/db --username foo --password pwd\
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
--split-by a.id --target-dir /user/foo/joinresults
-m [number] 設置map數量
#設置1個map
sqoop import --connect jdbc:mysql://localhost/db --username foo --password pwd\
--query 'SELECT a.*, b.* FROM a JOIN b on (a.id == b.id) WHERE $CONDITIONS' \
-m 1 --split-by a.id --target-dir /user/foo/joinresults
4.分隔取出的數據
--fields-terminated-by 設置字段之間的分隔符 --lines-terminated-by 設置每行之間的分隔符
sqoop import --connect jdbc:mysql://localhost/db --username foo --password pwd\
--fields-terminated-by "\0001" --lines-terminated-by "\n";