这两年零零散散用hadoop做了些项目,也看了些hadoop相关资料,每回都是现学现用。这回做kbuild项目,要用到hadoop streaming,发现很多东西又忘了,趁这次机会把hadoop相关的知识再过一遍整理下。
hadoop由两部分构成,分布式文件系统hdfs,和并行计算框架map-reduce。做应用开发,都是跟map-reduce打交道;hdfs逻辑上相对来说比较简单,可以参考:http://hadoop.apache.org/common/docs/current/hdfs_design.html 。map-reduce相关文档:http://hadoop.apache.org/common/docs/current/mapred_tutorial.html; http://hadoop.apache.org/common/docs/current/streaming.html 。
map一般做分布式计算,reduce做数据收集。map对外提供的编程接口:map(K1 key, V1 value, OutputCollector<K2, V2> output, Reporter reporter),处理输入的KV对,处理结果放到output中;output的结果经由框架处理,传递给reduce,相应接口:reduce(K2 key, Iterator<V2> values, OutputCollector<K3, V3> output, Reporter reporter),对一个key一系列的value处理结束后,结果再放入output中。这样一个简单的map-reduce就结束了。框架层面会帮我们处理以下事情:
1. mapper的数量如何确定,这些mapper该起在那些tasktracker机器上