我一直负责为我的公司处理多TB价值的SCM数据。我建立了一个hadoop集群,并有一个脚本来从我们的SCM服务器获取数据。Hadoop块大小问题
由于我通过流式接口通过批处理数据,遇到了O'Reilly的Hadoop书籍似乎无法解决的块大小问题:跨两个块的数据会发生什么情况? wordcount示例如何解决这个问题?为了解决这个问题,我们采取了让每个输入文件小于64mb的方法。
思考Reducer脚本时再次出现问题;如何存储地图的汇总数据?这个问题在减少时会出现吗?
我一直负责为我的公司处理多TB价值的SCM数据。我建立了一个hadoop集群,并有一个脚本来从我们的SCM服务器获取数据。Hadoop块大小问题
由于我通过流式接口通过批处理数据,遇到了O'Reilly的Hadoop书籍似乎无法解决的块大小问题:跨两个块的数据会发生什么情况? wordcount示例如何解决这个问题?为了解决这个问题,我们采取了让每个输入文件小于64mb的方法。
思考Reducer脚本时再次出现问题;如何存储地图的汇总数据?这个问题在减少时会出现吗?
这应该不是一个问题,只要每个块都可以干净地分割分割数据的一部分(如通过换行符)。如果你的数据不是一行一行的数据集,那么是的,这可能是一个问题。您也可以增加群集上块的大小(dfs.block.size)。
您也可以自定义自己的流媒体的投入是如何进入你的映射器
数据从地图步骤中,基于对地图的关键一partioner类被整理到一起。
然后数据被洗牌在一起,使所有的映射键扎堆,然后转移到减速。有时候在减速步骤发生之前,如果你喜欢,可以使用组合器。
最有可能的,你可以创建自己的自定义-inputreader(我这里是怎么流的XML文档http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/streaming/StreamXmlRecordReader.html)
如果你有多TB的输入,你应该考虑设置块大小,甚至超过128MB。
如果文件大于一个块,它可以被分割,因此每个文件块将转到不同的映射器,或者整个文件可以转到一个映射器(例如,如果此文件被压缩)。但我想你可以使用一些配置选项来设置它。
拆分自动处理,你不应该担心。地图输出存储在hdfs的tmp目录中。
您对“数据跨越两个街区”是什么RecordReader处理问题。一个RecordReader的目的是3倍:
实际发生在(3)中的是RecordReader返回到NameNode,获取下一个块所在的DataNode的句柄,然后通过RPC伸出来拉入该完整块并读取剩余的第一条记录的一部分直至记录分隔符。
什么是SCM在你的情况? – wlk 2010-08-04 18:59:43
我们使用Perforce。 – bhargav 2010-08-04 19:25:25