1

我们从存储在 NetCDF 文件中的一堆数据开始。从那里,编写了一些 Java 代码来从 NetCDF 文件创建序列文件。我们对代码的初衷了解不多,但是对于序列文件本身,我们已经能够了解一点。最终,我们正在尝试使用这些序列文件在 Hive 中创建表,但目前似乎无法这样做。

我们知道序列文件中的键和值存储为实现 WritableComparable 的对象。我们还能够创建 Java 代码来遍历序列文件中的所有数据。

那么,要真正让 Hive 正确读取这些序列文件的对象中的数据,需要什么?

先谢谢了!

更新:很难准确描述我在哪里遇到问题的原因是因为我不一定会遇到任何错误。Hive 只是错误地读取了序列文件。在我的序列文件上运行 Hadoop -text 命令时,我得到一个对象列表,如下所示:

NetCDFCompositeKey@263c7e3f , NetCDFRecordWritable@4d846db5

数据在这些对象本身内。所以,目前在@Tariq 的帮助下,我相信为了实际读取这些对象,我必须做的是创建一个自定义 InputFormat 来读取键和一个自定义 SerDe 来序列化和反序列化对象?

4

1 回答 1

1

对不起,我无法从你的问题中理解你到底在哪里面临问题。如果您希望通过 Hive 使用 SequenceFiles,您只需在发出 CREATE TABLE 时添加 STORED AS SEQUENCEFILE 子句(很可能您已经知道这一点,没什么新东西)。当您处理 SequenceFiles 时,Hive 将 SequenceFiles 的每个键/值对视为与普通文件中的行类似。这里重要的是键将被忽略。除此之外没有什么特别的。

话虽如此,如果您希望同时读取键和值,则可能必须编写一个可以读取键和值的自定义 InputFormat。以这个项目为例。它允许我们访问存储在 SequenceFile 的键中的数据。

此外,如果您的键和值是自定义类,您还需要编写 SerDe 来序列化和反序列化您的数据。

高温高压

PS:我不知道这是否正是你要找的。如果不是,请告诉我,并为您的问题添加更多细节。我会尝试解决这个问题。

于 2013-08-06T20:00:59.533 回答