3.hbase 数据导入导出

教程 阿布都的都 ⋅ 于 2023-01-06 18:22:21 ⋅ 602 阅读

1. hive数据导入hbase

1.1 使用hbase外表方式加载

file

在hive中创建hbase外表,并指定hbase表名,将hbase映射到hive表。在hive中向hbase外表中插入数据,将数据同步到hbase中。

1.1.1 创建自己的用户

useradd xinniu
passwd xinniu

kadmin.local
    addprinc -pw xinniu xinniu@HAINIU.COM
    xst -norandkey -k /data/xinniu.keytab xinniu
    exit

# 用hive用户给xinniu用户赋予超级角色
kinit hive
# 连接hive
beeline -u "jdbc:hive2://worker-1:10000/;principal=hive/worker-1@HAINIU.COM"
# 给xinniu 赋予超级角色
grant role admin_role to group xinniu;
# 查看hive的权限情况
show role grant group xinniu;

# 用hbase用户给xinniu赋予超级角色
kinit hbase
hbase shell
grant '@xinniu', 'CA'   

1.1.2 创建hive的内部表

用 xinniu 用户创建

-- ***1 创建hbase外表 ***
-- key必须自带,相当于是rowkey
create table xinniu.source_table4hbase1(
  key string,
  pk string,
  col1 string,
  col2 string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:pk,cf:col1,cf:col2")   
TBLPROPERTIES("hbase.table.name" = "xinniu:dataload1"); 
-- 注意:
--    1)hbase库要先存在,而且xinniu用户要有操作hbase库的权限
        kinit hbase
        create_namespace 'xinniu'
        grant '@xinniu', 'CA'

--    2)创建hive的库
        create database xinniu;

--    3)hbase表如果不存在则会自动创建(不需要手动创建hbase表)

-- ------------------------------------------------
-- ***2 查询hive表数据插入到hbase外表中 ***
-- 创建 source_table1表
CREATE TABLE xinniu.source_table1(
pk string,
col1 string,
col2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
STORED AS TEXTFILE;

-- 造数据,并上传到表对应的hdfs目录
[root@worker-1 hdfs_test]# vim t1
S0001|name1|boy
S0002|name2|girl
S0003|name3|boy

-- 用hdfs用户上传到
kinit hdfs
hadoop fs -put t1 hdfs://worker-1:8020/user/hive/warehouse/xinniu.db/source_table1

-- hive用户
-- 查询导入的数据
select * from xinniu.source_table1;

-- 查询source_table1表数据导入到 xinniu.source_table4hbase1 里
insert into table xinniu.source_table4hbase1 
select concat(pk,col1) key,pk pk,col1 col1,col2 col2 from xinniu.source_table1;

-- 查看hive表 
select * from xinniu.source_table4hbase1;
-- 查看hbase表
scan 'xinniu:dataload1'

-- ------------------------------------------------
-- ***3 删除hive内表 ***
-- 如果使用hive内表的方式创建hbase关联表,删除hive表的时候会同时删除掉hbase的表
drop table xinniu.source_table4hbase1;
-- 查看表列表,hive内部已删除
show tables;
-- 查看hbase表列表,对应的hbase表已经删除
list

导入后查看 hive表:

file

导入后查看hbase表:

file

1.1.2 创建hive的外部表

用 xinniu 用户创建

采用hive外表的方式可以保证只删除元数据,数据不删(hbase表不会删除)

-- 所以我们使用的时候通常采用hive外表的方式
-- ***1 创建hbase外表 ***
-- 【注意】如果使用的是hive的外表的形式创建的hbase的关联表则需要先创建hbase的表
-- 用xinniu创建hbase表,如果xinniu没有权限需要用hbase给xinniu赋权限 grant '@xinniu', 'CA'
kinit xinniu
create 'xinniu:dataload2','cf'

-- 创建hive外部表指向已存在的hbase表
create external table xinniu.source_table4hbase2(
  key string,
  pk string,
  col1 string,
  col2 string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:pk,cf:col1,cf:col2")   
TBLPROPERTIES("hbase.table.name" = "xinniu:dataload2"); 

-- 当查询表数据时报错, 原因是hive用户没有操作 hive外表指定的hbase表权限
select * from xinniu.source_table4hbase2;

-- 用xinniu或hbase 给hive赋权限
grant '@hive', 'RWXCA', 'xinniu:dataload2'

-- ------------------------------------------------
-- ***2 查询hive表数据插入到hbase外表中 ***
-- 如果使用的是hive的外表的形式创建的hbase的关联表则需要先创建hbase的表
insert into table xinniu.source_table4hbase2 
select concat(pk,col1) key,pk pk,col1 col1,col2 col2 from xinniu.source_table1;

-- 查看hive表 
select * from xinniu.source_table4hbase2;
-- 查看hbase表
scan 'xinniu:dataload2'

-- ------------------------------------------------
-- ***3 删除hive外表 ***
-- 如果使用hive外部的方式创建hbase关联表,删除hive表的时候不会删除hbase表
drop table xinniu.source_table4hbase2;
-- 查看表列表,hive外部表已删除
show tables;
-- 查看hbase表列表,对应的hbase表已经删除
list
scan 'xinniu:dataload2'

导入后查看 hive表:

file

导入后查看hbase表:

file

1.2 importTSV+bulkload

file

1)创建文件并上传到hdfs

# 用hdfs用户把hdfs 的 /data 目录改进777,目的是让每个人都可以往这个目录里写
kinit hdfs
hadoop fs -chmod 777 /data

[xinniu@worker-1 ~]$ vim t2
S0001name1|S0001|name1|boy
S0002name2|S0002|name2|girl
S0003name3|S0003|name3|boy

kinit xinniu
hadoop fs -put t2 /data/xinniu

2)在hbase中创建表,并指定列族与压缩格式,hbase建表dataload3

