【头歌】Sqoop数据导入 - 详解

这篇具有很好参考价值的文章主要介绍了【头歌】Sqoop数据导入 - 详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【提示】点击目录每一关参考答案可以快速复制。

目录

第1关:Sqoop数据导入语法学习

任务描述

相关知识

编程要求

测试说明

参考答案

第2关:Mysql导入数据至HDFS上

任务描述

相关知识

编程要求

测试说明

参考答案 

第3关:Mysql导入数据至Hive中

任务描述

相关知识

编程要求

测试说明

参考答案


第1关:Sqoop数据导入语法学习

任务描述

本关任务:学习Sqoop 导入( import )的基本参数并配置好环境。

相关知识

为了完成本关任务,你需要掌握: 1、Sqoop 导入( import )的基本参数。 2、配置环境。 注意:本关实训 Sqoop 的安装与配置建立在 Hadoop 、 Hive 、 MySQL 已安装配置好的情况下。

Sqoop 的基本参数

Sqoop 能够让 Hadoop 上的 HDFS 和 Hive 跟关系型数据库之间进行数据导入与导出,多亏了importexport这两个工具。本实训主要是针对import(导入)来讲。 现如今我们一直储放数据都是在关系数据库中,但是数据量到达一定的规模后,我们需要数据清理加分析,如果使用关系数据库我们工作量会大大提高,这个时候我们就可以将数据从关系数据库导入(import)到Hadoop平台上进行处理。

我们要学 Sqoop 的导入也必须先知道里面的基本参数。

输入sqoop help import可以查看里面参数含义,但是是英文,接下来选取几个常见的参数来分析:

选项 含义说明
--connect <jdbc-uri> 指定JDBC连接字符串
--driver <class-name> 指定要使用的JDBC驱动程序类
--hadoop-mapred-home <dir> 指定$HADOOP_MAPRED_HOME路径
-P 从控制台读取输入的密码
--username <username> 设置认证用户名
--password <password> 设置认证密码
--verbose 打印详细的运行信息
--as-textfile 将数据导入到普通文本文件(默认)
--delete-target-dir 如果指定目录存在,则先删除掉
--direct 使用直接导入模式(优化导入速度)
--num-mappers <n>(简写:-m) 使用n个map任务并行导入数据
--query <statement>(简写:-e) 导入的查询语句
--split-by <column-name> 指定按照哪个列去分割数据
--table<table-name> 导入的源表表名
--target-dir <dir> 导入HDFS的目标路径
--warehouse-dir <dir> HDFS存放表的根路径

配置环境

注意:如果这个环境不配置的话,可能会造成后续关卡不能正常实现。 1、启动Hadoop。

start-all.sh

【头歌】Sqoop数据导入 - 详解

2、Hive 连接 MySQL 初始化。

schematool -dbType mysql -initSchema

【头歌】Sqoop数据导入 - 详解

编程要求

在右侧命令行进行操作: 1.启动Hadoop服务; 2.Hive 连接 MySQL 初始化。

测试说明

完成操作后点击评测,通关后测试集输出:

Hadoop平台已开启
default

参考答案

#以下为命令行


start-all.sh

schematool -dbType mysql -initSchema

第2关:Mysql导入数据至HDFS上

任务描述

本关任务:利用 Sqoop 工具将 MySQL 中的数据导入到 HDFS 中来。

相关知识

为了完成本关任务,你需要掌握:

1、数据库( MySQL )建表。

2、Mysql 数据导入至 HDFS 中。

数据库( MySQL )建表

用命令进入 MySQL 客户端。

mysql -uroot -p123123 -h127.0.0.1

【头歌】Sqoop数据导入 - 详解

创建数据库hdfsdb(格式默认为utf8),并在数据库内建立表student,其表结构如下:

状态
stu_no int 主键
stu_name varchar(20) 学生姓名
stu_age int 学生年龄

在表内插入数据。

stu_no stu_name stu_age
202001 zhangsan 18
202002 lisi 19
202003 wangwu 20

检查是否成功。

【头歌】Sqoop数据导入 - 详解

MySQL数据导入至HDFS中

