使用mapreduce和org.apache.hadoop.fs编写序列文件。区别在哪里?

时间:2014-11-07 14:07:48

标签: hadoop hadoop-streaming

我看到使用org.apache.hadoop.fs包或mapreduce将序列文件写入hdfs的示例。我的问题是:

  1. 有什么区别?
  2. 结果是,我的意思是用HDFS编写的两个方法的序列文件是一样的吗?
  3. 我只尝试org.apache.hadoop.fs来编写序列文件,当我尝试使用hadoop fs -text查看结果时,我看到每个记录/块中仍然附加了“密钥”?如果我使用mapreduce来生成序列文件会不一样?我宁愿不去看“关键”
  4. 如何决定使用哪种方法将序列文件写入HDFS?

2 个答案:

答案 0 :(得分:1)

对于序列文件,您将编写包含对象的内容,即您自己的自定义对象。虽然文本文件只是每行的一个字符串。

答案 1 :(得分:0)

Apache Hadoop Wiki表示" SequenceFile是一个由二进制键/值对"组成的平面文件。 Wiki显示实际的文件格式,包括密钥。请注意,SequenceFiles支持多种格式,例如" Uncompressed"," Record Compressed"和" Block Compressed"。此外,还可以使用各种压缩编解码器。由于文件格式和压缩信息存储在文件头中,因此应用程序(例如Mapper和Reducer任务)可以轻松确定如何正确处理文件。

在下图中,您可以看到append()类上的org.apache.hadoop.io.SequenceFile.Writer方法同时需要键和值:

append() method for the SequenceFile.Writer class

另请注意,MapReduce Mapper和Reducer都会摄取并发出键值对。因此,将密钥存储在SequenceFile中可以使Hadoop top在这些类型的文件中高效运行。

简而言之:

  1. SequenceFiles将始终包含"键"除了"值"。
  2. 包含相同数据的两个SequenceFiles在大小或实际字节方面不一定完全相同。这完全取决于是否使用了压缩,压缩类型和压缩编解码器。
  3. 用于创建SequenceFiles并将其添加到HDFS的方法在很大程度上取决于您要实现和完成的目标。 SequenceFiles通常是有效实现特定目标的手段,它们很少是最终结果。