【头歌】Sqoop 操作 HBase - 详解

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

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

目录

第1关:Sqoop 在HBase中导入

任务描述

相关知识

编程要求

测试说明

参考答案

第2关:Sqoop 在HBase中导出

任务描述

相关知识

编程要求

测试说明

参考答案


第1关:Sqoop 在HBase中导入

任务描述

本关任务:在右侧命令行中,导入 sql 文件至 MySQL 中并使用 Sqoop 工具将 MySQL 中的数据导入至 HBase 。

相关知识

为了完成本关任务,你需要掌握: 1.Sqoop 命令与操作

Sqoop 命令

Sqoop 支持 HDFS 和 Hive 之外的其他导入目标。Sqoop 还可以将记录导入到 HBase 中的表中。

参数名称 参数含义
--column-family <family> 设置导入的目标列族
--hbase-create-table 如果指定,则创建缺少的 HBase 表
--hbase-row-key <col> 指定要用作行键的输入列,如果输入表包含复合键,则 <col> 必须采用单个的形式,逗号分隔的组合键列表属性
--hbase-table <table-name> 指定要用作目标的 HBase 表名而不是 HDFS
--hbase-bulkload 启用批量加载

通过指定--hbase-table,您指示 Sqoop 导入到 HBase 中的表而不是 HDFS 中的目录。Sqoop 会将数据导入到指定为 的参数的表中--hbase-table。输入表的每一行都会转化为一个HBase Put操作到输出表的一行。每行的键取自输入的一列。默认情况下,Sqoop 将使用 split-by 列作为行键列。如果未指定,它将尝试识别源表的主键列(如果有)。您可以使用 手动指定行键列--hbase-row-key。每个输出列都将放置在同一个列族中,必须用--column-family.

如果输入表有复合键,则--hbase-row-key必须采用逗号分隔的复合键属性列表的形式。在这种情况下,HBase 行的行键将通过使用下划线作为分隔符组合复合键属性的值来生成。注意:只有--hbase-row-key在指定了参数的情况下,Sqoop 导入表才能使用复合键。

如果目标表和列族不存在,则 Sqoop 作业将退出并显示错误。您应该在运行导入之前创建目标表和列族。如果指定--hbase-create-table,Sqoop 将使用 HBase 配置中的默认参数创建目标表和列族(如果它们不存在)。

Sqoop 当前通过将每个字段转换为其字符串表示形式(就像您以文本模式导入到 HDFS 一样)将所有值序列化到 HBase,然后在目标单元格中插入此字符串的 UTF-8 字节。Sqoop 将跳过除行键列之外的所有列中包含空值的所有行。

为了减少 hbase 上的负载,Sqoop 可以进行批量加载而不是直接写入。要使用批量加载,请使用--hbase-bulkload

MySQL 导入至 HBase

MySQL 中有一张 student 表,表数据如下:

【头歌】Sqoop 操作 HBase - 详解

1.进入 HBase 客户端,创建一个列族 为 info表名为 student 的表。

create 'student','info'

【头歌】Sqoop 操作 HBase - 详解

2.使用 Sqoop 将 MySQL 数据导入 HBase 表 student 中。

sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://127.0.0.1/test --username root --password 123123 --table student --hbase-table student  --column-family info --hbase-row-key stu_no -m 1

【头歌】Sqoop 操作 HBase - 详解

成功执行后,显示。

3.查询 HBase 表 student 是否成功导入数据;

【头歌】Sqoop 操作 HBase - 详解

数据已经成功导入至 HBase 中了。总结:

1.导入至 HBase 中时,最好是先在 HBase 中创建好表,否则导入时会报 HBase 找不到表。 2.导入命令中加上 Map Task 数目(-m),可以更好、更快的执行程序。

编程要求

根据相关知识,在右侧命令行中完成 MySQL 数据成功导入至 HBase 中,具体操作如下: 1.启动服务

  • 启动 Hadoop、MySQL、ZooKeeper、HBase服务,命令已经写在 sh 文件中了,执行 shell 脚本启动所有服务;

    sh /data/workspace/myshixun/service.sh
  • 如果服务全部启动,输入jsp 查看服务进程

    【头歌】Sqoop 操作 HBase - 详解

2.将 MySQL 数据导入至 HBase 表中

  • 导入 SQL 至 MySQL 中
mysql -uroot -p123123 < /data/workspace/myshixun/step1/1.sql
  • 进入 HBase 客户端创建表 tb_class 列族为 info
  • 使用 Sqoop 将 MySQL 中 School 数据库的 tb_class 表中的数据导入至 HBase 中 tb_class 表中。

测试说明

评测时,需要开启各个服务,点击评测后,平台脚本会查看 HBase 中的 tb_class 表数据,查询的表数据与以下结果一致则可通关。

 1 column=info:course, timestamp=1628590952274, value=Chinese
 1 column=info:id, timestamp=1628590952274, value=1
 1 column=info:name, timestamp=1628590952274, value=Emma
 1 column=info:score, timestamp=1628590952274, value=86
 2 column=info:course, timestamp=1628590952274, value=Chinese
 2 column=info:id, timestamp=1628590952274, value=2
 2 column=info:name, timestamp=1628590952274, value=Mary
 2 column=info:score, timestamp=1628590952274, value=79
 3 column=info:course, timestamp=1628590952274, value=Chinese
 3 column=info:id, timestamp=1628590952274, value=3
 3 column=info:name, timestamp=1628590952274, value=Allen
 3 column=info:score, timestamp=1628590952274, value=92
 4 column=info:course, timestamp=1628590952274, value=English
 4 column=info:id, timestamp=1628590952274, value=4
 4 column=info:name, timestamp=1628590952274, value=Emma
 4 column=info:score, timestamp=1628590952274, value=116
 5 column=info:course, timestamp=1628590952274, value=English
 5 column=info:id, timestamp=1628590952274, value=5
 5 column=info:name, timestamp=1628590952274, value=Mary
 5 column=info:score, timestamp=1628590952274, value=95
 6 column=info:course, timestamp=1628590952274, value=English
 6 column=info:id, timestamp=1628590952274, value=6
 6 column=info:name, timestamp=1628590952274, value=Allen
 6 column=info:score, timestamp=1628590952274, value=100
6row(s)

参考答案

#命令行


#启动 Hadoop、MySQL、ZooKeeper、HBase服务,命令已经写在 sh 文件中了,执行 shell 脚本启动所有服务
sh /data/workspace/myshixun/service.sh

#输入jps查看服务进程是否全部启动
jps

#导入 SQL 至 MySQL 中
mysql -uroot -p123123 < /data/workspace/myshixun/step1/1.sql 

#进入hbase
hbase shell
#以下为HBase Shell


#创建一个列族为 info 表名为 student 的表
create 'tb_class','info'

#查看表
list

#Ctrl + C 退出 HBase Shell
#命令行


#使用 Sqoop 将 MySQL 数据导入 HBase 表 student 中
sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://127.0.0.1/school --username root --password 123123 --table tb_class --hbase-table tb_class  --column-family info --hbase-row-key id -m 1

#查看是否成功
hbase shell
#以下为HBase Shell


#查询 HBase 表 student 是否成功导入数据
scan 'tb_class'

#Ctrl + C 退出 HBase Shell

第2关:Sqoop 在HBase中导出

任务描述

本关任务:在右侧命令行中,完成 HBase 数据导入至 MySQL中。

相关知识

HBase 数据无法直接导出至 MySQL ,需要在 Hive 进行中转,其流程图如下:

【头歌】Sqoop 操作 HBase - 详解

数据准备

在 HBase shell 添加数据:

create 'book','info'
put 'book',1,'info:id',01
put 'book',1,'info:name','Hamlet'
put 'book',1,'info:author','William Shakespeare'
put 'book',1,'info:price',32
put 'book',2,'info:id',02
put 'book',2,'info:name','nahan'
put 'book',2,'info:author','luxun'
put 'book',2,'info:price',27

添加数据后,使用 scan 查看表数据:

【头歌】Sqoop 操作 HBase - 详解

创建 Hive 外部表

创建 test 数据库,并在数据库中创建 h_book 外部表,将 HBase 表book 数据导入进来。

create database test;
CREATE EXTERNAL TABLE test.h_book (key int,id int,name string,author string,price int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
":key,info:id, info:name,info:author,info:price"
)
TBLPROPERTIES( "hbase.table.name" = "book",
"hbase.mapred.output.outputtable" = "book");

【头歌】Sqoop 操作 HBase - 详解

Hive 创建内部表

外部表创建后需要创建内部表 book。

CREATE TABLE test.book(key int,id int,name string,author string,price int)row format delimited fields terminated by ',' stored as textfile;

【头歌】Sqoop 操作 HBase - 详解

将外部表数据导入至内部表 book 中,可以方便使用 Sqoop 更好的导入至 MySQL 中。

