`
cloudeagle_bupt
  • 浏览: 529467 次
文章分类
社区版块
存档分类
最新评论

split和block的问题

 
阅读更多

这段代码理解:

  1. List<InputSplit>splits=newArrayList<InputSplit>();
  2. for(FileStatusfile:listStatus(job)){
  3. Pathpath=file.getPath();
  4. FileSystemfs=path.getFileSystem(job.getConfiguration());
  5. longlength=file.getLen();
  6. BlockLocation[]blkLocations=fs.getFileBlockLocations(file,0,length);
  7. if((length!=0)&&isSplitable(job,path)){
  8. longblockSize=file.getBlockSize();
  9. longsplitSize=computeSplitSize(blockSize,minSize,maxSize);
  10. longbytesRemaining=length;
  11. while(((double)bytesRemaining)/splitSize>SPLIT_SLOP){
  12. intblkIndex=getBlockIndex(blkLocations,length-bytesRemaining);
  13. splits.add(newFileSplit(path,length-bytesRemaining,splitSize,
  14. blkLocations[blkIndex].getHosts()));
  15. bytesRemaining-=splitSize;
  16. }
  17. if(bytesRemaining!=0){
  18. splits.add(newFileSplit(path,length-bytesRemaining,bytesRemaining,
  19. blkLocations[blkLocations.length-1].getHosts()));
  20. }
  21. }elseif(length!=0){
  22. splits.add(newFileSplit(path,0,length,blkLocations[0].getHosts()));
  23. }else{
  24. //Createemptyhostsarrayforzerolengthfiles
  25. splits.add(newFileSplit(path,0,length,newString[0]));
  26. }
  27. }
  28. LOG.debug("Total#ofsplits:"+splits.size());
  29. returnsplits;
  30. }

需要split跨block的话,调整下splitSize就行了,比如可以将splitSize设为blockSize的1.5倍就行了。

这里代码的理解:

就是在剩余的字节数大于SPLIT_SLOP时不断生成新split, 剩余字节不超过1.1个split时作为一个split处理,这样能够利用split的跨块读取,且节省资源。

由于我其他的处理逻辑需要分的很清, 不能1.1(SPLIT_SLOP默认1.1), 即使剩余不到10%,也要作为一个新块处理, 因此改为1.0我的问题就解决了!


split的作用主要有两个:1是作为逻辑单元,便于分布式处理,不像block只能在单个节点上,而是对于不完整的记录能够跨块读取,方便很多。


分享到:
评论

相关推荐

    Hadoop的block Size和split Size究竟是什么关系_1

    1. block是物理上的数据分割,而split是逻辑上的分割 3. 用户可以在M/R 程序中自定义split size 4. 一个split 可以包含多个bl

    Hadoop的block Size和split Size究竟是什么关系-safari1

    1. block是物理上的数据分割,而split是逻辑上的分割 3. 用户可以在M/R 程序中自定义split size 4. 一个split 可以包含多个bl

    split_block:将句子分成不同类型的块

    分块 将句子分成不同类型的块。 注意 所有 strs 都表示为 python 数据结构“str”,因为我们在这里只处理英语。 执照 麻省理工学院。 陈大卫@17zuoye

    Fast variable block size motion estimation algorithm

    motion estimation algorithms based on merge and split procedures for H.264/MPEG-4 AVC video encoding. The algorithms take advantage of the correlation of the Motion Vectors (MVs) of the different ...

    DB-SFD64KX32M64P4C-HE-LMC-100B-BC.zip_As One_Embflash_flash_flas

    adjacent rows for information block .The split gate cell design and thick oxide tunneling injector attain better reliability and manufacturability compared with alternative approaches. The SFD64KX32...

    DB-SFD64KX32M64P4C-HE-LMC-100B-BC.pdf

    A page is composed of 4 adjacent rows for main memory block and 4 adjacent rows for information block .The split gate cell design and thick oxide tunneling injector attain better reliability and ...

    很早的抓取屏幕免费软件的全部源程序 (D3)

    作者: William Miller. 抓取屏幕的免费软件,带全部源程序;支持抓取整屏、选择区、选择窗口或对象等,是DELPHI3编译得很老的程序,用来研究研究还是不错的。发布者:cjsh(wjh_wy@163.com) QQ:39306255

    python把文本转换为html-Python基础教程-把文本转为HTML格式.pdf

    block=[] #lines函数返回的yield存储值,拿来每⾏遍历,根据是否有空⾏找出段落 for line in lines(file): #判断是否为字符串,字符串才有split()⽅法,如果有,追加到block⾥,开始回到lines中进⼊到下⼀次循环, ...

    QQ聊天程序源码

    QString toId = QString(windowTitle.split("[").at(1)); QString msgType = "MSG_CLIENT_CHAT"; QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_6); ...

    SAP Advance Purchase Function - Quota Arrangement

    Solution – Quota Arrangement We also need to diversify our source of supplies to mitigate the impact of ...How to split a block of purchase quantity and distribute them among multiple suppliers??

    cran_split.zip_Windows编程_Python_

    Cran split### This code block is evaluatd when the buffer is run in IDLE. It would### not be run if this module were used elsewhere

    split-background-with-text-overlay-guten-block:这是一个类似于核心标题块的WordPress Gutenberg块,但允许管理员在背景的左侧和右侧进行选择以及图像或颜色

    拆分背景与文本叠加这是一个类似于核心标题块的WordPress Gutenberg块,但允许管理员在背景的左侧和右侧进行选择以及图像或颜色。

    大数据面试题.doc

    Mapreduce 的 input split 就是一个 block。( ) 31. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( ) 32. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认...

    大数据面试题(1).doc

    Mapreduce 的 input split 就是一个 block。( ) 31. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( ) 32. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认...

    大数据面试题.docx

    单项选择题 1. 下面哪个程序负责 HDFS 数据存储。... Mapreduce 的 input split 就是一个 block。( ) 31. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( ) 32. Hadoop 环境变

    大数据面试题-.docx

    单项选择题 1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)... Mapreduce 的 input split 就是一个 block。( ) 31. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。( ) 32. Ha

    大数据面试题(1).docx

    单项选择题 1. 下面哪个程序负责 HDFS 数据存储。 a)NameNode b)Jobtracker c)Datanode d)... Mapreduce 的 input split 就是一个 block。( ) 31. NameNode 的 Web UI 端口是 50030,它通过 jetty 启动的 W

    disposable-email-domains:一次性和临时电子邮件地址域的列表

    一次性电子邮件域列表 ... 我们不能保证所有这些都仍然可以被视为一次性使用,但我们会进行基本检查,以确保... split ( '@' )[ 1 ] in blocklist_content : message = "Please enter your permanent email address." r

    Java IO学习文件处理

    String[] str = line.split(","); List&lt;String&gt; list = map.get(str[1]); if(list == null){ list = new ArrayList(); } list.add(str[0]); map.put(str[1], list); }...

    button的js代码

    // This function renders a block of buttons function renderButtons(title){ Ext.getBody().createChild({tag: 'h2', html: title}); new ButtonPanel( 'Text Only', [{ text: 'Add User' },{ text: '...

Global site tag (gtag.js) - Google Analytics