1、简单导入。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student

这里没有指定 HDFS 的目录 默认会将数据存到系统当前登录用户下 以表名称命名的文件夹下。

【头歌】Sqoop数据导入 - 详解

系统默认为逗号隔开,如下图:

【头歌】Sqoop数据导入 - 详解

注意:如果数据库没有设置主键,语法需要加上--split by指定一个列去分割或用-m 1指定一个 Map 任务。

2、指定 HDFS 目录/user/root/hdfsdb导入,指定一个 MapReduce 任务。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --usernameroot --password 123123 --table student --target-dir /user/root/hdfsdb -m 1
  • --target-dir:指定 HDFS 目录。
  • -m 1:指定一个 MapReduce 任务。 

    【头歌】Sqoop数据导入 - 详解

3、指定查询学生的学号与学生姓名存入到/user/root/hdfsdb2中,指定一个MapReduce 任务,并以|分隔。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_no, stu_name from student where $CONDITIONS' --target-dir /user/root/hdfsdb2 --fields-terminated-by '|' -m 1
  • --query:通过用 sql 语句来将数据导入,where $CONDITIONSquery中固定语法,不可删去。
  • --fields-terminated-by:数据通过什么来隔开。

【头歌】Sqoop数据导入 - 详解

编程要求

根据上述,将 MySQL 数据库hdfsdb中的表数据导入至HDFS中,要求如下:

  • 指定 HDFS 目录/user/root/hdfsdb3
  • 查询学生姓名与年龄。
  • 指定一个 Mapreduce 任务。
  • 存储以-来分割。

测试说明

点击测评,当你的结果与预期输出一致时,即为通过。

zhangsan-18
lisi-19
wangwu-20

参考答案 

#以下为命令行内容


mysql -uroot -p123123 -h127.0.0.1
#以下为MySQL内容



#创建hdfsdb数据库
create database hdfsdb;

#切换hdfsdb数据库
use hdfsdb;

#创建student表
create table student(stu_no int primary key,stu_name varchar(20),stu_age int);

#插入三条数据
insert into `student` values(202001,'zhangsan',18);
insert into `student` values(202002,'lisi',19);
insert into `student` values(202003,'wangwu',20);

exit;
#以下为命令行内容


#MySQL数据导入至HDFS中-简单导入
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student

#指定 HDFS 目录/user/root/hdfsdb导入,指定一个 MapReduce 任务
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student --target-dir /user/root/hdfsdb -m 1

#指定查询学生的学号与学生姓名存入到/user/root/hdfsdb2中,指定一个MapReduce任务,并以“|”分隔
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_no, stu_name from student where $CONDITIONS' --target-dir /user/root/hdfsdb2  --fields-terminated-by '|' -m 1

#编程实现内容
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_name,stu_age from student where $CONDITIONS' --target-dir /user/root/hdfsdb3  --fields-terminated-by '-' -m 1

第3关:Mysql导入数据至Hive中

任务描述

本关任务:利用 Sqoop 工具将 MySQL 中的数据导入到 Hive 中来。

相关知识

为了完成本关任务,你需要掌握:MySQL 数据导入至 Hive 中。

MySQL 数据导入至Hive

1、直接导入。 我们可以使用上一关的数据库,如果没有的话,需要重新创建。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student  --hive-import  -m1  --hive-table test

这里会发生一个报错,如图:

【头歌】Sqoop数据导入 - 详解

解决方法 这里缺少了hive-common-3.1.0.jar包,我们在 Hive 的lib目录下,拷贝到 Sqoop 的lib目录下即可。

cp /opt/hive/lib/hive-common-3.1.0.jar /opt/sqoop-1.4.7.bin__hadoop-2.6.0/lib/

这边输出文件经过上次已经创建好了,所以我们要不自己手动删除,要不用sqoop参数: --delete-target-dir:如果输出文件存在,则先删除。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student  --hive-import --delete-target-dir  -m1  --hive-table test

成功之后我们可以通过hive来查看是否成功传输。

【头歌】Sqoop数据导入 - 详解

2、通过传输至HDFS上,Hive再从HDFS导入数据。 MySQL数据导入至Hive。

sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student -m 1

Hive依据格式建表。

hive> create table test1(
> stu_no int,stu_name string,stu_age int)
> row format delimited
> fields terminated by ",";

从HDFS导入数据。

load data inpath '/user/root/student/part-m-00000' into table test1;

【头歌】Sqoop数据导入 - 详解

查看是否成功。

编程要求

将学生年龄大于20的学生信息放入Hive表test2中,要求如下:

  • 指定一个Mapreduce任务。
  • 指定分隔符为,

测试说明

点击测评,当你的结果与预期输出一致时,即为通过。 

202003,wangwu,20

参考答案

##确认没有重置命令行,没有超时清空,上一关的数据库还在
##如果重置过命令行,请先按顺序重做以下注释内容(粘贴到本地代码编辑器以VSCode为例,将BEGIN到END内容复制到本地编辑器,快捷键Ctrl+/取消一层注释):

##----------------BEGIN----------------

## 命令行
#start-all.sh
#schematool -dbType mysql -initSchema
#mysql -uroot -p123123 -h127.0.0.1

## MYSQL

#create database hdfsdb;
#use hdfsdb;
#create table student(stu_no int primary key,stu_name varchar(20),stu_age int);
#insert into `student` values(202001,'zhangsan',18);
#insert into `student` values(202002,'lisi',19);
#insert into `student` values(202003,'wangwu',20);
#exit;

## 命令行

#sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student
#sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student --target-dir /user/root/hdfsdb -m 1
#sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_no, stu_name from student where $CONDITIONS' --target-dir /user/root/hdfsdb2  --fields-terminated-by '|' -m 1
#sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_name,stu_age from student where $CONDITIONS' --target-dir /user/root/hdfsdb3  --fields-terminated-by '-' -m 1

##-----------------END-----------------


#以下为命令行


#MySQL 数据导入至Hive
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student  --hive-import  -m1  --hive-table test

#报错缺少了hive-common-3.1.0.jar包,复制到 Sqoop 的lib目录下
cp /opt/hive/lib/hive-common-3.1.0.jar /opt/sqoop-1.4.7.bin__hadoop-2.6.0/lib/

#再次执行导入(上次执行的若存在先删除)
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student  --hive-import --delete-target-dir  -m1  --hive-table test

#成功之后我们可以通过hive来查看是否成功转输
hive
--以下为hive


--查看表
show tables;

--出现上一关的数据则成功导入
select * from test;

exit;
#以下为命令行


#通过传输至HDFS上,Hive再从HDFS导入数据
sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --table student -m 1

hive
--以下为hive


create table test1(
stu_no int,stu_name string,stu_age int)
row format delimited
fields terminated by ",";

--从HDFS导入数据
load data inpath '/user/root/student/part-m-00000' into table test1;

--查看是否成功
select * from test1;

--编程要求
#将学生年龄大于20的学生信息放入Hive表test2中,要求如下:
----指定一个Mapreduce任务。
----指定分隔符为‘,’。

--创建test2表
create table test2(
stu_no int,stu_name string,stu_age int)
row format delimited
fields terminated by ",";

exit;
 
#以下为命令行


sqoop import --connect jdbc:mysql://127.0.0.1:3306/hdfsdb --username root --password 123123 --query 'select stu_no, stu_name,stu_age from student where stu_age>=20 and $CONDITIONS' --target-dir /user/root/hdfsdb6   --fields-terminated-by ',' -m 1

hive
--以下为hive


load data inpath '/user/root/hdfsdb6/part-m-00000' into table test2;

至此,所有内容都完成辣。如果存在任何问题欢迎大佬指教🥰!文章来源地址https://www.toymoban.com/news/detail-464197.html

到了这里,关于【头歌】Sqoop数据导入 - 详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sqoop数据导入到Hive表的最佳实践

    将数据从关系型数据库导入到Hive表是大数据领域中的常见任务之一,Sqoop是一个强大的工具,可以帮助实现这一目标。本文将提供Sqoop数据导入到Hive表的最佳实践,包括详细的步骤、示例代码和最佳建议,以确保数据导入过程的高效性和可维护性。 Sqoop是一个开源工具,用于

    2024年01月23日
    浏览(33)
  • sqoop把hive中的数据导入mysql

    记录简单案例 首先开启集群: 在hive中建库建表,并插入一条数据来为自己做实验: 验证一下,是否插入成功: 在mysql中建表,并且要与hive中传过来的数据字段相对应: 建表后为空: 用sqoop将hive中的数据传到mysql中: export 导出数据, –connect 连接数据库的参数, –userna

    2024年02月07日
    浏览(70)
  • 大数据 | (五)通过Sqoop实现从MySQL导入数据到HDFS

    各位CSDN的朋友们大家好!这篇文章是在困扰了我三天(甚至更久),经过不断尝试与踩坑总结出来的通过 Sqoop 从Mysql数据库导入数据到 Hadoop hdfs 的详细笔记与感想,希望能帮助到大家!本篇文章收录于 初心 的 大数据 专栏。 🏠 个人主页:初心%个人主页 🧑 个人简介:大家

    2024年02月04日
    浏览(28)
  • 使用sqoop将hive数据库导入至mysql

    前言:本文由实现此博客过程中遇到的问题及解决办法整理而成。博客:淘宝双11数据分析与预测课程案例-步骤三:将数据从Hive导入到MySQL_厦大数据库实验室 数据 数据放在 /usr/local/data/comment.csv 数据来源于:Amazon Reviews: Unlocked Mobile Phones | Kaggle 大数据开发环境 软件 版本 had

    2024年02月05日
    浏览(34)
  • 【Hadoop】通过Sqoop实现从MySQL导入数据到HDFS

    各位CSDN的朋友们大家好!这篇文章是在困扰了我三天(甚至更久),经过不断尝试与踩坑总结出来的通过 Sqoop 从Mysql数据库导入数据到 Hadoop hdfs 的详细笔记与感想,希望能帮助到大家!本篇文章收录于 初心 的 大数据 专栏。 🏠 个人主页:初心%个人主页 🧑 个人简介:大家

    2024年02月06日
    浏览(47)
  • [sqoop]将hive查询后的数据导入到MySQL

    一、知识点 export:将Hive的表导入到mysql叫导出 搜了很多,发现sqoop在hive导出到mysql时 1)不支持where参数对数据进行过滤。 2)不支持指定hive表的方式导出,只能指定Hive目录进行导出。 二、操作 1、在MySQL中建表 2、在hive中建表 3、将hive表导入到Mysql对应的表

    2024年02月15日
    浏览(32)
  • MySQL中的业务数据该如何正确导入到Hive中 - Sqoop

    水善利万物而不争,处众人之所恶,故几于道💦   1. 使用Sqoop脚本将MySQL中的数据迁移到HDFS   2. 在Hive中建立与之对应的表   3. 将HDFS中的数据load到 Hive 数仓的ODS层的表中 1 . 使用Sqoop 将 MySQL中的数据导入到HDFS上 使用示例: mysql_to_hdfs.sh all 2021-02-01 导出的数据用lzo压缩,并

    2024年02月11日
    浏览(37)
  • 基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

    Hive介绍: Hive是建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的语言(HQL),可以对大规模数据集进行查询和分析。通过Hive,我们可以在分布式存储系统中进行复杂的数据处理和分析。 Sqoop简介: Sqoop是一个用于在Apache Hadoop和关系型数据库之间传输数据的工具。

    2024年04月13日
    浏览(32)
  • 【Sqoop】MySQL表导入Hive

    用 Sqoop 将 MySQL 指定数据库指定的表导入Hive 的指定数据库

    2024年02月03日
    浏览(31)
  • sqoop(DataX)-MySQL导入HIVE时间格问题

    用公司的大数据平台(DataX)导数,已经开发上线一个多月的一批报表,突然有同事说有个报表数据不准。出在时间字段上。 分析: 1、先看了原数据MySQL字段类型为datetime,目标字段为timestamp类型; 2、经发现所有时间的差距都是8小时,怀疑是因为时区转换的原因; 3、对比其他

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包