1. 程式人生 > >Sqoop-簡介及安裝

Sqoop-簡介及安裝

1、Sqoop 簡介

Apache Sqoop(TM)是一種旨在有效地在Apache Hadoop和諸如關係資料庫等結構化資料儲存之間傳輸大量資料的工具。

Sqoop於2012年3月孵化出來,現在是一個頂級的Apache專案。最新的穩定版本是1.4.6。Sqoop2的最新版本是1.99.7。

Sqoop(SQL-to-Hadoop)是一個在結構化資料和Hadoop之間進行批量資料遷移的工具,結構化資料可以是Mysql、Oracle等RDBMS。Sqoop底層用MapReduce程式實現抽取、轉換、載入,MapReduce天生的特性保證了並行化和高容錯率,而且相比Kettle等傳統ETL工具,任務跑在Hadoop叢集上,減少了ETL伺服器資源的使用情況。在特定場景下,抽取過程會有很大的效能提升。

如果要用Sqoop,必須正確安裝並配置Hadoop,因依賴於本地的hadoop環境啟動MR程式;mysql、oracle等資料庫的JDBC驅動也要放到Sqoop的lib目錄下。

2、Sqoop 原理

將匯入或匯出命令翻譯成 mapreduce 程式來實現。

在翻譯出的 mapreduce 中主要是對 inputformat 和 outputformat 進行定製。

3、Sqoop 安裝

安裝 Sqoop 的前提是已經具備 Java 和 Hadoop 的環境。

3.1、下載並解壓

1) 最新版下載地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/

2) 上傳安裝包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到虛擬機器中,如我的上傳目錄是: /opt/software 

3) 解壓 sqoop 安裝包到指定目錄,如:

3.2、修改配置檔案

Sqoop 的配置檔案與大多數大資料框架類似,在 sqoop 根目錄下的 conf 目錄中。

1) 重新命名配置檔案

2) 修改配置檔案 sqoop-env.sh

3)修改/etc/profile

注:sqoop-1.4.6.bin__此處2個下劃線.

source /etc/profile使生效.

3.3、拷貝JDBC驅動

拷貝 jdbc 驅動到 sqoop 的 lib 目錄下,如:

3.4、驗證Sqoop

我們可以通過某一個 command 來驗證 sqoop 配置是否正確:bin/sqoop help

問題:在命令列執行sqoop,提示:
Error: Could not find or load main class org.apache.sqoop.Sqoop

解決辦法:

將sqoop解壓後根目錄下的sqoop-1.4.6.jar拷貝到~/hadoop-2.7.2/share/hadoop/hdfs/lib下即可。

出現一些 Warning 警告(警告資訊已省略),並伴隨著幫助命令的輸出:

3.5、測試 Sqoop 是否能夠成功連線資料庫

同樣需要將mysql驅動包拷貝到~/hadoop-2.7.2/share/hadoop/hdfs/lib下。

4、Sqoop 的簡單使用案例

4.1、匯入資料

在 Sqoop 中,“匯入”概念指:從非大資料叢集(RDBMS)向大資料叢集(HDFS,HIVE, HBASE)中傳輸資料,叫做:匯入,即使用 import 關鍵字。

4.1.1、RDBMS 到 HDFS

1)、在 Mysql 中新建一張表並插入一些資料

2)匯入資料

(1)全部匯入:

注:--前面都有空格, \為換行。

(2)查詢匯入:

注:must contain '$CONDITIONS' in WHERE clause。

如果 query 後使用的是雙引號,則$CONDITIONS 前必須加轉移符,防止 shell 識別為自己的變數。

--query 選項,不能同時與--table 選項使用。

(3)匯入指定列:

注:columns 中如果涉及到多列,用逗號分隔,分隔時不要新增空格

(4)使用 sqoop 關鍵字篩選查詢匯入資料:

注:在 Sqoop 中可以使用 sqoop import -D property.name=property.value 這樣的方式加 入執行任務的引數,多個引數用空格隔開。

4.1.2、RDBMS 到 Hive

注:該過程分為兩步,第一步將資料匯入到 HDFS,第二步將匯入到 HDFS 的資料遷移到 Hive 倉庫。

第一步預設的臨時目錄是/user/root/表名。

執行過程可以看到如下:第二步是遷移到hive倉庫。

4.2、匯出資料

在 Sqoop 中,“匯出”概念指:從大資料叢集(HDFS,HIVE,HBASE)向非大資料叢集 (RDBMS)中傳輸資料,叫做:匯出,即使用 export 關鍵字。

4.2.1、HIVE/HDFS 到 RDBMS

4.3、指令碼打包

使用 opt 格式的檔案打包 sqoop 命令,然後執行

1) 建立一個.opt 檔案:

$ mkdir opt

$ touch opt/job_HDFS2RDBMS.opt

2) 編寫 sqoop 指令碼:

$ vi opt/job_HDFS2RDBMS.opt

3) 執行該指令碼:

$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt