Sqoop——將關係數據庫數據與hadoop數據進行轉換的工具

第一章 Sqoop是什麼

介紹

  • Apache Sqoop(TM)是一種旨在Apache Hadoop和結構化數據存儲(例如關係數據庫)之間高效傳輸批量數據的工具 (將關係數據庫(oracle、mysql、postgresql等)數據與hadoop數據進行轉換的工具)。

  • Sqoop於2012年3月成功地從孵化器畢業,現在是Apache的頂級項目

  • 最新的穩定版本是1.4.7。Sqoop2的最新版本爲1.99.7。請注意,1.99.7與1.4.7不兼容且功能不完整,因此不適用於生產部署。

  • 版本:(兩個版本完全不兼容,sqoop1使用最多)
    sqoop1:1.4.x
    sqoop2:1.99.x

  • 同類產品
    DataX:阿里頂級數據交換工具

  • 官網:http://sqoop.apache.org/

架構

sqoop架構非常簡單,是hadoop生態系統的架構最簡單的框架。
sqoop1由client端直接接入hadoop,任務通過解析生成對應的maprecue執行

在這裏插入圖片描述

Sqoop的輸入輸出/導入導出是相對於文件系統HDFS的, 因此HDFS的導入導出如圖1,圖2

圖1 導入
在這裏插入圖片描述

圖2 導出
在這裏插入圖片描述


第二章 Sqoop安裝

單機版安裝步驟:

1、解壓, 移動到相關目錄( 軟件及mysql驅動在底部分享 )
mv sqoop-env-template.sh sqoop-env.sh

2、配置環境變量 
export SQOOP_HOME=/XX/sqoop.xx
source /etc/profile

3、添加數據庫驅動包
cp mysql-connector-java-5.1.10.jar /sqoop-install-path/lib

4、重命名配置文件,修改配置內容(1)
注意: 如果前綴和這個文檔中的命名一致的話就不需要指定環境變量了, 如hive 和 hbase
mv sqoop-env-template.sh sqoop-env.sh
-----------------------------------------------------
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/chy/hadoop

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/chy/hadoop
-----------------------------------------------------



5、修改配置configure-sqoop(2 )
注意: 去掉未安裝服務相關內容;例如(HBase、HCatalog、Accumulo),這樣做是運行sqoop命令出現的警告
#if [ ! -d "${HBASE_HOME}" ]; then
#  echo "Error: $HBASE_HOME does not exist!"
#  echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#  exit 1

6、測試
sqoop version (3)
# 連接後的效果(4,5),可以看到mysql數據庫中的已經被sqoop連接
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123 


# 技巧: 連接mysql速度慢怎麼辦?
# 解決: 取消名稱檢測,提升訪問速度
vim /etc/my.cnf
------------------
skip-name-resolve

sqoop list-databases -connect jdbc:mysql://47.97.169.52:3307/ -username root -password root
圖1
在這裏插入圖片描述
圖2
在這裏插入圖片描述
圖3
在這裏插入圖片描述

圖4
在這裏插入圖片描述
圖5
在這裏插入圖片描述


第三章 Sqoop操作

在sqoop的docs目錄下,打開index,html即可查看官網內容
file:///F://spoop/sqoop-1.4.7.bin__hadoop-2.6.0/docs/SqoopUserGuide.html#_literal_sqoop_export_literal

連接操作

連接參數

# 直連,連接一次就會失效
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123 

# 通過自定義配置文件連接, 將需要導入或導出的參數寫在配置文件彙總
sqoop --options-file 自定義文件

在這裏插入圖片描述

導入操作

前提:因爲要使用MapReduce框架所以需要啓動DN和RM

# mr程序一直處於阻塞狀態需要查看nodemanager是否啓動成功
## 啓動NM
start-yarn.sh
##勿忘記啓動resourcemanager
yarn-daemon.sh start resourcemanager
## 8032 端口,resourcemanager

導入參數

在這裏插入圖片描述
演示案例

# 1. 編寫自定義啓動文件
[root@node4 sqoop]# vim option 
## 插入指定字段書寫方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--columns
id,browser_name
--table
dimension_browser
--delete-target-dir
-m
1
--target-dir
/sqoop/data
------------------------------

## 插入sql語句方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--delete-target-dir
-m
1
--target-dir
/sqoop/data
-e
select * from dimension_browser where $CONDITIONS
------------------------------

## 將數據導入到hive中
------------------------------
import
--connect
jdbc:mysql://47.97.169.52:3307/result_db
--username
root
--password
root
--as-textfile
--query
'select * from dimension_browser where $CONDITIONS'
--delete-target-dir
--target-dir
/sqoop/tmp
-m
1
--hive-import
--create-hive-table
--hive-table
browser
----------------------注意: 這裏如果無法自動建表,則需要我們在hive中創建對應的表,然後通過load data inpath '/sqoop/tmp/part-m-00000' into table browser;導入到hive數據中------------------------------




# 注意
## $CONDITIONS: -e情況下必須添加,類似mybatis的動態查詢
## 在有條寫的情況下格式 select * from dimension_browser where $CONDITIONS where id>20
# 3.運行測試
[root@node4 sqoop]# sqoop --options-file option
# 查看是否導入成功?是否生成了相關的文件,1
# 通過hive查看文件的內容,2

導入時出現異常的解決: ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

圖1
在這裏插入圖片描述
圖2
在這裏插入圖片描述

操作操作

導出參數

在這裏插入圖片描述

演示案例

# 導出到mysql
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser


# 導出到mysql 指定分隔符(導入同理)
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser
--input-fields-terminated-by
分隔符( eg: 逗號,頓號,^A.,\t..)

注意:
1.需要被導出的hdfs目錄下有數據 ,即需要結合導入一起使用
2.導出數據到mysql時, 需要在mysql創建對應的表 (字段類型名稱要匹配)


鏈接:https://pan.baidu.com/s/1P_BndD3_bmafHI_7tTVwPA
點贊私聊獲取提取碼哦~~~
提取碼:u7tb
複製這段內容後打開百度網盤手機App,操作更方便哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章