spark 数据框 删除列_Hive和Hbase数据互通(用户画像)

背景

依旧是用户画像的项目,现在标签化的数据存放在hive中,而查询是要在hbase上进行查询,所以需要将hive的数据导入hbase中。

方案:

1、hive和hbase的表建立映射关系,读取的是同一份HDFS文件,只是在上层建立hbase到hive表的映射。

优点:一份数据存储,两种查询模式,数据存储最低;

缺点:底层还是格式化的HDFS文件,查询需要进行映射转换,效率较低;

2、将hive的数据通过生成hfile,通过bulkload导入到hbase,这样底层数据的格式会转变成Hfile存储在hbase中,将hbase完全作为一个数据库去查询

优点:查询效率高;

缺点:同一份数据,两份存储格式,空间换取时间;

介绍

1、环境问题

之前因为各种操作,导致hive的对应的数据存储路径被删了,所以先对hive的环境进行重新配置,主要配置和mysql的互通;

1、删除mysql对应的hive库;
2、执行schematool -dbType mysql -initSchema
3、重启hive
4、查看hive-site的配置
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>
  </property>

398f9f16b6b18d64060c0abfd362b75e.png

2、spark运行环境的配置

在测试的时候,spark的运行环境出现了很多问题,主要是jar包冲突和找不到类的问题。

所以基于hbase的类主要是:

<dependency>
            

同时spark的代码框架中要加入resouces包,并将hive-site.xml、core-site.xml、hdfs-site.xml、hbase.xml配置文件扔进去,方便spark运行是能够找到依赖的环境。

2ac115989c9e4097ef7975886756bfa4.png

3、hive映射hbase的表。

高威:Spark读写Hbase(用户画像)​zhuanlan.zhihu.com

这篇文章中将如何像hbase写数据方式介绍了,而且在hbase中建立了一张表:TEST.USER_INFO

8cbea35bad086511d48dd0c8b5ce9676.png

现在将这张吧映射到hive中:

建立hive映射表:

CREATE 
  • stored by指定数据的存储方式。
  • SERDEPROPERTIES:表示字段映射,对应hive中的表字段的顺序,需要注意的是 :key指的是Hbase中的rowdy,hive表中要有一个key字段与之对应,否则会报错的。
  • TBLPROPERTIES:表示表名映射,指定需要映射的Hbase表名。

具体的映射规则:

  • hbase中的空cell在hive中会补null。
  • hive和hbase中不匹配的字段会补null。
  • hive内部表的数据,由hive自己管理,因此删除hive表,则对应的Hbase表也会被删除。
  • hbase对应的hive没有时间戳概念,默认返回最新版本的值。
  • 由于HBase中没有数据类型信息,所以在存储数据的时候都转化为String类型。
  • 建表如果没有指定:key,则第一列默认为行健。

建表语句:

de469b85d65506ea73b5696b2b03a472.png

查询结果:

c59638036ce92b67f666ff3bad758ee7.png

在hbase中新增只有两个列的rowKey。

325753c7293a5da4841efab0fe3516ff.png

查询结果:

dbf3e04f85bdcfe7135a2fd286b531df.png

可以看到在不匹配的列中会自动补NULL。

4、整个hbase的map映射到hive

规则和上面基本一样,只不过建立hive表的时候指定的列的类型修改一下。

CREATE 

查询结果:

49e4834525236c9bd6a0625ab686f9fa.png

5、spark生成hive表数据

val 

7dae1789b920bff9b716c29e3b4e632f.png

在hive上建立hbase的映射表:

CREATE 

查看hbase

90a6f23cca59f484fd31e832eab66e9a.png

将hive中user_message_1中的数据导入user_message中

insert 

a08d0eca4d2370d453c6968a11a322ed.png

hive中查询结果:

22dd1c9a39eaa8abf5c34f7dae1f5160.png

Hbase中查询结果:

510b1d4af51b1075f0b9d7dd27df5041.png

这样两边的数据映射成功。

6、查询hive数据写入Hbase

package 

结果:

fae005ae274c4b9c9291ea6a9ac669eb.png

7678f6c1f5baa3477f985cf56bdbe4a4.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值