【提示】点击每一关参考答案可以快速复制。
目录
第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 表,表数据如下:
1.进入 HBase 客户端,创建一个列族 为 info
表名为 student
的表。
create 'student','info'
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
成功执行后,显示。
3.查询 HBase 表 student 是否成功导入数据;
数据已经成功导入至 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
查看服务进程
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 进行中转,其流程图如下:
数据准备
在 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
查看表数据:
创建 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");
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;
将外部表数据导入至内部表 book 中,可以方便使用 Sqoop 更好的导入至 MySQL 中。
insert overwrite table test.book select * from test.h_book;
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 导出数据至 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
dir 参数可以通过 hadoop fs -ls /
命令来查看数据文件存放位置
最后查看 MySQL 中表 book 是否存在数据导入。
mysql -uroot -p123123 -e "select * from test.book;"
至此使用 Sqoop 导出 HBase 数据结束。
编程要求
根据相关知识操作,完成一次使用 Sqoop 将数据从 HBase 导出至 MySQL 中。
1.数据通过 HBase 生成导入 Hive 数据仓库,在导出至 MySQL 中。
2.需要导入 MySQL 的数据库为 book。
测试说明
评测时,需要开启各个服务,点击评测后,平台脚本会查看 MySQL 中的 book 表数据,查询的表数据与以下结果一致则可通关。文章来源:https://www.toymoban.com/news/detail-462060.html
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模板网!