0

创建外部表时如何为每个文件指定一条记录。我拥有的数据就是这种格式。每个文件一行,行的格式是compressed_bytebuffer(jackson.write(java pojo))

那么我们如何指定 Hive 应该将文件中的内容视为一个 Record 并传递给我的 SerDe。我查看了 JSonSerde 的代码,看起来如果我可以将整个 blob 获取到我的 SeDe 序列化/反序列化方法,那么我只需要解压缩,其余的 JSonSerDe 代码就可以正常工作。关于这种方法是否可行的任何建议/想法?

4

1 回答 1

0

并不是说你不能这样做,而是你违背了 Hadoop 的原则。不要将事物视为 1-file-to-1-input。相反,使用某种记录分隔符(通常是 \n)加载所有输入。然后让Hadoop驱动。

至于 SerDe,Hive 将根据源数据的分隔符读取记录。这意味着 blob 将(应该)是您的压缩 JSON。所以从扩展 JSON SerDe 开始。首先你必须解压它,然后把它交给 JSON SerDe 的 super。

再一次,你觉得你在违背系统架构。让 Hive 为您管理压缩。加载未压缩的数据并让子系统通过设置诸如 Snappy 或 LZO 来管理压缩。这为您提供了块压缩或重新压缩等选项。

于 2014-01-14T14:37:57.013 回答