Sqoop的基础应用
實驗目的要求
- 了解ET了工具Sqoop;
- 學會安裝配置Sqoop;
- 學會使用數據遷移框架Sqoop;
- 使用Sqoop導入MySQL到HDFS和Hive;
- 使用Sqoop導出HDFS數據到MySQL;
實驗環境
- Java jdk 1.7;
- apache-maven-3.6.0;
- Myeclipse C10;
- CDH Hadoop集群;
- 已配置MySQL數據庫;
- 已配置Sqoop工具;
- 具體規劃:
| 主機名 | IP地址 | 服務描述 |
| Cmaster | 192.168.159.170 | 主控節點 |
| Cslaver1 | 192.168.159.171 | 數據節點 |
| Cslaver2 | 192.168.159.172 | 數據服務 |
?
?
?
?
?
實驗內容
任務一: 啟動CDH_Hadoop集群,并檢查sqoop工具;
1、進入控制臺頁面;
2、啟動相關組件;
?
?
任務二:使用Sqoop;
1、準備MySQL數據庫數據;
2、使用Sqoop測試與MySQL的連通;
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
?
3、使用Sqoop導入MySQL數據到HDFS;
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
--table emp -m 1 \
--columns "empno,ename,job,sal,comm" \
--target-dir emp_column \
--delete-target-dir
?
?
4、使用指定壓縮格式及存儲格式;
命令:
sqoop import \
> --connect jdbc:mysql://192.168.159.170:3306/sqoop \
> --username root \
> --password 123456 \
> --table emp \
> -m 1 \
> --columns "empno,ename,job,sal,comm" \
> --target-dir emp_parquet \
> --delete-target-dir \
> --as-parquetfile \
> --compression-codec org.apache.hadoop.io.compress.SnappyCodec
?
5、使用指定分隔符;
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
--table emp -m 1 \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir emp_colimn_split \
--delete-target-dir \
--fields-terminated-by '\t' \
--lines-terminated-by '\n'
6、導入指定條件的數據;
命令:
sqoop import? \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
--table emp -m 1 \
--columns "EMPNO,ENAME,JOB,SAL,COMM" \
--target-dir emp_colimn_where \
--delete-target-dir \
--where 'SAL>2000'
7、導入指定查詢語句的數據;
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--passw 123456 \
--target-dir emp_column_query \
--delete-target-dir \
--query 'select * from emp where EMPNO>=7900 and $CONIONS' \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' -m 1 \
--split-by 'emp'
?
8、使用Sqoop導出HDFS數據到MySQL;
命令:
>create table emp_demo as select * from emp where 1=2;
命令:
$hdfs dfs -mkdir -p /usr/hadoop/emp
命令:
sqoop export \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
--table emp_demo \
--export-dir /usr/hadoop/emp -m 1
?
9、導出指定字段
命令:
hdfs dfs -mkdir -p /usr/hadoop/emp_colum
hdfs dfs -ls /usr/hadoop/
命令:
sqoop export \
> --connect jdbc:mysql://192.168.159.170:3306/sqoop \
> --username root \
> --password 123456 \
> --table emp_demo \
> --columns "EMPNO,ENAME,JOB,SAL,COMM" \
> --export-dir /usr/hadoop/emp_colum -m 1
?
?
10、導出表示指定分隔符
命令:
hdfs dfs -mkdir -p /usr/hadoop/emp_column_split
hdfs dfs -ls /usr/hadoop/
?
命令:
sqoop export \
> --connect jdbc:mysql://192.168.159.170:3306/sqoop \
> --username root \
> --password 123456 \
> --table emp_demo \
> --columns "EMPNO,ENAME,JOB,SAL,COMM" \
> --export-dir /usr/hadoop/emp_column_split \
> --fields-terminated-by '\t' \
> --lines-terminated-by '\n' -m 1
11、批量導出
命令:
sqoop export \
> -Dsqoop.export.records.pre.statement=10 \
> --connect jdbc:mysql://192.168.159.170:3306/sqoop \
> --username root \
> --password 123456 \
> --table emp_demo \
> --export-dir /usr/hadoop/emp -m 1
12、使用Sqoop導入MySQL數據到Hive中
命令:
sqoop create-hive-table \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
--table emp \
--hive-table emp_import
13、導入表的指定字段到Hive中
命令:
create table emp_column(empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int) row format delimited fields terminated by '\t' lines terminated by '\n';
任務三:將常用的Sqoop腳本定義成作業,方便其他人調用(因為版本問題,此處使用sqoop2)
1、進入sqoop-shell,創建MySQL數據庫連接;
2、查看連接信息;
3、創建HDFS文件系統連接;
命令:
>create link -connector hdfs-connector
4、創建數據傳輸服務(從MySQL到hdfs);
命令:
>create job f sqoop -t hdfs
5、啟動job任務;
命令:
>start job -n jobsqoop
6、查看job任務狀態;
命令:
>status job -n jobsqoop
出現的問題與解決方案
排錯一:
錯誤:導入指定查詢語句的數據失敗
排錯思路:
- 查看日志分析原因;
- 根據報錯提示分析
原因分析:參數query和table不能同時使用
解決方案:
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--passw 123456 \
--target-dir emp_column_query \
--delete-target-dir \
--query 'select * from emp where EMPNO>=7900 and $CONIONS' \
--fields-terminated-by '\t' \
--lines-terminated-by '\n' -m 1 \
--split-by 'emp'
?
排錯二:
錯誤:測試sqoop1版本與mysql是否互通出錯;
排錯思路:
- 分析日志及錯誤原因;
- 分析錯誤提示
原因分析:缺少jar包;
解決方案:在sqoop的lib目錄下加入所缺jar包,添加后正常;
知識拓展
?
sqoop 是 apache 旗下一款“Hadoop 和關系數據庫服務器之間傳送數據”的工具。
核心的功能有兩個:
導入、遷入
導出、遷出
導入數據:MySQL,Oracle 導入數據到 Hadoop 的 HDFS、HIVE、HBASE 等數據存儲系統
導出數據:從 Hadoop 的文件系統中導出數據到關系數據庫 mysql 等 Sqoop 的本質還是一個命令行工具,和 HDFS,Hive 相比,并沒有什么高深的理論。
sqoop:工具:本質就是遷移數據, 遷移的方式:就是把sqoop的遷移命令轉換成MR程序
hive工具,本質就是執行計算,依賴于HDFS存儲數據,把SQL轉換成MR程序
?
2. 工作機制
??? 將導入或導出命令翻譯成 MapReduce 程序來實現 在翻譯出的 MapReduce 中主要是對 InputFormat 和 OutputFormat 進行定制
總結
以上是生活随笔為你收集整理的Sqoop的基础应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微服务项目的部署
- 下一篇: Spark的基础应用