hive接入多数据源

mac2024-03-28  30

 

目录

一、接入JSON格式文件

二、接入mongodb数据

三、接入CSV文件


一、接入JSON格式文件

经常会有接口返回json格式数据,或者json格式日志文件需要接入到hive中

导入相应jar包来序列反序列化(SerDe)来解析json格式

add jar hive-hcatalog-core-0.13.0.jar CREATE external TABLE IF NOT EXISTS schema.table_name ( distinct_id string, lib map< string,string >, properties struct< `$browser`: string, act_id: string >, time bigint ) partitioned by (ds string comment '日期分区,yyyy-MM-dd格式') ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' -- ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE;

建表时,不需要写json和表字段的mapping,只需要保持字段名和json对象的key一致即可,顺序无所谓,否则解析出来值为null,所以即使建表时有json中不存在的key也可以,只不过值是null。对于json的key包含特殊字符在建表时加上`符号,例如`$column`、`_id`。

上述org.apache.hive.hcatalog.data.JsonSerDe 不支持忽略格式错误数据和字段映射,所以推荐org.openx.data.jsonserde.JsonSerDe,可参考其官方介绍,下载地址也在其中:https://github.com/rcongiu/Hive-JSON-Serde

但是其中介绍的对于仅仅是大小写不同的两个key可以通过设置

"case.insensitive" = "false", --tells hive to ignore key case

来区别,本人实际操作不成功,有清楚的朋友请留言。

二、接入mongodb数据

两种方式接入

MongoDB-based 直接连接hidden节点,使用 com.mongodb.hadoop.hive.MongoStorageHandler做数据SerDeBSON-based 将数据dump成bson文件,上传到HDFS系统,使用 com.mongodb.hadoop.hive.BSONSerDe

参考

https://blog.csdn.net/tonylee0329/article/details/51648524#%E6%95%B0%E6%8D%AE%E5%BA%8F%E5%88%97%E5%8C%96

Hive Usage

其中,建hive表时如果字段名和mongo文件中key值一致可以不用写mapping。

采用bson-based方式注意要导出BSON格式文件,不要导出成JSON格式了,用mongodump命令即可。

注意jar包版本,试过mongo-hadoop-core-1.3.0.jar  mongo-hadoop-core-2.0.2.jar  mongo-hadoop-hive-1.3.0.jar  mongo-hadoop-hive-2.0.2.jar都不行,要么解析过程中内存溢出,要么解析不出复杂结构类型字段值。根据上文用mongo-hadoop-core-1.5.2.jar    mongo-hadoop-hive-1.5.2.jar     mongo-java-driver-3.2.1.jar是可以的

以上用到的jar包都到maven仓库中去下载就行了,例如:https://mvnrepository.com/artifact/org.mongodb.mongo-hadoop/mongo-hadoop-core/1.5.2

三、接入CSV文件

这里的CSV文件除了逗号分隔以外,字段还用双引号括起来了,那么建表erDE时指定解析CSV的SerDe就行了

例如

create table table_name (col1 string, col2 double) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' stored as textfile;

 

最新回复(0)