分享

数据切分的一些问题

ruanhero 发表于 2013-10-25 10:45:50 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 6930
有两个相同的大的特殊格式的文件(比如两个图片),只能通过特殊的函数库来读取出正确的数据。对数据的操作可以把数据读取出来然后分成一块块的来并行的运算,这样的话怎样对数据切分来计算比较好吗?如果放入HDFS过程中用按64M大小切分,这样读一小块数据就会有的。
在把文件放入的HDFS的过程中,HDFS是按64M来分块的,可不可以自己进行块的划分操作,这样可以把文件先用函数库读取再分块,这样在MR中就可以方便的进行计算。不知道要修改哪些类或进行什么设置才能达到这样的效果吗?
还有再切分的过程中怎样控制两个文件的相同的块分到相同的DATANODE,像对两个或多个大矩阵操作似的,每个分成一小块块的然后再进行操作吗?

已有(4)人评论

跳转到指定楼层
oYaoXiang1 发表于 2013-10-25 10:45:50
自己实现InputFormat。
回复

使用道具 举报

xukunddp 发表于 2013-10-25 10:45:50
回复 2# spork
   在InputFormat中把数据都读过来,解析元信息,再分块,这样效率是不是有吗?
   请教下,怎样把多个不同文件的块放在一个InputSplit中,比如两个文件中的数据作运算,第一个文件和第一块要和第二个文件的第二块做运算,这样两个块应用做为一个INPUTSPLIT放在同一个MAP中,若在MAP把不同文件相同块(比如每个文件第一块)产生相同的KEY传到REDUCE再做运算,这样的话文件大的时候MAP到REDUCE传输的数据太大是不是有吗?这种情况下有没有好的建议吗?
回复

使用道具 举报

qcbb001 发表于 2013-10-25 10:45:50
细看你的需求,很类似于处理不支持切分的压缩数据包。对于MapReduce支持的压缩格式,如果是不支持切分的,系统会把相关的所有块都汇聚到一个task,然后再处理,效率是很低下的。
你若要实现自己管理的hdfs的块,这个要改动比较大,也许你可以改一下dfsclient,在上传你的数据时做些特殊处理再传上去,比如把文件先解压,在分割压缩成小块的,再上传。
要把多个不同文件的块放在一个InputSplit中,这个得你很了解hdfs的分块对你数据的影响,这个得你自己去细心实现了。若传的块过大,那可以考虑部分计算是否可以在map做,然后在reduce合。若是不行,增大内存和网络带宽总是很有效的。这方面的经验不足,就说这么点了。
回复

使用道具 举报

lijian123841314 发表于 2013-10-25 10:45:50
回复 4# spork
    嗯 楼上说的是
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条