在FileInputFormat map操作中有一块非常中的split的算法 ,
以wordcount为例子,他到底是如果做分片的,我们如何来调优呢,
首先我们来看下他的算法:
在FileInputFormat public List<InputSplit> getSplits(JobContext job) 中计算 分片大小用到的几个数据我么先来看一下:
// 主要以来配置中的 值,缺省为 1 ;
long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));
protected long getFormatMinSplitSize() { return 1; } public static long getMinSplitSize(JobContext job) { return job.getConfiguration().getLong(SPLIT_MINSIZE, 1L); } public static final String SPLIT_MINSIZE = "mapreduce.input.fileinputformat.split.minsize";
这里 mapreduce.input.fileinputformat.split.minsize 在 /mapred-default.xml 的配置主哦功能默认是 0 ,所以getMinSplitSize 返回缺省值 1 ;
而 getFormatMinSplitSize 返回值 值也是 1;
通过 Max之后 最后得到的值是1 ;
这里 可以配置的 就是 split.minsize ,所以这个值如果配置的大于1的话 ,那么 minSize 就是 配置主哦功能的split.minsize了,
//默认使用最大值,配置了,就使用配置的值;
long maxSize = getMaxSplitSize(job);
public static long getMaxSplitSize(JobContext context) { return context.getConfiguration().getLong(SPLIT_MAXSIZE, Long.MAX_VALUE); } public static final String SPLIT_MAXSIZE = "mapreduce.input.fileinputformat.split.maxsize";
从代码可以看出来,缺省使用了 Long.MAX_VALUE,如果配置就是用 配置的值,
// 在配置文件 file.blocksize core-default.xml 默认值 给的 64*1024*1024
long blockSize = file.getBlockSize();
long splitSize = computeSplitSize(blockSize, minSize, maxSize);
protected long computeSplitSize(long blockSize, long minSize, long maxSize) { return Math.max(minSize, Math.min(maxSize, blockSize)); }
实际上是取出了 在 block中splitMax中取出一个最小值,在和分块最小值中取出 较大的一个,
举个例子:
加入 wordcount中使用 最小分块 为 3 ,最大分块为 10,blocksize 为默认 67108864
,那么最终结果为 是 10
但是我们在跑wordcount的时候,我们应该是都没有 设置这写参数,那么应该都是默认值:
minSize:1 maxSize:Long.MAX_VALUE-- 9223372036854775807 blocksize:67108864
最终得到的值即:blocksize:67108864
那么在 wordcount 如果出现块的大小刚好把一个单词截断了怎么办呢?
待续.............
这个配置项定义了在HDFS上每个block的大小,它的值是以字节为单位。
可以在配置文件hadoop-site.xml(Hadoop 0.20 以前版本)定义,
也可以在JobConf里定义。hdfs中block size定义是以文件为粒度的。
hadoop的mapper数基本由输入文件的block数决定,如果输入的block
size不够大,导致mapper处理时间很短(不到一分钟),大量这样的mapper
会严重降低计算性能。但是如果输入文件都是小文件,就算blocksize再大,每个
文件也会占一个block,这时候要通过合并小文件来减少mapper数,设置blocksize
是没用的。命令行设置块大小可以加参数,0.20以后的用
hadoop fs -D dfs.block.size=134217728 -put local_name remote_location
之前的可以用fs.local.block.size
参数
新版在 dfs.blocksize中设置
相关推荐
基于hadoop Java接口 文件操作类,对hadoop服务进行增删改查等系列操作,非常实用
上传文件到Hadoop失败的原因分析及解决方法.pdf
Hadoop平台中的HDFS文件存储结构
hadoop的dll文件 hadoop.zip
Hadoop配置文件说明;4.1.1 Hadoop环境配置;4.1.2 Hadoop守护进程环境配置;4.1.3 Hadoop配置参数格式;4.1.3 Hadoop配置参数格式;4.1.4 获得Hadoop集群全部配置信息;4.2 在Master节点上安装Hadoop;(1)解压缩hadoop-...
基于django的hadoop文件管理系统-期末实训项目,仿百度网盘。主要是通过python的第三方库pyhdfs进行对hadoop文件系统的增删改查操作。
Hadoop分布式文件系统的模型分析,Hadoop 分布式文件系统是遵循Google 文件系统原理进行开发和实现的,受到了业界极大关注,并 已被广泛应用。 鉴于当前缺乏从系统设计理论的角度对其开展的相关研究,本文从 Hadoop ...
1.java接口操作Hadoop文件系统(文件上传下载删除创建...可举一反三) 2.RPC远程过程调用的java代码实现,便于理解Hadoop的RPC协议,具体使用方法可参考我的博客...
hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件hadoop配置文件
在Hadoop MapReduce环境中,如果能预知作业的执行时间,...该方法已在Hadoop-0.20.2中实现,并在一个包含19个节点的Linux集群中进行了验证.实验结果表明,在最好情况下,根据该方法预测的执行时间和真实执行时间的误差约2%.
第4章 Hadoop文件参数配置.pdf
hadoop的默认配置文件,下载记得关注我哦
hadoop处理海小文件的一种改进方法的文章,可供参考。
windows安装需要的Hadoop库文件,windows安装需要的Hadoop库文件.
(1)局域网的Hadoop分布式文件系统对象图: ...OSFile包中是文件分解加密的功能类, 通过调用DivedeStream类中的方法, 对上述选择的文件进行分解操作。 每个类的代码在目录的源代码文件夹中可以找到。
myeclipse运行hadoop文件,通过他能熟练掌握
Hadoop HA 集群搭建所需要的配置文件:core-site,hdfs-site,mapred-site,yarn-site四个xml文件和一个slaves文件
在Hadoop的分布式文件系统下,对文件的读写和列出文件的相关属性和目录中的内容
利用struts2上传文件到hdfs,并从hdfs下载文件。程序运行前提是搭建好hadoop环境。
7./hadoop/etc/slaves这个文件里必须把所有的slaves的主机名写进去。 8.mast的/etc/hosts slave1的/etc/hosts slave2 的/etc/hosts (localhost: 127.0.0.1可以去掉,只写主机名对应的IP地址)如下 1)以下是...