Sqoop的介紹和安裝
sqoop下載地址://share.weiyun.com/woVbfnfS
或者 //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