sqoop下載地址:https://share.weiyun.com/woVbfnfS
或者 https://archive.apache.org/dist/sqoop/1.99.7/
一、Sqoop簡介
sqoop 是 apache 旗下一款“Hadoop 和關聯式資料庫伺服器之間傳送資料”的工具。
核心的功能有兩個:匯入、匯出
匯入資料:MySQL,Oracle 匯入資料到 Hadoop 的 HDFS、HIVE、HBASE 等資料儲存系統
匯出資料:從 Hadoop 的檔案系統中匯出資料到關聯式資料庫 mysql 等
sqoop本質是遷移資料, 遷移的方式:就是把sqoop的遷移命令轉換成MR程式
hive本質就是執行計算,依賴於HDFS儲存資料,把SQL轉換成MR程式
二、Sqoop的安裝
(1) 解壓到指定目錄:
tar -zxvf /bigData/software/sqoop-1.99.7-bin-hadoop200.tar.gz -C /bigData/install/
(2) 修改mapreduce.configuration.directory的目錄
cd /bigData/install/sqoop-1.99.7-bin-hadoop200/conf/
修改sqoop.properties檔案 修改org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/bigData/install/hadoop-3.1.4/etc/hadoop/配置
(3)配置環境變數
新增export SQOOP_HOME=/bigData/install/sqoop-1.99.7-bin-hadoop200,在PATH路徑下新增$SQOOP_HOME/bin路徑。
(4)新增mysql驅動 將mysql驅動包放在sqoop安裝目錄的server/lib目錄下。
ll |grep mysql
(5) 驗證配置
① sqoop2-tool upgrade
若出現“Caused by: java.lang.SecurityException: sealing violation: package org.apache.derby.impl.jdbc.authentication is sealed”錯誤。
需要檢視/bigData/install/sqoop-1.99.7-bin-hadoop200/bin目錄下的derby版本資訊和hive目錄下的版本資訊做對比。
將sqoop目錄下的derby重新命名
cd /bigData/install/sqoop-1.99.7-bin-hadoop200/server/lib/
mv derby-10.8.2.2.jar derby-10.8.2.2.jar.back
hive目錄下的derby庫複製過來。
cp /bigData/install/apache-hive-3.1.2-bin/lib/derby-10.14.1.0.jar ./
使用 如下命令檢視 版本是否正確
ll *derby*
再次輸入如下命令,驗證
sqoop2-tool upgrade
② 繼續驗證 sqoop2-tool verify
若出現“Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V”錯誤,
需要對比hive與sqoop目錄下的guava庫的版本:
cd /bigData/install/apache-hive-3.1.2-bin/lib
ll *guava*
檢視sqoop下的guava版本,發現當前sqoop使用的guava版本均為11.0.2,需要修改:
cd /bigData/install/sqoop-1.99.7-bin-hadoop200
find . -name *guava*
將名稱修改掉:mv ./tools/lib/guava-11.0.2.jar xxxxxxxxx/guava-11.0.2.jar.back
然後將hive下的guava複製到sqoop目錄下:cp ./server/lib/guava-27.0-jre.jar xxx/
② 繼續驗證 sqoop2-tool verify
三、啟動服務端/客戶端
- 啟動命令
sqoop2-server start
-
關閉命令 sqoop2-server stop
檢視程式資訊:
開啟cli客戶端命令:sqoop2-shell
四、使用
1、登入mysql,建立對應的資料庫和表:
create database test;
use test;
CREATE TABLE student( id int, name varchar(10), PRIMARY KEY(id ));
insert into student values(1,'gqx');
insert into student values(2,'LiSi');
insert into student values(3,'WangWu');
select * from student;
2、準備hdfs實驗資料
$ vim test01.txt
4,'Alice',
5,'Bob'
$ hdfs dfs -put test01.txt /
3、修改hadoop配置
為了能檢視sqoop2 status,編輯hadoop的 mapred-site.xml
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
新增如下配置
<property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <property>
4、建立連結配置
列舉所有連線:show connector
建立hdfs的連線: create link --connector hdfs-connector
建立mysql的連線:create link --connector generic-jdbc-connector
檢視已經建好的link
5、建立job
sqoop:000>create job -f jdbc-link01 -t hdfs-link01
Creating job for links with from name jdbc-link01 and to name hdfs-link01
Please fill following values to create new job object
Name: jdbctohdfs01 (#job名字,必填)
Database source
Schema name: dbtest1 (#資料庫名字,必填)
Table name: test1 (#資料表名字,必填)
SQL statement: (#就是sql查詢語句,可選的,直接回車就好)
Column names: (# 重寫資料相關的一些引數,可選,直接回車就好)
There are currently 0 values in the list:
element#
Partition column: (#分割的列,也就是將最終檔案分割為多個,預設匯入到一個檔案)
Partition column nullable:
Boundary query:
Incremental read
Check column:
Last value:
Target configuration
Override null value:
Null value:
File format: (#檔案格式,這裡選擇0,TEXT_FILE)
0 : TEXT_FILE
1 : SEQUENCE_FILE
2 : PARQUET_FILE
Choose: 0
Compression codec: (#壓縮編碼器,這裡不壓縮,選擇0)
0 : NONE
1 : DEFAULT
2 : DEFLATE
3 : GZIP
4 : BZIP2
5 : LZO
6 : LZ4
7 : SNAPPY
8 : CUSTOM
Choose: 0
Custom codec: (#自定義的編碼器,這裡也不需要,直接回車)
Output directory: /hdfstest1 (#輸出hdfs路徑,必填切目錄下必須為空,可以為沒有建的目錄)
Append mode: (#用於指定是否是在已存在匯出檔案的情況下將新資料追加到資料檔案中。可選回車)
Throttling resources
Extractors: (#可選,對應 mapreduce 的 job 中 map 的數量。這裡直接回車)
Loaders: (#可選,對應 mapreduce 的 job 中的 reduce 的數量。這裡直接回車)
Classpath configuration
Extra mapper jars:
There are currently 0 values in the list:
element# (# Classpath配置,如:需要新增任務額外的jar包,這裡直接回車)
Job was successfully updated with status OK