On this page
读写器接口
Overview
HCatalog 提供了用于并行 Importing 和输出的数据传输 API,而无需使用 MapReduce。该 API 提供了一种使用表和行的基本存储抽象从 Hadoop 集群读取数据或将数据写入 Hadoop 集群的方法。
数据传输 API 具有三个基本类:
HCatReader –从 Hadoop 集群读取数据
HCatWriter –将数据写入 Hadoop 集群
DataTransferFactory –生成读取器和写入器实例
数据传输 API 中的辅助类包括:
ReadEntity
ReaderContext
WriteEntity
WriterContext
HCatalog 数据传输 API 旨在促进外部系统与 Hadoop 的集成。
注意 :HCatalog 不是线程安全的。
HCatReader
读取是一个两步过程,其中第一步发生在外部系统的主节点上。第二步在多个从属节点上并行完成。
读取是在“ ReadEntity”上完成的。在开始阅读之前,您需要定义一个要从中读取的 ReadEntity。这可以通过 ReadEntity.Builder 完成。您可以指定数据库名称,表名称,分区和过滤器字符串。例如:
ReadEntity.Builder builder = new ReadEntity.Builder();
ReadEntity entity = builder.withDatabase("mydb").withTable("mytbl").build();
上面的代码段定义了一个 ReadEntity 对象(“ entity
”),该对象包含一个名为“ mydb”的数据库中名为“ mytbl”的表,该表可用于读取该表的所有行。请注意,在开始此操作之前,该表必须存在于 HCatalog 中。
定义 ReadEntity 之后,您可以使用 ReadEntity 和集群配置获取 HCatReader 的实例:
HCatReader reader = DataTransferFactory.getHCatReader(entity, config);
下一步是从reader
获取 ReaderContext,如下所示:
ReaderContext cntxt = reader.prepareRead();
以上所有步骤都在主节点上进行。然后,主节点序列化此 ReaderContext 对象,并将其发送到所有从属节点。然后,从节点使用此读取器上下文读取数据。
for(InputSplit split : readCntxt.getSplits()){
HCatReader reader = DataTransferFactory.getHCatReader(split,
readerCntxt.getConf());
Iterator<HCatRecord> itr = reader.read();
while(itr.hasNext()){
HCatRecord read = itr.next();
}
}
HCatWriter
类似于读取,写入也是一个两步过程,其中第一步发生在主节点上。随后,第二步并行发生在从属节点上。
写入是在“ WriteEntity”上完成的,可以按照类似于读取的方式来构造它:
WriteEntity.Builder builder = new WriteEntity.Builder();
WriteEntity entity = builder.withDatabase("mydb").withTable("mytbl").build();
上面的代码创建了一个 WriteEntity 对象(“ entity
”),该对象可用于写入数据库“ mydb”中名为“ mytbl”的表中。
创建 WriteEntity 之后,下一步是获取 WriterContext:
HCatWriter writer = DataTransferFactory.getHCatWriter(entity, config);
WriterContext info = writer.prepareWrite();
以上所有步骤都在主节点上进行。然后,主节点会序列化 WriterContext 对象,并使它可用于所有从属对象。
在从属节点上,您需要使用 WriterContext 获取 HCatWriter,如下所示:
HCatWriter writer = DataTransferFactory.getHCatWriter(context);
然后,writer
将迭代器作为write
方法的参数:
writer.write(hCatRecordItr);
writer
然后循环调用此迭代器上的 getNext()并写出附加到该迭代器的所有记录。
完整的示例程序
可以在上面找到上述 Reader 示例的完整 Java 程序:https://github.com/apache/hive/blob/trunk/hcatalog/core/src/test/java/org/apache/hive/hcatalog/data/TestReaderWriter.java
Navigation Links
Previous: Importing 和输出接口
Next: 命令行界面
一般:HCatalog Manual – WebHCat Manual – Hive Wiki 主页 – Hive 项目 site