大資料學習筆記(十四)-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
- 大資料學習筆記(十七)-MapReduce大資料筆記
- 大資料學習筆記(十八)-MRUnit大資料筆記
- 大資料學習筆記(十五)-大資料排程框架大資料筆記框架
- angular學習筆記(十四)-$watch(1)Angular筆記
- angular學習筆記(十四)-$watch(2)Angular筆記
- angular學習筆記(十四)-$watch(3)Angular筆記
- angular學習筆記(十四)-$watch(4)Angular筆記
- 大資料教程分享Actor學習筆記大資料筆記
- 大資料之 Hadoop學習筆記大資料Hadoop筆記
- 電商大資料學習筆記:理論大資料筆記
- 電商大資料學習筆記:實戰大資料筆記
- 大資料學習筆記(十三)-Hive高階大資料筆記Hive
- 【大資料】— sqoop ?大資料OOP
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- Java學習筆記——第十四天Java筆記
- JavaWeb學習筆記——第十四天JavaWeb筆記
- 資料庫學習筆記資料庫筆記
- 大資料學習(hbase,hive,sqoop2對資料的簡單操作)大資料HiveOOP
- 電商大資料學習筆記:使用者畫像大資料筆記
- Swift學習筆記(三十四)——函式型別Swift筆記函式型別
- 大資料學習筆記500條【第一彈】,記得收藏!大資料筆記
- PHP 資料加密 (學習筆記)PHP加密筆記
- MySQL資料庫學習筆記MySql資料庫筆記
- 資料結構學習筆記資料結構筆記
- AS 學習筆記 載入資料筆記
- 大資料學習筆記之十二 雲端計算資源管理大資料筆記
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 大資料測試學習筆記之測試工具集大資料筆記
- Redis學習筆記(七) 資料庫Redis筆記資料庫
- 資料結構學習筆記--棧資料結構筆記
- 資料結構學習筆記1資料結構筆記
- 達夢資料庫學習筆記資料庫筆記