大数据系列(二)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相关,那么他们到底有什么关联呢?
- split是MapReduce里的概念,是切片的概念,split是逻辑切片 ;而block是hdfs中切块的大小,block是物理切块;
- split的大小在默认的情况下和HDFS的block切块大小一致,为了是MapReduce处理的时候减少由于split和block之间大小不一致,可能会完成多余的网络之间的传输。
可以通过配置文件进行设置:
--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;