HCatalog是Hadoop生态链中的一个有趣的组件。HCatalog构建于Hive的metastore之上并结合了Hive的DDL,通过服务的形式开放给Hadoop生态链中的其他组件,这样即可用一种统一的形式将Hive数据仓库中的数据的metadata开放给需要的服务,这样的话需要的服务就可以通过HCatalog来了解到所使用的数据的内容以及格式等等元信息。

下图展示了HCatalog在Hadoop生态系统中的定位:

Architecture-001

可以看出HCatalog内置可以支持多种数据格式:

  • ORC
  • RC
  • Text
  • SequenceFile

另外用户还可以自定义格式,不过需要编写InputFormat, OutputFormat, SerDe(Serializer/Deserializer):

Architecture-002

HCatalog提供了’hcat’


$ hcat
usage: hcat { -e "" | -f "" } [ -g "" ] [ -p "" ] [ -D"=" ]
 -D    use hadoop value for given property
 -e              hcat command given from command line
 -f              hcat commands in file
 -g             group for the db/table specified in CREATE statement
 -h,--help             Print help information
 -p             permissions for the db/table specified in CREATE statement

参数-e提供了使用Hive ‘DDL’命令的接口

DDL命令 解释
CREATE TABLE 建表操作,注意如果建表时使用了“CLUSTERED BY”那么这个表不能被Pig和MapReduce使用
ALTER TABLE 修改表
SHOW TABLES 查询表
DROP TABLE 删除表
CREATE/ALTER/DROP VIEW 管理view
SHOW PARTITIONS 查询分区表的分区信息
Create/Drop Index 管理index
DESCRIBE 查询表结构

例子:


$ hcat -e  "show tables;"
OK
activity
device
...
Time taken: 3.255 seconds

# hcat -e "describe device;"
OK
id               bigint
uuid             string
time             string
type             int
address          string
Time taken: 3.824 seconds

APIs

API 解释
HCatReader 从hdfs中读取数据
HCatWriter 向hdfs中写入数据
DataTransferFactory 创建HCatReader/HCatWriter实例
HCatInputFormat 利用MapReduce job从表结构由HCatalog管理的表中读取并处理数据
HCatOutputFormat 利用MapReduce job处理数据并向表结构由HCatalog管理的表中写入数据
HCatLoader Pig script用来读取表结构由HCatalog管理的数据
HCatStorer Pig script用来写入表结构由HCatalog管理的数据

参考信息