Sqoop的基础应用
實(shí)驗(yàn)?zāi)康囊?/strong>
- 了解ET了工具Sqoop;
- 學(xué)會(huì)安裝配置Sqoop;
- 學(xué)會(huì)使用數(shù)據(jù)遷移框架Sqoop;
- 使用Sqoop導(dǎo)入MySQL到HDFS和Hive;
- 使用Sqoop導(dǎo)出HDFS數(shù)據(jù)到MySQL;
實(shí)驗(yàn)環(huán)境
- Java jdk 1.7;
- apache-maven-3.6.0;
- Myeclipse C10;
- CDH Hadoop集群;
- 已配置MySQL數(shù)據(jù)庫(kù);
- 已配置Sqoop工具;
- 具體規(guī)劃:
| 主機(jī)名 | IP地址 | 服務(wù)描述 |
| Cmaster | 192.168.159.170 | 主控節(jié)點(diǎn) |
| Cslaver1 | 192.168.159.171 | 數(shù)據(jù)節(jié)點(diǎn) |
| Cslaver2 | 192.168.159.172 | 數(shù)據(jù)服務(wù) |
?
?
?
?
?
實(shí)驗(yàn)內(nèi)容
任務(wù)一: 啟動(dòng)CDH_Hadoop集群,并檢查sqoop工具;
1、進(jìn)入控制臺(tái)頁(yè)面;
2、啟動(dòng)相關(guān)組件;
?
?
任務(wù)二:使用Sqoop;
1、準(zhǔn)備MySQL數(shù)據(jù)庫(kù)數(shù)據(jù);
2、使用Sqoop測(cè)試與MySQL的連通;
命令:
sqoop import \
--connect jdbc:mysql://192.168.159.170:3306/sqoop \
--username root \
--password 123456 \
?
3、使用Sqoop導(dǎo)入MySQL數(shù)據(jù)到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、使用指定壓縮格式及存儲(chǔ)格式;
命令:
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、導(dǎo)入指定條件的數(shù)據(jù);
命令:
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、導(dǎo)入指定查詢語(yǔ)句的數(shù)據(jù);
命令:
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導(dǎo)出HDFS數(shù)據(jù)到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、導(dǎo)出指定字段
命令:
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、導(dǎo)出表示指定分隔符
命令:
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、批量導(dǎo)出
命令:
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導(dǎo)入MySQL數(shù)據(jù)到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、導(dǎo)入表的指定字段到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';
任務(wù)三:將常用的Sqoop腳本定義成作業(yè),方便其他人調(diào)用(因?yàn)榘姹締?wèn)題,此處使用sqoop2)
1、進(jìn)入sqoop-shell,創(chuàng)建MySQL數(shù)據(jù)庫(kù)連接;
2、查看連接信息;
3、創(chuàng)建HDFS文件系統(tǒng)連接;
命令:
>create link -connector hdfs-connector
4、創(chuàng)建數(shù)據(jù)傳輸服務(wù)(從MySQL到hdfs);
命令:
>create job f sqoop -t hdfs
5、啟動(dòng)job任務(wù);
命令:
>start job -n jobsqoop
6、查看job任務(wù)狀態(tài);
命令:
>status job -n jobsqoop
出現(xiàn)的問(wèn)題與解決方案
排錯(cuò)一:
錯(cuò)誤:導(dǎo)入指定查詢語(yǔ)句的數(shù)據(jù)失敗
排錯(cuò)思路:
- 查看日志分析原因;
- 根據(jù)報(bào)錯(cuò)提示分析
原因分析:參數(shù)query和table不能同時(shí)使用
解決方案:
命令:
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'
?
排錯(cuò)二:
錯(cuò)誤:測(cè)試sqoop1版本與mysql是否互通出錯(cuò);
排錯(cuò)思路:
- 分析日志及錯(cuò)誤原因;
- 分析錯(cuò)誤提示
原因分析:缺少jar包;
解決方案:在sqoop的lib目錄下加入所缺jar包,添加后正常;
知識(shí)拓展
?
sqoop 是 apache 旗下一款“Hadoop 和關(guān)系數(shù)據(jù)庫(kù)服務(wù)器之間傳送數(shù)據(jù)”的工具。
核心的功能有兩個(gè):
導(dǎo)入、遷入
導(dǎo)出、遷出
導(dǎo)入數(shù)據(jù):MySQL,Oracle 導(dǎo)入數(shù)據(jù)到 Hadoop 的 HDFS、HIVE、HBASE 等數(shù)據(jù)存儲(chǔ)系統(tǒng)
導(dǎo)出數(shù)據(jù):從 Hadoop 的文件系統(tǒng)中導(dǎo)出數(shù)據(jù)到關(guān)系數(shù)據(jù)庫(kù) mysql 等 Sqoop 的本質(zhì)還是一個(gè)命令行工具,和 HDFS,Hive 相比,并沒(méi)有什么高深的理論。
sqoop:工具:本質(zhì)就是遷移數(shù)據(jù), 遷移的方式:就是把sqoop的遷移命令轉(zhuǎn)換成MR程序
hive工具,本質(zhì)就是執(zhí)行計(jì)算,依賴于HDFS存儲(chǔ)數(shù)據(jù),把SQL轉(zhuǎn)換成MR程序
?
2. 工作機(jī)制
??? 將導(dǎo)入或?qū)С雒罘g成 MapReduce 程序來(lái)實(shí)現(xiàn) 在翻譯出的 MapReduce 中主要是對(duì) InputFormat 和 OutputFormat 進(jìn)行定制
總結(jié)
以上是生活随笔為你收集整理的Sqoop的基础应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 微服务项目的部署
- 下一篇: Spark的基础应用