HCatalog输入输出接口

Input and Output Interfaces
HCatInputFormat
HCatOutputFormat
HCatRecord
Running MapReduce with HCatalog
Authentication
Read Example
Filter Operators
Scan Filter
Write Filter



HCatInputFormat
The HCatInputFormat is used with MapReduce jobs to read data from HCatalog-managed tables.
HCatInputFormat exposes a Hadoop 0.20 MapReduce API for reading data as if it had been published to a table.


HCatInputFormat用于MapReduce job中从HCatalog-managed的表中读取数据。
HCatInputFormat 公开的API包括:
setInput
setOutputSchema
getTableSchema
使用HCatInputFormat读取数据,首先要实例化一个InputJobInfo包含要读取表的必要的信息,然后调用setInput接口。
可以使用setOutputSchema方法导入一个投影模式来指定输出字段。如果没有指定模式,将返回表中的所有列。

可以使用getTableSchema方法来确定一个指定的输入表的表模式。


HCatOutputFormat
HCatOutputFormat用于 MapReduce Job中写入数据到HCatalog-managed的表。
HCatOutputFormat公开的API:
setOutput
setSchema
getTableSchema
第一次使用HCatOutputFormat必须setOutput,其他调用将抛出一个输出格式没有初始化的异常。要写入的数据的模式通过setSchema方法来指定。必须要调


用这个方法来提供正写入数据的模式。如果您的数据与表具有相同的表模式,可以使用HCatOutputFormat.getTableSchema()来获取表模式,然后再使用
setSchema()指定模式。
 


HCatRecord
HCatRecord是被HCatalog表中存储值支持的一种类型。HCatalog表模式中的类型确定在HCatRecord不同字段的对象返回类型。此表显示了MapReduce程序的
Java类和HCatalog数据类型的映射。

HCatalog Data Type

Java Class in MapReduce

Values

ARRAY

java.util.List

values of one data type

BIGINT

java.lang.Long

-(2^63) to (2^63)-1, which is -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

BINARY

byte[]

binary data

BOOLEAN

java.lang.Boolean

true or false

DECIMAL

java.math.BigDecimal

exact floating-point value with 38-digit precision

DOUBLE

java.lang.Double

double-precision floating-point value

FLOAT

java.lang.Float

single-precision floating-point value

INT

java.lang.Integer

-(2^31) to (2^31)-1, which is -2,147,483,648 to 2,147,483,647

MAP

java.util.Map

key-value pairs

SMALLINT

java.lang.Short

-(2^15) to (2^15)-1, which is -32,768 to 32,767

STRING

java.lang.String

character string

STRUCT

java.util.List

structured data

TINYINT

java.lang.Byte

-128 to 127



Authentication
If a failure results in a message like "2010-11-03 16:17:28,225 WARN hive.metastore ... - Unable to connect metastore with URI 


thrift://..." in /tmp/<username>/hive.log, then make sure you have run "kinit <username>@FOO.COM" to get a Kerberos ticket and to be 


able to authenticate to the HCatalog server.


Read Example
以下是非常简单的从一个表读取数据的MapReduce程序,计算记录中第二列的不同值的数量,相当于“select col1, count(*) from $table group by col1



例如,如果第二列中的值是{ 1,1,1,3,3,5 }的程序将产生该输出值和计数:
1、3
3、2
5、1



Filter Operators
 过滤器可以包括 'and', 'or', 'like', '()', '=', '<>' (not equal), '<', '>', '<=' 和 '>='.
例如:
ds > "20110924"
ds < "20110925"
ds <= "20110925" and ds >= "20110924"


Scan Filter
假定一个分区表,分区字段为“ds”,你可以选择表的一个分区通过改变
HCatInputFormat.setInput(job, InputJobInfo.create(dbName, inputTableName, null));

HCatInputFormat.setInput(job, InputJobInfo.create(dbName, inputTableName, "ds=\"20110924\""));
这个过滤器必须依赖于分区列。来自其他列的值会导致工作失败。


Write Filter
将数据写入一个分区中,可以将
HCatOutputFormat.setOutput(job, OutputJobInfo.create(dbName, outputTableName, null));
改为
Map partitions = new HashMap<String, String>(1);
partitions.put("ds", "20110924");
HCatOutputFormat.setOutput(job, OutputJobInfo.create(dbName, outputTableName, partitions))。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunyang098

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值