Streaming Data Ingest介绍
主要是使用Hive HCatalog Streaming API
传统情况下增加新的数据,需要收集hdfs上的数据,并且定期的向新的分区中增加。
那么,batch insert是很有必要的。之前,不能向已存在的分区中插入数据,
现在,hive0.14版本之后,Hive Streaming Api支持持续的插入数据。
新插入的数据,可以在一个批次中,提交到hive表中。
Hive HCatalog Streaming API是为流式客户端准备的,如Flume,Storm,它们持续不断的产生数据。
流式支持,是基于Hive表对ACID的支持。
这个API分为两个部分
第一个部分提供连接和事务的管理
第二个部分提供I/O支持
事务是通过metastore管理的。
HiveEndPoint
描述了一个需要连接的hive终端,库名,表名,分区名都包括
调用它上面的newConnection 方法建立一个到Hive Metastore的用于Streaming的连接。它返回一个StreamingConnection对象。同一个endpoint上,可以建立多个连接。
StreamingConnection可以被用来初始化新的事务来执行IO
HiveEndPoint.newConnection()方法接收一个boolean类型的参数,来决定是否创建分区,分区的创建时原子性的,所以,多个客户端可以比赛创建分区,但是只有一个会创建成功。
事务的实现,与传统的数据库的实现有一点不一样。
每个事务都有一个事务ID,多个事务会被分组到一个“事务批次”
这能够帮助把很多的事务记录分组到更少的文件中,避免一个事务一个文件。
在创建连接之后,client端会请求一个新的事务批次,会返回一组事务id,这些事务id都是一个事务批次中的一部分。然后,client端会通过初始化新的事务,来每次处理一个事务id。
Client端的write()方法会在每个事务中写一条或者多条记录,然后在转到下一个事务之前,commit或者abort当前