準備工作
- 1.搭建好的hadoop分佈式系統
- 2.mysql-connector-java-5.1.43-bin.jar和sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz安裝包
安裝
解壓sqoop安裝包實現sqoop的安裝
#tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/hadoop //解壓實現安裝
#cd /usr/local/hadoop //進入sqoop的安裝目錄
#mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz sqoop-1.4.6 //重命名sqoop
配置
- 1.配置sqoop的環境變量
#vim /etc/profile
添加如下記錄:
SQOOP_HOME=/usr/local/hadoop/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin:$PATH
使配置文件生效
#source /etc/profile
- 2.複製mysql-connector-java-5.1.43-bin.jar到sqoop/lib目錄下
#cp mysql-connector-java-5.1.43-bin.jar /usr/local/hadoop/sqoop-1.4.6/lib
- 3.修改配置文件sqoop-env.sh
#vim /usr/local/hadoop/sqoop-1.4.6/conf/sqoop-env.sh
將配置文件做如下改變:
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/usr/local/hadoop/hadoop-2.7.3
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/usr/local/hadoop/hadoop-2.7.3
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
#export HIVE_HOME=
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=
- 4.修改文件
#vim /usr/local/hadoop/sqoop-1.4.6/bin/configure-sqoop
註釋掉如下內容:
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HBASE_HOME}" ]; then
# echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
# echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#fi
#
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#
#if [ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
#if [ ! -d "${ZOOKEEPER_HOME}" ]; then
# echo "Warning: $ZOOKEEPER_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.'
#fi
選擇註釋掉這些內容的原因:在執行sqoop語句的時候常常有幾個warning警告,這些警告就是註釋掉的部分引起的。除非你準備使用HCatalog,Accumulo等hadoop上的組件,就可以不註釋。
查看幫助
[root@Master ~]# sqoop help
17/08/22 06:23:52 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
usage: sqoop COMMAND [ARGS]
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
See 'sqoop help COMMAND' for information on a specific command.
import主要參數
--connect <jdbc-uri> //jdbc連接地址
--connection-manager <class-name> //連接管理者
--driver <class-name> //驅動類
--hadoop-mapred-home <dir> //$HADOOP_MAPRED_HOME
--help //help信息
--password <password> //密碼
--username <username> //賬號
--verbose //打印信息
--connection-param-file <filename> //可選參數
-P //從命令行輸入密碼
export主要參數
--direct //快速導入
--export-dir <dir> //HDFS導出數據的目錄
--table <table-name> //導出哪個表
--call <stored-proc-name> //存儲過程
--update-key <col-name> //通過哪個字段來判斷更新
--update-mode <mode> //插入模式,默認是隻更新,可以設置爲allowinsert.
--input-null-string <null-string> //字符類型null處理
--input-null-non-string <null-string> //非字符類型null處理
--staging-table <staging-table-name> //臨時表
--clear-staging-table //清空臨時表
--batch //批量模式
-m,--num-mappers <n> //都少個map線程
轉義字符相關參數
--enclosed-by <char> //設置字段結束符號
--escaped-by <char> //用哪個字符來轉義
--fields-terminated-by <char> //字段之間的分隔符
--lines-terminated-by <char> //行分隔符
--mysql-delimiters //使用mysql的默認分隔符: , lines: \n escaped-by: \ optionally-enclosed-by: '
--optionally-enclosed-by <char> //複製結束符
常用命令
顯示mysq中的數據庫
#sqoop list-databases --connect jdbc:mysql://123.207.101.174:3306/ --username 用戶名 --password 密碼
顯示某mysql數據庫中的表
#sqoop list-tables --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
將mysql數據庫中的數據導入HDFS中
#sqoop import --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
--table msg --fields-terminated-by '\t' -m 1
將mysql數據庫中的數據導入hive中
#sqoop import --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
--table msg --hive-import --fields-terminated-by '\t' -m 1
注:將mysql數據庫中的數據導入hive中實際上內部執行了三個步驟:
1.將數據導入HDFS中
2.在hive中創建與mysql中同名的表
3.將HDFS中的數據傳入hive表中同時刪除HDFS上的數據
將HDFS中的數據導出到mysql數據庫中
#sqoop export --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
--table 表名 --export-dir /user/root/msg/part-m-00000 --input-fields-terminated-by '\t'
注:導入之前需要先在mysql數據庫中創建和被導入的表表結構一樣的表
將hive中的數據導入到mysql數據庫中
#sqoop export --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
--table 表名 --export-dir /user/hive/warehouse/msg/part-m-00000 --input-fields-terminated-by '\t'
注:導入之前需要先在mysql數據庫中創建和被導入的表表結構一樣的表
將關係型數據庫的表結構複製到hive中
#sqoop create-hive-table --connect jdbc:mysql://123.207.101.174:3306/數據庫名 --username 用戶名 --password 密碼
--table 表名 --hive-table hive表名 --fields-terminated-by "\0001" --lines-terminated-by "\n";