hdfs上非结构化数据行的数据存储格式

50few1ms  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(818)

我们正在消耗非常大的数据,这些数据需要以我们接收到的速度写入,而且我们正在使用hdfs,所以我们更喜欢使用它。数据几乎是非结构化的,我们很少对它们进行基本查询。数据是平面的,有一些字段,每行代表另一个数据。

key1=str key2=30.3 key3=longtexthere

另一个数据行:

key1=3 key5=abc

sequencefile似乎是最自然的一个,但我找不到如何在一个sequencefile中存储多行。
目前,在我们的临时解决方案中,我们有多个写入程序,可以写入多个文本文件。因此,当需要查询时,我们并行地读取它们。但是,当前的文本文件包含1000行,我不认为为每行创建一个sequencefile是可行的,在查询时一次存储元数据和读取太多文件会产生很大的开销。
我认为这个问题可以通过使用hbase或cassandra(一个columunar数据库)来解决,但我们几乎需要使用hdfs。我是缺少sequencefiles还是我们真的应该使用columunar数据库?

rwqw0loc

rwqw0loc1#

所以序列文件格式如下: <key, value> <key, value> <key, value> ... 其中键是可写的,值是可写的。现在很多人都在做——你也可以这么做——是:
仅使用键或值“column”
实现一个自定义可写文件,它封装了一组其他可写文件(称为record,row,…)
这样你就可以模拟你想要的一切。可写记录可以有一个固定的模式,比如它包含“intwritable,text,intwritable,intwritable”(取决于您的字段)。或者,如果不想支持不同的类型,可以使用现有的arraywriteable作为“记录”。了解每个文件的模式(例如,将其放入序列文件的元数据中),将允许您对具有不同/演化模式的文件进行读取。
所以它的手工制作很多,但建造起来却可以非常高效灵活的结构。从来没用过,但是看看http://pangool.net/userguide/schemas.html,认为他们已经在序列文件之上建立了灵活的记录/元组模式。
总之,我认为你可以实现你想要的序列文件。不过,我建议您也可以查看类似parquet或orc文件的列文件格式。它们有自己的折衷方案,但您将拥有更高的压缩率和选择性读取(列投影、过滤器下推)。此外,您不必发明模式/元组结构。

相关问题