insert overwrite table test.book select * from test.h_book;

【头歌】Sqoop 操作 HBase - 详解

MySQL 创建表

MySQL 创建 test 数据库和 book 表。

create database test;

create table test.book(rowkey int(11),id int(11),name varchar(20),author varchar(20),price int(11),primary key (id));

【头歌】Sqoop 操作 HBase - 详解

使用 Sqoop 导出数据至 MySQL 中

将 Hive 内部表 book 的数据导出至 MySQL 表 book 中。

sqoop export -connect jdbc:mysql://127.0.0.1:3306/test -username root -password 123123 -table book --fields-terminated-by ',' --export-dir /opt/hive/warehouse/test.db

【头歌】Sqoop 操作 HBase - 详解

dir 参数可以通过 hadoop fs -ls / 命令来查看数据文件存放位置

【头歌】Sqoop 操作 HBase - 详解

最后查看 MySQL 中表 book 是否存在数据导入。

mysql -uroot -p123123 -e "select * from test.book;"

【头歌】Sqoop 操作 HBase - 详解

至此使用 Sqoop 导出 HBase 数据结束。

编程要求

根据相关知识操作,完成一次使用 Sqoop 将数据从 HBase 导出至 MySQL 中。

1.数据通过 HBase 生成导入 Hive 数据仓库,在导出至 MySQL 中。

2.需要导入 MySQL 的数据库为 book。

测试说明

评测时,需要开启各个服务,点击评测后,平台脚本会查看 MySQL 中的 book 表数据,查询的表数据与以下结果一致则可通关。

mysql: [Warning] Using a password on the command line interface can be insecure.
rowkey id name author price
1 1 Hamlet William Shakespeare 32
2 2 nahan luxun 27

参考答案

#命令行


hbase shell
#以下为HBase Shell


#在 HBase shell 添加数据
create 'book','info'
put 'book',1,'info:id',01
put 'book',1,'info:name','Hamlet'
put 'book',1,'info:author','William Shakespeare'
put 'book',1,'info:price',32
put 'book',2,'info:id',02
put 'book',2,'info:name','nahan'
put 'book',2,'info:author','luxun'
put 'book',2,'info:price',27

#查看数据
scan 'book'

#Ctrl + C 退出 HBase Shell
#命令行


#创建 Hive 外部表
hive
--以下为hive


--创建 test 数据库,并在数据库中创建 h_book 外部表,将 HBase 表book 数据导入进来
create database test;
CREATE EXTERNAL TABLE test.h_book (key int,id int,name string,author string,price int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
"hbase.columns.mapping" =
":key,info:id, info:name,info:author,info:price"
)
TBLPROPERTIES( "hbase.table.name" = "book",
"hbase.mapred.output.outputtable" = "book");

--外部表创建后需要创建内部表 book
CREATE TABLE test.book(key int,id int,name string,author string,price int)row format delimited fields terminated by ',' stored as textfile;

--将外部表数据导入至内部表 book 中
insert overwrite table test.book select * from test.h_book;

quit;
#命令行


#进入MySQL
mysql -uroot -p123123
#以下为MySQL


#MySQL 创建 test 数据库和 book 表
create database test;
create table test.book(rowkey int(11),id int(11),name varchar(20),author varchar(20),price int(11),primary key (id));

quit;
#命令行


#将 Hive 内部表 book 的数据导出至 MySQL 表 book 中
sqoop export -connect jdbc:mysql://127.0.0.1:3306/test -username root -password 123123 -table book --fields-terminated-by ',' --export-dir /opt/hive/warehouse/test.db/book

#dir 参数可以通过 hadoop fs -ls / 命令来查看数据文件存放位置
hadoop fs -ls /
hadoop fs -ls /opt
hadoop fs -ls /opt/hive
hadoop fs -ls /opt/hive/warehouse
hadoop fs -ls /opt/hive/warehouse/test.db

#最后查看 MySQL 中表 book 是否存在数据导入
mysql -uroot -p123123 -e "select * from test.book;"

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

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

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

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

