Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop HDFS上非结构化数据行的数据存储格式_Hadoop_Serialization_Hdfs_Apache Flink_Sequencefile - Fatal编程技术网

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

Hadoop HDFS上非结构化数据行的数据存储格式,hadoop,serialization,hdfs,apache-flink,sequencefile,Hadoop,Serialization,Hdfs,Apache Flink,Sequencefile,我们正在消耗非常大的数据,这些数据需要以接收到的速度写入,并且我们正在使用HDFS,所以我们更喜欢使用它。数据几乎是非结构化的,我们很少对它们进行基本查询。数据是平面的,有一些字段,每一行代表另一个数据 key1=str key2=30.3 key3=longtexthere 另一个数据行: key1=3 key5=abc SequenceFile似乎是最自然的一个,但我找不到如何在一个SequenceFile中存储多行 目前,在我们的临时解决方案中,我们有多个写入程序可以写入多个文本文件。

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

key1=str key2=30.3 key3=longtexthere
另一个数据行:

key1=3 key5=abc
SequenceFile似乎是最自然的一个,但我找不到如何在一个SequenceFile中存储多行

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


我认为这个问题可以通过使用HBase或Cassandra(一个columunar数据库)来解决,但我们几乎需要使用HDFS。我是缺少SequenceFiles还是我们真的应该使用Columinar数据库?

所以SequenceFile格式如下:

...
其中,键是可写的,值是可写的。 现在,很多人正在做的事情——你也可以这样做——是:

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

所以这需要大量的手工制作,但是构建可以非常高效和灵活的结构。从未使用过它,但是看看,他们已经在序列文件之上建立了灵活的记录/元组模式

总之,我认为你可以通过序列文件实现你想要的。
不过,我建议您也看看像或这样的列文件格式。它们有自己的折衷方案,但您将有更高的压缩率和选择性读取(列投影、过滤器下推)。此外,您不必发明模式/元组结构。

您有固定数量的键/列吗?@oae否,虽然它们不是固定的,但很少扩展,这意味着有时我们添加新列,但旧数据没有。