【问题标题】:Hadoop block size issuesHadoop块大小问题
【发布时间】:2011-03-25 10:24:51
【问题描述】:

我的任务是为我的公司处理价值数 TB 的 SCM 数据。我建立了一个 hadoop 集群并有一个脚本来从我们的 SCM 服务器中提取数据。

由于我通过流接口批量处理数据,我遇到了 O'Reilly 的 Hadoop 书籍似乎没有解决的块大小问题:跨越两个块的数据会发生什么? wordcount 示例如何解决这个问题?到目前为止,为了解决这个问题,我们已经使输入文件小于 64mb。

在考虑 reducer 脚本时,问题又出现了;来自地图的聚合数据如何存储?减少时会出现问题吗?

【问题讨论】:

    标签: filesystems hadoop


    【解决方案1】:

    您关于“数据跨越两个块”的问题是 RecordReader 处理的。 RecordReader 的用途有 3 个:

    1. 确保处理每个 k,v 对
    2. 确保每个 k,v 对只处理一次
    3. 处理跨块拆分的 k,v 对

    在 (3) 中实际发生的是,RecordReader 回到 NameNode,获取下一个块所在的 DataNode 的句柄,然后通过 RPC 伸出该完整块并读取剩余部分第一条记录直到记录分隔符。

    【讨论】:

      【解决方案2】:

      这不应该是一个问题,前提是每个块都可以干净地分解部分数据以进行拆分(例如通过换行符)。如果您的数据不是逐行数据集,那么是的,这可能是个问题。您也可以增加集群上块的大小 (dfs.block.size)。

      您还可以在流中自定义输入如何进入映射器

      http://hadoop.apache.org/common/docs/current/streaming.html#Customizing+the+Way+to+Split+Lines+into+Key%2FValue+Pairs

      map 步骤中的数据会根据分区器类与 map 的键进行排序。

      http://hadoop.apache.org/common/docs/r0.15.2/streaming.html#A+Useful+Partitioner+Class+%28secondary+sort%2C+the+-partitioner+org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner+option%29

      然后将数据混洗在一起,使所有映射键聚集在一起,然后传输到reducer。有时在 reducer 步骤发生之前,如果你愿意,combiner 会进来。

      您很可能可以创建自己的自定义 -inputreader(这里是如何流式传输 XML 文档的示例http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/streaming/StreamXmlRecordReader.html

      【讨论】:

      • 这是完美的。我的大部分问题都是通过将文件拆分大小限制为 64MB(块的大小)来解决的,从而将每个文件(适合一个块)映射到单个映射进程。在一个 2 节点集群上,我们设法在 3 分钟内处理了大约 2gb 的数据 - 快得离谱:)
      • 我认为“拆分”记录不应该存在问题:就像常规文件系统一样,块大小是物理构造,不一定对逻辑级别产生深远影响。因此,虽然将文件大小设为块大小(理想情况下更小)是件好事,但为了避免负面的性能问题,没有必要为了正确性进行拆分。
      【解决方案3】:

      如果您有多个 TB 输入,则应考虑将块大小设置为 128MB 以上。

      如果文件大于一个块,它可以被拆分,因此每个文件块将转到不同的映射器,或者整个文件可以转到一个映射器(例如,如果这个文件是 gzip 压缩的)。但我想你可以使用一些配置选项来设置它。

      拆分会自动处理,您不必担心。地图的输出存储在 hdfs 上的 tmp 目录中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多