create 'xinniu:dataload3',{NAME => 'cf',COMPRESSION => 'SNAPPY'}

file

3)使用importTSV生成hfile文件

-Dimporttsv.separator :指定分隔符

-Dimporttsv.columns :指定列映射

​ HBASE_ROW_KEY强制要求写

​ cf:pk指定rowkey字段

​ 其他字段与hive表中对应

-Dimporttsv.skip.bad.lines:是否跳过无效行

-Dimporttsv.bulk.output:hfile输出路径

xinniu:dataload3:hbase表名

hdfs://worker-1:8020/data/xinniu/t2 :用于生成hfile文件的输入目录

# 用xinniu用户生成hfile文件
kinit xinniu

# 生成hfile文件命令
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv \
-Dimporttsv.separator='|' \
-Dimporttsv.columns=HBASE_ROW_KEY,cf:pk,cf:col1,cf:col2  \
-Dimporttsv.skip.bad.lines=false \
-Dimporttsv.bulk.output=/data/xinniu45/hfile1 \
xinniu:dataload3 hdfs://worker-1:8020/data/xinniu/b.txt

导出hfile文件:

file

4)使用bulkload加载数据到hbase表中

# /data/xinniu/hfile :hfile路径
# xinniu:dataload3  :hbase表名

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /data/xinniu/hfile2 xinniu:dataload3

查询hbase表xinniu:dataload3

scan 'xinniu:dataload3'

file

2. 导出hbase数据

file

使用hive外表的方式导出hbase数据

2.1 hbase数据导出text文件

1)使用hive外表的方式先关联到hbase 表

-- 创建hive外部表指向已存在的hbase表
create external table xinniu.source_table4hbase3(
  key string,
  pk string,
  col1 string,
  col2 string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,cf:pk,cf:col1,cf:col2")   
TBLPROPERTIES("hbase.table.name" = "xinniu:dataload3"); 

-- 用hbase 给hive赋权限
grant '@hive', 'RWXCA', 'xinniu.source_table4hbase3'

2)将hive外表数据导出到指定目录。

# 创建 /data/xinniu/hbase_out目录,并赋予777权限
mkdir -p /data/xinniu/hbase_out
chmod 777 /data/xinniu/hbase_out

insert overwrite local directory'/data/xinniu/hbase_out/source_table4hbase'
row format delimited fields terminated by '|'
select * from xinniu.source_table4hbase3;

2.2 hbase数据导出为orc文件

1)创建一张临时的orc表,再将hbase外表的数据查询插入到orc表中,再将orc表数据执行导出,导出orc文件到指定路径。

-- 创建orc表
create table xinniu.orctable stored as orc 
as 
select * from xinniu.source_table4hbase3 
where 1=0;

-- 通过hbase的hive外表将数据导入到orc表中
insert into table xinniu.orctable 
select * from xinniu.source_table4hbase3;

2)通过导出命令指定导出orc文件

insert overwrite local directory'/data/xinniu/hbase_out/source_table4hbase_orc' stored as orc 
select * from xinniu.source_table4hbase3;
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-阿布都的都,http://hainiubl.com/topics/76047
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter