近期用到Sqoop進行數據導出導入,發現網上不少的博客都不夠精細,因此本人就針對Sqoop1.4.7的官方文檔進行了學習,如下是學習筆記,若有錯誤,請批評指正,謝謝!java
sqoop是溝通HDFS和關係型數據庫的橋樑,能夠從HDFS導出數據到關係型數據庫,也能夠從關係型數據庫導入數據到HDFS。固然也支持Hive、HBase跟關係型數據庫之間的互相導出導入。這是一個能夠進行雙向轉化數據的工具。node
Sqoop是Apache提供的工具,下載的時候必定要先肯定hadoop的版本,要找和hadoop匹配的版本,若是不匹配將會發生不可預知的問題。Sqoop目前支持4種主要的Hadoop版本 0.20、0.2三、1.0和2.0。mysql
官方要求必須有jdk和hadoop的支持,而且有版本要求。linux
本人使用的jdk爲1.8.131版本,Hadoop爲2.7.1版本。這裏jdk、Hadoop、Hive以及HBase的安裝能夠查看本人以前的文章:Hadoop僞分佈式模式搭建、Hadoop徹底分佈式集羣搭建、HIVE簡介、HBase簡介及搭建、Centos 7+CDH5.7.2所有署流程。sql
將Sqoop的安裝包上傳到linux中,進行解壓就能夠直接使用。如下是本人使用的Sqoop的版本:shell
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz數據庫
sqoop能夠經過已配置的環境變量JAVA_HOME找到JDK,能夠經過已配置的環境變量HADOOP_HOME找到Hadoop,因此Sqoop不須要作任何配置就能夠直接工做。bash
固然若是想在任何目錄使用Sqoop的命令的話,就必須配置Sqoop的環境變量。以下是本人配置的Sqoop的環境變量:服務器
export SQOOP_HOME=/home/software/sqoop1.4.7 export PATH=$PATH:$SQOOP_HOME/bin
這裏本人使用的是MySQL數據庫,由於Sqoop須要鏈接數據庫,因此須要將鏈接數據庫的驅動jar包加入sqoop的lib目錄下。如下是本人使用的jar包:分佈式
mysql-connector-java-5.1.38-bin.jar
固然,若是你使用的是其餘關係型數據庫,相應的就須要導入其餘關係型數據庫的jar包。
以下是基礎的命令格式:
$ sqoop tool-name [tool-arguments]
這個命令的意思是以sqoop命令開頭,而後跟上要使用的工具名稱(工具模塊在下文有介紹),而後跟上要使用的工具相應的參數選項。
Sqoop提供了相應的幫助工具,如下是Sqoop幫助命令展現:
$ sqoop help 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 mainframe datasets to HDFS list-databases List available databases on a server list-tables List available tables in a database version Display version information See 'sqoop help COMMAND' for information on a specific command.
能夠經過輸入如下內容來顯示特定工具的幫助:
sqoop help (tool-name)
例如:
sqoop help import
也能夠將--help參數添加到任何命令中:
sqoop import --help
這兩種方式,效果是同樣的。
除了使用sqoop (toolname)語法以外,還可使用指定sqoop-(toolname)語法的別名腳本。
例如:Sqoop內置的腳本sqoop-import、sqoop-export等。
generic:泛型。specific arguments:特定參數。
要控制每一個Sqoop工具的操做,就要使用泛型和特定參數。
例如:
導入數據的用法:
$ sqoop help import usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS] Common arguments: --connect <jdbc-uri> Specify JDBC connect string --connect-manager <class-name> Specify connection manager class to use --driver <class-name> Manually specify JDBC driver class to use --hadoop-mapred-home <dir> Override $HADOOP_MAPRED_HOME --help Print usage instructions --password-file Set path for file containing authentication password -P Read password from console --password <password> Set authentication password --username <username> Set authentication username --verbose Print more information while working --hadoop-home <dir> Deprecated. Override $HADOOP_HOME
通用Hadoop命令行參數:(必須在任何特定於工具的參數以前)
支持的通用選項是 -conf <配置文件>指定一個應用程序配置文件 -D <property = value>給定屬性的使用值 -fs <local | namenode:port>指定一個namenode -jt <local | jobtracker:port>指定做業跟蹤器 -files <逗號分隔的文件列表>指定要複製到地圖縮小集羣的逗號分隔文件 -libjars <逗號分隔的jar列表>指定要包含在classpath中的逗號分隔的jar文件。 -archives <逗號分隔的存檔列表>指定要在計算機上解除存檔的逗號分隔檔案。
通常的命令行語法是:
bin/hadoop command [genericOptions] [commandOptions]
必須提供通用的參數-conf,-D工具名稱後,依此類推,但以前的任何特定工具的參數(如--connect)。
注意:Hadoop參數前面是單個破折號字符(-),而特定於工具的參數則以兩個破折號(--)開頭,單個字符參數則是單個破折號,如-P。
-conf、-D、-fs和-jt參數控制配置Hadoop的服務器設置。
例如:-D mapred.job.name=<job_name>可用於設置Sqoop啓動的MR做業的名稱,若是未指定,名稱將默認爲做業的jar名稱 - 該名稱是從所使用的表名派生的。
這些-files、-libjars和-archives參數一般不用於Sqoop,但在Hadoop的內部包含這些參數解析系統。
官方釋義:
使用scoop的時候,命令行選項能夠放置到選項文件中。一個選項文件是一個文本文件,每一行標識一個選項,順序是選項出如今命令行的順序。
我的理解:
其實就是將常常重複使用的命令選項或者常常替換參數的命令選項寫到一個文件中,這樣既可重用,也實現瞭解耦。
要指定選項文件,只需建立一個選項文件。
1.選項文件容許一個選項存在於多行中,經過在中間行末尾使用反斜槓標識語句選項結束。
2.選項文件支持註解,在選項文件中以#字符開頭便可。註釋須要新起一行使用,不能和選項文本混寫。
3.選項文件中全部註釋和空行都會被忽略。
4.選項文件中開頭和結尾的空格被忽略。
5.選項文件中用「」標識的字符串中出現的空格是有效的,不會被忽略。引用的字符串不能超過行的範圍。
1.能夠在命令行中的任何位置指定選項文件,其中的選項遵循選項排序規則。
選項排序規則:
通用選項首先出現,接下來是工具特定的選項,最後是打算傳遞給子程序的選項。
2.經過--options-file參數將選項文件傳遞到命令行。
3.能夠在一個命令行中指定多個選項文件。調用選項文件須要寫出選項文件的全路徑。
例如:
用於導入的Sqoop命令:
$ sqoop import --connect jdbc:mysql://localhost/db --username foo --table TEST
使用選項文件命令以下:
$ sqoop --options-file /users/homer/work/import.txt --table TEST
選項文件/users/homer/work/import.txt包含如下內容:
import --connect jdbc:mysql://localhost/db --username foo
爲了便於閱讀,選項文件能夠有空行和註釋。所以,上述選項文件能夠有以下的形式:
# #Sqoop導入的選項文件 # #指定被調用的工具 import #鏈接參數和值:多行執行一個選項 --connect jdbc:mysql://localhost/db #用戶名參數和值 --username foo # #應該在命令行中指定剩餘選項。 #
Sqoop是相關工具的集合。要使用Sqoop,能夠指定要使用的工具以及控制該工具的參數。包含如下工具:
sqoop help工具:幫助工具。(上面已經作了介紹)
sqoop-import:單表導入。
sqoop-import-all-tables:多表導入。
sqoop-import-mainframe:PDS導入。
sqoop-export:數據導出。
validation:對數據進行驗證。
sqoop-job:建立和處理保存的做業。
sqoop-metastore:配置Sqoop爲元數據共享庫。
sqoop-merge:合併數據集。
sqoop-codegen:生成封裝和解釋導入記錄的Java類
sqoop-create-hive-table:基於先前導入數據,填充Hive matestore表。
sqoop-list-databases:列出可用的數據庫模式。
sqoop-list-tables:列出模式內的表。
sqoop-eval:基本的SQL執行shell。
sqoop-version:顯示Sqoop版本信息。
之後會陸續進行這些工具的具體介紹。