相关文章

  • 【头歌】HBase综合测试

    任务描述 使用 HBase shell 命令创建表: exam_tb1 ,向表中添加数据,表的数据与结构如下: 相关知识 略 编程要求 根据右侧窗口命令行内的提示,在 Begin - End 区域内进行命令行语句补充。 测试说明 本关需要你在命令行中启动 hbase ,并使用 hbase shell 操作命令行,操作完之后点

    2024年02月11日
    浏览(38)
  • HBase 伪分布式环境搭建 - 头歌

    mkdir /app cd /opt tar -zxvf hbase-2.1.1-bin.tar.gz -C /app cd /app cd hbase-2.1.1 cd conf echo $JAVA_HOME /usr/lib/jvm/jdk1.8.0_111 vim hbase-env.sh 进入文件,找到下图中红色框框内的路径,将#去掉,把=号后面的路径改成/usr/lib/jvm/jdk1.8.0_111。注意:记得先按A,才能改。 按esc键,输入  :wq  ,回车。 vim hb

    2024年04月28日
    浏览(41)
  • 头歌 HBase 性能优化:优化拆分和合并

    1. source /etc/profile 2. 3. start - all . sh zkServer . sh start start - hbase.sh    进入终端界面 hbase shell create \\\'stu\\\' ,{ NAME = \\\'info\\\' },{ NAME = \\\'desc\\\' }, SPLITS =   [ \\\'1000\\\' , \\\'2000\\\' , \\\'3000\\\' , \\\'4000\\\' , \\\'5000\\\'] put \\\'stu\\\' , \\\'15653216541\\\' , \\\'info:num\\\' , \\\'14561235651\\\' put \\\'stu\\\' , \\\'15653216541\\\' , \\\'info:s_name\\\' , \\\'cg\\\' put \\\'stu\\\' , \\\'15653216541\\\' ,

    2024年04月14日
    浏览(62)
  • 【hadoop】hbase的安装部署以及相关操作(图文详解)

    ​ HBase是一种基于列存储的分布式数据库系统,它能够快速地存储和处理大规模数据。与传统的关系型数据库不同,HBase采用了分布式的架构,能够实现数据的高可靠性、高可扩展性和高性能。在实际应用中,正确地安装和部署HBase集群是非常重要的。 在安装hbase之前,需要虚

    2024年02月04日
    浏览(45)
  • 解决一个Sqoop抽数慢的问题,yarn的ATSv2嵌入式HBASE崩溃引起

     新搭建的一个Hadoop环境,用Sqoop批量抽数的时候发现特别慢,我们正常情况下是一个表一分钟左右,批量抽十几个表,也就是10分钟的样子,结果发现用了2个小时: 查看yarn日志  发现有如下情况: 主要有两个情况:  1.有大量的等待日志: Waiting for AsyncDispatcher to drain.Thre

    2024年02月14日
    浏览(30)
  • Sqoop【实践 01】Sqoop1最新版 MySQL与HDFS\Hive\HBase 核心导入导出案例分享+多个WRAN及Exception问题处理(一篇即可学会在日常工作中使用Sqoop)

    1️⃣ 查看所有命令【 sqoop help 】 2️⃣ 查看某条命令的具体使用方法【 sqoop help COMMAND 】 查询MySQL所有数据库,通常用于 Sqoop 与 MySQL 连通测试: 【具体参数可以使用 sqoop help list-databases 查看】实例: 结果: 【2个】WARN处理: 查询指定数据库中所有数据表,这里要注意一下

    2024年03月18日
    浏览(49)
  • 头歌大数据——HBase 伪分布式环境搭建

    第1关:HBASE伪分布式环境搭建 编程要求 好了,到你啦,你需要先按照上次实训——HBase单节点安装的方式将 HBase 安装在 /app 目录下,然后根据本关知识配置好伪分布式的 HBase ,最后点击测评即可通关。 测试说明 程序会检测你的 HBase 服务和 Hadoop 服务是否启动,以及伪分布

    2024年02月08日
    浏览(74)
  • Hadoop环境下HBase的安装部署与操作指南(图文详解)

    本文详细介绍了在Hadoop集群环境下HBase的安装部署步骤及相关操作,包括准备环节、版本兼容性检查、IP及IP映射修改、上传并解压安装包、配置HBASE_HOME等关键步骤,图文结合,为初学者和开发者提供一站式解决方案。

    2024年04月27日
    浏览(52)
  • 基于Hadoop的MapReduce网站日志大数据分析(含预处理MapReduce程序、hdfs、flume、sqoop、hive、mysql、hbase组件、echarts)

    需要本项目的可以私信博主!!! 本项目包含:PPT,可视化代码,项目源码,配套Hadoop环境(解压可视化),shell脚本,MapReduce代码,文档以及相关说明教程,大数据集! 本文介绍了一种基于Hadoop的网站日志大数据分析方法。本项目首先将网站日志上传到HDFS分布式文件系统

    2024年02月16日
    浏览(65)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包