我看到使用org.apache.hadoop.fs
包或mapreduce将序列文件写入hdfs的示例。我的问题是:
org.apache.hadoop.fs
来编写序列文件,当我尝试使用hadoop fs -text
查看结果时,我看到每个记录/块中仍然附加了“密钥”?如果我使用mapreduce来生成序列文件会不一样?我宁愿不去看“关键”答案 0 :(得分:1)
对于序列文件,您将编写包含对象的内容,即您自己的自定义对象。虽然文本文件只是每行的一个字符串。
答案 1 :(得分:0)
Apache Hadoop Wiki表示" SequenceFile是一个由二进制键/值对"组成的平面文件。 Wiki显示实际的文件格式,包括密钥。请注意,SequenceFiles支持多种格式,例如" Uncompressed"," Record Compressed"和" Block Compressed"。此外,还可以使用各种压缩编解码器。由于文件格式和压缩信息存储在文件头中,因此应用程序(例如Mapper和Reducer任务)可以轻松确定如何正确处理文件。
在下图中,您可以看到append()
类上的org.apache.hadoop.io.SequenceFile.Writer
方法同时需要键和值:
另请注意,MapReduce Mapper和Reducer都会摄取并发出键值对。因此,将密钥存储在SequenceFile中可以使Hadoop top在这些类型的文件中高效运行。
简而言之: