Sqoop安裝使用手冊_雲帆大資料

cloudyhadoop發表於2015-08-07

Sqoop安裝使用手冊


1. Sqoop介紹

Sqoop是一個用來將Hadoop和關係型資料庫中的資料相互轉移的工具,可以將一個關係型資料庫(例如:MySQL ,Oracle ,Postgres等)中的資料導進到Hadoop的HDFS中,也可以將HDFS的資料導進到關係型資料庫中。

2. 安裝配置

1. 環境準備

sqoop-1.4.3-cdh4.7.0.tar.gz
10.1.1.117  master //安裝好hadoop,hbase和hive。 

2. 安裝配置

在master節點上用hadoop使用者登陸,解壓Sqoop安裝包並配置環境變數。

複製sqoop-1.4.3-cdh4.7.0.tar.gz到/home/hadoop目錄,解壓:

$ tar -zxvf sqoop-1.4.3-cdh4.7.0.tar.gz 

複製mysql的jdbc庫mysql-connector-java.jar到~/sqoop-1.4.3-cdh4.7.0/lib。

修改~/.bashrc環境變數,在 .bashrc 的末尾插入以下變數:

export SQOOP_HOME=/home/hadoop/sqoop-1.4.3-cdh4.7.0
export PATH=$PATH:$SQOOP_HOME/bin 

儲存並更新~/.bashrc:

$ source ~/.bashrc 

3. 測試資料準備

在MySQL資料庫test建測試表hadoop_related並新增測試資料:

mysql> create table hadoop_related (id int, project varchar(20), version varchar(20), primary key (id));
mysql> INSERT INTO hadoop_related VALUES (1,'hadoop','2.0.0-cdh4.7.0'),
(2,'hbase','0.94.15-cdh4.7.0'),(3,'hive','0.10.0-cdh4.7.0'),
(4,'pig','0.11.0-cdh4.7.0'),    (5,'sqoop','1.4.3-cdh4.7.0'),
(6,'sqoop2','1.99.2-cdh4.7.0'),(7,'zookeeper','3.4.5-cdh4.7.0'), 
(8,'flumeng','1.4.0-cdh4.7.0'); 

4. 用Sqoop連線檢視資料庫

列出mysql資料庫中的所有資料庫

$ sqoop list-databases --connect jdbc:mysql://master/ --username hadoop --password 123456 

連線mysql並列出test資料庫中的表

$ sqoop list-tables --connect jdbc:mysql://master/test --username hadoop --password 123456 

5. 與Hadoop匯入匯出

1. 從資料庫匯出表的資料到HDFS上檔案

可以透過-m設定並行資料,即map的資料,決定檔案的個數。

預設目錄是/user/${user.name}/${tablename},可以透過–target-dir設定hdfs目標目錄。

$ hdfs dfs -mkdir -p /user/sqoop
$ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --target-dir /user/sqoop/hadoop_related -m 1 

2. 將hdfs上的資料匯入到關聯式資料庫中

目標表的表結構需要先建立出來,否則export操作會直接失敗。

mysql> create table hadoop_related_hdfs (id int, project varchar(20), version varchar(20), primary key (id));
$ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hdfs --export-dir /user/sqoop/hadoop_related 

驗證結果:

  1. 資料會首先寫到hadoop_related_hdfs_tmp表,匯入操作成功後,再由hadoop_related_hdfs_tmp表匯入到hadoop_related_hdfs結果表中,同時會清除hadoo_related_hdfs_tmp表。
  2. 如果有map失敗,則成功的map會將資料寫入tmp表,export任務失敗,同時tmp表的資料會被保留。
  3. 如果tmp中已有資料,則此export操作會直接失敗,可以使用–clear-staging-table指定在執行前清除中間表。

6. 匯入資料到Hbase

使用sqoop把mysql中資料匯入hbase中

$ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hbase-table hadoop_related --column-family related --hbase-create-table 

進入hbase shell

hbase(main):003:0> describe 'hadoop_related'
DESCRIPTION                                                       ENABLED
 'hadoop_related', {NAME => 'related', DATA_BLOCK_ENCODING => 'NO true
 NE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS =
 > '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '21474
 83647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_
 MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true
 '}
hbase(main):004:0> get 'hadoop_related' , '1'
COLUMN                     CELL
 related:id                timestamp=1438418082341, value=1
 related:project           timestamp=1438418082341, value=hadoop
 related:version           timestamp=1438418082341, value=2.0.0-cdh4.7.0 

關於將Hbase的資料匯入到mysql裡,Sqoop並不是直接支援的,一般採用如下3種方法:

  1. 將Hbase資料扁平化成HDFS檔案,然後再由Sqoop匯入.
  2. 將Hbase資料匯入Hive表中,然後再匯入mysql。
  3. 直接使用Hbase的Java API讀取表資料,直接向mysql匯入不需要使用Sqoop。

7. 與Hive匯入匯出

1. 從資料庫匯出表的資料到Hive

$ sqoop-import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related  --hive-table hadoop_related --create-hive-table --hive-import --hive-home /home/hadoop/hive-0.10.0-cdh4.7.0 

2. 將Hive上的資料匯入到關聯式資料庫中

將Hive中的表資料匯入到MySQL,MySQL中的目標表必須提前建立好。

mysql> create table hadoop_related_hive (id int, project varchar(20), version varchar(20), primary key (id));
$ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hive --export-dir /home/hadoop/hiveData/warehouse/hadoop_related/part-m-00000 --input-fields-terminated-by '1' 

8. sqoop-eval使用

eval可以很快的使用sql語句對資料庫進行操作,這使得使用者在執行import操作之前檢查sql語句是否正確。

$ sqoop eval --connect jdbc:mysql://192.168.56.1/test --username root --password 123456 --query "SELECT id, project, version FROM hadoop_related_hive LIMIT 10" 

9. 增量匯入

Sqoop提供了原生增量匯入的特性,包含以下三個關鍵引數:

Argument Description
–check-column (col) 指定一個“標誌列”用於判斷增量匯入的資料範圍,該列不能是字元型,最好是數字或者日期型(這個很好理解吧)。
–last-value (value) 指定增量模式,包含“追加模式” append 和“最後修改模式” lastmodified (該模式更滿足常見需求)。
–last-value (value) 指定“標誌列”上次匯入的上界。如果“標誌列”是最後修改時間,則–last-value為上次執行匯入指令碼的時間。

結合Saved Jobs機制,可以實現重複排程增量更新Job時 –last-value 欄位的自動更新賦值,再結合cron或者oozie的定時排程,可實現真正意義的增量更新。

增量job的建立:

$ sqoop job --create SqoopIncre -- import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hive-import --hive-table hadoop_related_incre --incremental append --check-column id --last-value 0 

執行Job:

$ sqoop job --exec SqoopIncre

轉載請註明:雲帆大資料學院 ? Sqoop安裝使用手冊

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29918394/viewspace-1765025/,如需轉載,請註明出處,否則將追究法律責任。

相關文章