Sqoop的基础应用

news/2024/7/5 4:47:31

实验目的要求

  1. 了解ET了工具Sqoop;
  2. 学会安装配置Sqoop;
  3. 学会使用数据迁移框架Sqoop;
  4. 使用Sqoop导入MySQL到HDFS和Hive;
  5. 使用Sqoop导出HDFS数据到MySQL;

实验环境

  1. Java jdk 1.7;
  2. apache-maven-3.6.0;
  3. Myeclipse C10;
  4. CDH Hadoop集群;
  5. 已配置MySQL数据库;
  6. 已配置Sqoop工具;
  7. 具体规划:

主机名

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

出现的问题与解决方案

排错一

错误:导入指定查询语句的数据失败

排错思路:

  1. 查看日志分析原因;
  2. 根据报错提示分析

原因分析:参数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是否互通出错;

排错思路:

  1. 分析日志及错误原因;
  2. 分析错误提示

原因分析:缺少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 进行定制


http://lihuaxi.xjx100.cn/news/238348.html

相关文章

编码和编码格式一样吗?_学习如何像专业人士一样编码

编码和编码格式一样吗?Learn how to write more professional code from Dylan Israel. Dylan teaches about tools and principles to improve your code that hes found helpful in his job as a developer.从Dylan Israel了解如何编写更专业的代码。 Dylan教授有关改善您的…

区块链的分布式网络结构有哪些特点?

想知道更多区块链技术知识,请百度【链客区块链技术问答社区】 链客,有问必答!!区块链建立的物理网络基础是点对点的分布式网络,这与中心化的“客户端/服务器”网络架构有很大不同,它是一种去中心化的网络&a…

SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署

前言 本篇文章引导你使用Jenkins部署[SpringBoot项目],同时使用Docker和Git实现简单的持续集成和持续部署。(项目地址:sso-merryyou) 流程图如下: push代码到Github触发WebHook。(因网络原因,本篇使用gitee…

Spark的基础应用

目的要求 搭建Spark集群环境;Spark集群的启动、浏览与关闭;使用Eclipse编写Spark应用程序包;如何运行Spark任务; 实验环境 Java jdk 1.7;apache-maven-3.6.0;Eclipse;Apache_Hadoop集群&#…

以太坊中的安全代币案例

想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】 链客 ,有问必答!我在关于安全令代币(第一部分,第二部分)有争议的文章中,我提到过,以太坊可能不是长期执行安全代币…

mysql查看正在执行的sql语句

有2个方法: 1、使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。 -- use information_schema; -- show processlist; 或者: -- …

在Unity中创建3D直升机游戏

In this lecture from Colton Ogden, you can learn game development principles by coding a Helicopter Game 3D using Unity and C#. The principles you learn can apply to any programming language and any game.在Colton Ogden的本次演讲中,您可以通过使用…

最新Java面试题答案

JAVA基础 JAVA中的几种基本类型,各占用多少字节? 下图单位是bit,非字节 1B8bit String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改…