首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HDFS上非结构化数据行的数据存储格式

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

Stack Overflow用户
提问于 2016-10-22 17:22:17
回答 1查看 165关注 0票数 1

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

代码语言:javascript
运行
复制
key1=str key2=30.3 key3=longtexthere

另一个数据行:

代码语言:javascript
运行
复制
key1=3 key5=abc

SequenceFile似乎是最自然的一种,但是我不知道如何在一个SequenceFile中存储多行。

目前,在我们的临时解决方案中,我们有多个写入器来写入多个文本文件。因此,当需要查询时,我们并行读取它们。然而,当前的文本文件包含数千行,我不认为为每一行创建一个SequenceFile是可行的,这将导致存储元数据和在查询时一次读取太多文件的大量开销。

我认为这个问题可以通过使用HBase或Cassandra来解决,这是一个列式数据库,但我们几乎都需要使用HDFS。我是不是在SequenceFiles中遗漏了什么,或者我们真的应该使用一个列式数据库?

EN

回答 1

Stack Overflow用户

发布于 2016-10-24 16:51:02

因此,序列文件格式是这样的:<key, value> <key, value> <key, value> ...,其中键是WritableComparable,值是可写的。现在很多人都在做的事情--你也可以这么做--是:

记录行仅使用键或值包装一组其他可写项(称为'column'

  • Implement,,...)的自定义可写项

这样你就可以对你想要的一切进行建模。可写的记录可以有一个固定的模式,比如它包含'IntWritable,Text,IntWritable,IntWritable‘(取决于你的字段)。或者如果你不想支持不同的类型,你可以使用现有的ArrayWritable作为你的“记录”。了解每个文件的模式(例如,将其放入序列文件的元数据中)将允许您读取具有不同/演进模式的文件。

所以它有很多手工制作,但可以建立非常有效和灵活的结构。我从来没有用过它,但是看看http://pangool.net/userguide/schemas.html,我想他们已经在序列文件之上建立了一个灵活的记录/元组模式。

归根结底,我认为你可以用序列文件实现你想要的。不过,我建议您也可以看看像ParquetORC files这样的列式文件格式。这些都有它们自己的权衡,但你会有更高的压缩率和选择性读取(列投影,过滤器下推)。而且,您也不必发明模式/元组结构。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40190430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档