大資料學習筆記(十四)-Sqoop
1.版本
sqoop1為1.4.6以前的版本(包括)
sqoop2為1.4.6以後的版本(不包括)
sqoop1與sqoop2的構架是不同的
2.sqoop配置
conf/sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
3.把MySQL驅動拷貝到lib資料夾下
[hadoop@hadoop000 lib]$ cp ~/software/mysql-connector-java-5.1.27-bin.jar ./
4.操作sqoop
①檢視MySQL中的資料庫
[hadoop@hadoop000 bin]$ ./sqoop list-databases \
> --connect jdbc:mysql://localhost:3306 \
> --username root \
> --password root
②檢視MySQL中的表
./sqoop list-tables \
--connect jdbc:mysql://localhost:3306/hive \
--username root \
--password root
③使用sqoop將MySQL中的資料匯入Hadoop中
sqoop import匯入時報java.lang.ClassNotFoundException: org.json.JSONObject
錯誤 解決方法,將java-json.jar放到sqoop的lib目錄下
下載java-json.jar包:
http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1
檔案會儲存在hdfs上/user/使用者名稱/表名下
17/12/25 17:13:11 ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop000:8020/user/hadoop/EMP already exists
檔案已存在異常的解決方法
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1 \
--delete-target-dir
設定Job名稱
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1 \
--delete-target-dir \
--mapreduce-job-name FromMySQLToHDFS
map的數量設定,一個表的資料不要超過3到5分鐘
指定匯入的column和輸出的目錄
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1 \
--delete-target-dir \
--mapreduce-job-name FromMySQLToHDFS \
--columns "EMPNO,ENAME,JOB" \
--target-dir EMP_COLUMN
以parquet格式輸出
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1 \
--delete-target-dir \
--mapreduce-job-name FromMySQLToHDFS \
--columns "EMPNO,ENAME,JOB" \
--as-parquetfile \
--target-dir EMP_COLUMN
條件匯入方式一,where條件子句過濾
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP -m 1 \
--delete-target-dir \
--mapreduce-job-name FromMySQLToHDFS \
--columns "EMPNO,ENAME,JOB,SAL" \
--where "SAL > 2000" \
--target-dir EMP_COLUMN
條件匯入方式二,使用–query或–e匯入SQL的執行結果
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
-m 2 \
--delete-target-dir \
--mapreduce-job-name FromMySQLToHDFS \
--query 'SELECT * FROM EMP where SAL > 2000 AND $CONDITIONS' \
--target-dir EMP_COLUMN \
--split-by 'EMPNO'
使用option file實現資料匯入
emp.opt
import
--connect
jdbc:mysql://localhost:3306/project
--username
root
--password
root
-m
2
--delete-target-dir
--mapreduce-job-name
FromMySQLToHDFS
--query
'SELECT * FROM EMP where SAL > 2000 AND $CONDITIONS'
--target-dir
EMP_OPT
--split-by
'EMPNO'
執行命令
sqoop --options-file emp.opt
④從hdfs匯入到關係型資料庫(MySQL)當中
MySQL資料庫中要先建表
sqoop export \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP_DEMO \
--export-dir /user/hadoop/EMP_OPT \
-m -1
匯入指定的列
sqoop export \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
--table EMP_DEMO -m 1 \
--mapreduce-job-name FromHDFSToMySQL \
--columns "EMPNO,ENAME,JOB,SAL" \
--export-dir /user/hadoop/EMP_COLUMN
資料的匯入匯出可以指定自定義的分隔符,分隔符指定錯誤會導致匯入匯出作業失敗。
⑤從關係型資料庫(MySQL)匯入資料到Hive中
自動建表(此方式不推薦,因為有可能資料型別不正確)
sqoop import \
--connect jdbc:mysql://localhost:3306/project \
--username root \
--password root \
-m 1 \
--table EMP \
--delete-target-dir \
--hive-import \
--create-hive-table \
--hive-table emp_import
報錯解決方法:
將hive/lib下的hive-shims*.jar 拷貝到sqoop/lib資料夾下
將hive/lib下的hive-common.jar拷貝到sqoop/lib資料夾下
⑥使用shell封裝ETL
相關文章
- hive學習筆記之八:SqoopHive筆記OOP
- 大資料之 Hadoop學習筆記大資料Hadoop筆記
- 【大資料】— sqoop ?大資料OOP
- 大資料教程分享Actor學習筆記大資料筆記
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- 2020-09-27【學習筆記】【企業資料湖】五、基於Apache Sqoop的批量資料獲取筆記ApacheOOP
- 資料庫學習筆記資料庫筆記
- JavaWeb學習筆記——第十四天JavaWeb筆記
- Java學習筆記——第十四天Java筆記
- 學習筆記(三十四):ArkUi-Divider (分隔)筆記UIIDE
- 學習筆記(十四):ArkUi-單選框 (Radio)筆記UI
- PHP 資料加密 (學習筆記)PHP加密筆記
- 1029學習筆記 資料庫筆記資料庫
- 資料結構學習筆記資料結構筆記
- python學習筆記:資料庫Python筆記資料庫
- MySQL資料庫學習筆記MySql資料庫筆記
- 大資料學習筆記500條【第一彈】,記得收藏!大資料筆記
- 20202.9.29課堂筆記(Sqoop介紹及資料遷移)筆記OOP
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 大資料測試學習筆記之測試工具集大資料筆記
- 資料結構學習筆記1資料結構筆記
- Redis學習筆記(七) 資料庫Redis筆記資料庫
- 資料結構學習筆記--棧資料結構筆記
- 達夢資料庫學習筆記資料庫筆記
- Python 學習筆記——資料型別Python筆記資料型別
- 基於python的大資料分析實戰學習筆記-AnacondaPython大資料筆記
- java大資料最全課程學習筆記(5)--MapReduce精通(一)Java大資料筆記
- 好程式設計師大資料學習筆記:Storm架構程式設計師大資料筆記ORM架構
- 大資料學習筆記之Hadoop安裝步驟詳解大資料筆記Hadoop
- 小王的學習筆記(十四)——vue資料渲染、事件處理、表單輸入與繫結筆記Vue事件
- opencv學習筆記四十四:移動物件統計OpenCV筆記物件
- 學習筆記(二十四):ArkUi-網格 (Grid/GridItem)筆記UI
- Python學習筆記(一) 資料型別Python筆記資料型別
- 機器學習筆記——資料集分割機器學習筆記
- swoft 學習筆記之資料庫操作筆記資料庫
- Docker學習筆記:映象、容器、資料卷Docker筆記
- 資料結構學習筆記-堆排序資料結構筆記排序