存储处理程序是一个结合InputFormat、OutputFormat、SerDe和Hive需要使用的特定的代码,来将外部实体作为标准的Hive表进行处理的整体。
Storage Handler Background
Hadoop中有一个名为InputFormat的抽象接口类,其可以将来自不同源的数据格式化成可以作为job输入的格式。如TextInputFormat。
Hadoop同时还提供了一个名为OutputFormat的抽象接口类,其会获取到一个job的输出,然后将这个输出输入到一个实体中。如TextOutputFormat。
在Hadoop中输入和输出是物理文件的情况很正常。不过InputFormat和OutputFormat抽象接口可被用于从其他数据源(包括关系型数据库、NoSQL存储或Hbase,以及其他任何可通过InputFormat和OutputFormat进行设计实现的存储)中读取和存放数据。
HiveStorageHandler
该类是Hive用于连接如Hbase、Cassandra等类似的NoSQL存储的主要接口。检车下接口可以发现需要定义一个定制的InputFormat和一个OutputFormat以及SerDe。存储处理程序负责从底层存储子系统中读取或写入数据。
Hive与Hbase整合
对于一些指定Hive查询,不需要扫描整个HBase表,通过过滤下推裁剪将会得到返回给Hive的行数据。
可以进行一个谓词下推如:key>20、key<=20或者key<20,且key>=10
默认情况下,下推优化是开启的,不过可以通过如下命令将其关闭:
set hive.optimize.ppd.storage = false ;
下面是一些Hive和HBase列映射需要注意的问题
没有访问HBase行时间戳的方式,只会返回最新版本的行;
HBase的键必须进行显示定义。