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))。

你可能感兴趣的:(hadoop,hive,hcatalog,HCatInputFormat)