大数据系列(二)hadoop实现最基础word count

运行WorldCount例子

hadoop默认的样例jar在下面的位置

/你的hadoop位置/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar
在这里插入图片描述

我们先来创建数据文件目录以及结果输出目录:

hadoop fs -mkdir -p /data/wordcount 
hadoop fs -mkdir -p /output/

我们可以通过hadoop fs -ls / 命令来查看我们创建的目录

然后我们创建一个wordcount文件,并在里面输入一些内容

vi wordcount
输入如下内容:
test hadoop
hello hadoop
hi hdfs
hadoop hdfs
test yarn
hi yarn

我们将文件放入hdfs里

hadoop fs -put ./wordcount /data/wordcount

然后开始执行wordcount(最终结果输出在hdfs中的/data/wordcountresult文件夹内):

hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /data/wordcount /output/wordcountresult

我们来看下结果,执行下面的命令:

hadoop fs -text /output/wordcountresult/part-r-00000

我们看到结果:
在这里插入图片描述

顺便我们看下我们hadoop上面的任务截图:
在这里插入图片描述

split和block的区别和联系

当我们使用put将文件存储在hdfs中,文件会根据block的值进行分块存储,然后我们使用MapReduce进行计算时候,可以设定map数量,而map又与split相关,那么他们到底有什么关联呢?

  1. split是MapReduce里的概念,是切片的概念,split是逻辑切片 ;而block是hdfs中切块的大小,block是物理切块;
  2. split的大小在默认的情况下和HDFS的block切块大小一致,为了是MapReduce处理的时候减少由于split和block之间大小不一致,可能会完成多余的网络之间的传输。
  3. 一个split不会包含零点几或者几点几个Block,一定是包含大于等于1个整数个Block
  4. 一个split不会包含两个File的Block,不会跨越File边界
  5. split和Block的关系是一对多的关系
  6. maptasks的个数最终决定于splits的长度
  7. 跨行Block与跨行inputSplit,顾名思义,一行数据被分散在了多个block中,并且由于数据过长,也有可能被切分在不同的split,那么这个时候Block与Split是什么关系:

有一行数据,被拆分在BlockA,BlockB中,在split的过程中,split对应了这两个block(不是几点几个block),然后mapA根据splitA读取数据,如果读取不到换行,就继续读取下一个splitB,直到读取换行为止。下个mapB根据splitB读取数据,发现起始不是要读取的数据,那么就会忽略第一个换行符前面所有数据,从换行后开始读取。所以说一行数据可能被分成多个block,也可能被分成多个inputSplit,但是不会影响map读取的数据不完整

可以通过配置文件进行设置:

--minsize 默认大小为1mapreduce.input.fileinputformat.split.minsize  

--maxsize 默认大小为Long.MAXValue mapreduce.input.fileinputformat.split.maxsize

在mapreduce的FileInputFormat类中有个getSplits() 方法对文件进行split,算法如下:

Math.max(minSize,Math.min(maxSize, blockSize));其中maxSize是取得longValueMax的值

1.如果blockSize小于maxSize && blockSize 大于 minSize之间,那么split就是blockSize;

2.如果blockSize小于maxSize && blockSize 小于 minSize之间,那么split就是minSize;

3.如果blockSize大于maxSize && blockSize 大于 minSize之间,那么split就是maxSize;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值