一:在hadoop3.3中安裝配置sqoop1.4.7
前言:
sqoop功能已經非常完善了,沒有什么可以更新的了,官方停止更新維護了,因此官方集成的hadoop包停留在了2.6.0版本,在hadoop3.3.0版本會提示類版本過低錯誤,但純凈版sqoop有缺少必須的第三方庫,所以將這兩個包下載下來,提取部分sqoop_hadoop2.6.0版本的jar包放到純凈版sqoop的lib目錄下,在sqoop組態檔中加入獲取當前環境中的hive及hadoop的lib庫來使用.
配置sqoop1.4.7 支持hadoop3.3
1:下載sqoop1.4.7的兩個版本
http://archive.apache.org/dist/sqoop/1.4.7
sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz # 只用到里面的jar包
sqoop-1.4.7.tar.gz # 上傳到服務器
2:提取sqoop-1.4.7.bin__hadoop-2.6.0根目錄下的sqoop-1.4.7.jar放到sqoop-1.4.7根目錄,正常純凈版sqoop是沒有這個jar包的
3:提取lib目錄下的這三個必須的jar包放到sqoop-1.4.7/lib/目錄下,正常純凈版sqoop的lib目錄下是沒有檔案的,

4:提取出sqoop-1.4.6.jar放在hadoop的lib下
添加sqoop配置資訊,參考hadoop,hive的lib庫
sqoop-1.4.7/conf 目錄下的sqoop-env.sh檔案追加如下資訊
export HADOOP_COMMON_HOME=/export/server/hadoop-3.3.0 export HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.0 export HIVE_HOME=/export/server/apache-hive-3.1.2-bin export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
添加sqoop環境變數
在/etc/profile 中添加
export SQOOP_HOME=/export/server/sqoop/ export PATH=$PATH:$SQOOP_HOME/bin:$SQOOP_HOME/bin
二:sqoop 常見的使用方式
sqoop的資料匯入操作
1:sqoop help 查看幫助檔案命令
2:查看資料庫中的所有表
sqoop list-tables \ --connect jdbc:mysql://192.168.52.150:3306/hue \ --username root \ --password 123456
3:如何將MySQL中的資料全量的匯入到HDFS中(全量)
命令1: sqoop import \ --connect jdbc:mysql://192.168.50.150:3306/test \ --username root \ --password root \ --table emp 說明: 默認情況下, 會將資料匯入到操作sqoop用戶的HDFS的家目錄下,在此目錄下會創建一個以匯入表的表名為名稱檔案夾, 在此檔案夾下莫每一條資料會運行一個mapTask, 資料的默認分隔符號為 逗號 思考: 是否更改其默認的位置呢? sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp \ --delete-target-dir \ --target-dir '/sqoop_works/emp_1' 思考: 是否調整map的數量呢? sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp \ --delete-target-dir \ --target-dir '/sqoop_works/emp_2' \ --split-by id \ -m 2 思考: 是否調整默認分隔符號呢? 比如調整為 \001 sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp \ --fields-terminated-by '\001' \ --delete-target-dir \ --target-dir '/sqoop_works/emp_3' \ -m 1View Code
4:將MySQL中的資料全量的匯入到hive中
以emp_add 表為例 第一步: 在HIVE中創建一個目標表 create database hivesqoop; use hivesqoop; create table hivesqoop.emp_add_hive( id int, hno string, street string, city string ) row format delimited fields terminated by '\t' stored as orc ; 第二步: 通過sqoop完成資料匯入操作 sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp_add \ --hcatalog-database hivesqoop \ --hcatalog-table emp_add_hive \ -m 1View Code
5:如何將MySQL中的資料條件的匯入到HDFS中
方式一: 通過 where的方式 sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp \ --where 'id > 1205' \ --delete-target-dir \ --target-dir '/sqoop_works/emp_2' \ --split-by id \ -m 2 方式二: 通過SQL的方式 sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --query 'select deg from emp where 1=1 AND \$CONDITIONS' \ --delete-target-dir \ --target-dir '/sqoop_works/emp_4' \ --split-by id \ -m 1 注意: 如果SQL陳述句使用 雙引號包裹, $CONDITIONS前面需要將一個\進行轉義, 單引號是不需要的View Code
6:如何通過條件的方式匯入到hive中 (后續模擬增量匯入資料)
sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp_add \ --where 'id > 1205' \ --hcatalog-database hivesqoop \ --hcatalog-table emp_add_hive \ -m 1 或者: sqoop import \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --query 'select * from emp_add where id>1205 and $CONDITIONS' --hcatalog-database hivesqoop \ --hcatalog-table emp_add_hive \ -m 1View Code
sqoop的資料匯出操作
需求: 將hive中 emp_add_hive 表資料匯出到MySQL中
# 第一步: 在mysql中創建目標表 (必須創建) create table test.emp_add_mysql( id INT , hno VARCHAR(32) NULL, street VARCHAR(32) NULL, city VARCHAR(32) NULL ); # 第二步: 執行sqoop命令匯出資料 sqoop export \ --connect jdbc:mysql://192.168.52.150:3306/test \ --username root \ --password 123456 \ --table emp_add_mysql \ --hcatalog-database hivesqoop \ --hcatalog-table emp_add_hive \ -m 1
sqoop相關常用引數
| 引數 | 說明 |
|---|---|
| --connect | 連接關系型資料庫的URL |
| --username | 連接資料庫的用戶名 |
| --password | 連接資料庫的密碼 |
| --driver | JDBC的driver class |
| --query或--e <statement> | 將查詢結果的資料匯入,使用時必須伴隨參--target-dir,--hcatalog-table,如果查詢中有where條件,則條件后必須加上關鍵字,如果使用雙引號包含,則?CONDITIONS前要加上\以完成轉義:$CONDITIONS |
| --hcatalog-database | 指定HCatalog表的資料庫名稱,如果未指定,default則使用默認資料庫名稱,提供 --hcatalog-database不帶選項--hcatalog-table是錯誤的, |
| --hcatalog-table | 此選項的引數值為HCatalog表名,該--hcatalog-table選項的存在表示匯入或匯出作業是使用HCatalog表完成的,并且是HCatalog作業的必需選項, |
| --create-hcatalog-table | 此選項指定在匯入資料時是否應自動創建HCatalog表,表名將與轉換為小寫的資料庫表名相同, |
| --hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")' \ | 建表時追加存盤格式到建表陳述句中,tblproperties修改表的屬性,這里設定orc的壓縮格式為SNAPPY |
| -m | 指定并行處理的MapReduce任務數量, -m不為1時,需要用split-by指定分片欄位進行并行匯入,盡量指定int型, |
| --split-by id | 如果指定-split by, 必須使用$CONDITIONS關鍵字, 雙引號的查詢陳述句還要加\ |
| --hcatalog-partition-keys --hcatalog-partition-values | keys和values必須同時存在,相當于指定靜態磁區,允許將多個鍵和值提供為靜態磁區鍵,多個選項值之間用,(逗號)分隔,比如: --hcatalog-partition-keys year,month,day --hcatalog-partition-values 1999,12,31 |
| --null-string '\N' --null-non-string '\N' | 指定mysql資料為空值時用什么符號存盤,null-string針對string型別的NULL值處理,--null-non-string針對非string型別的NULL值處理 |
| --hive-drop-import-delims | 設定無視字串中的分割符(hcatalog默認開啟) |
| --fields-terminated-by '\t' |
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/548937.html
標籤:大數據
