Hadoop在廉价的服务器上就可以运行
分布式并行
MapReduce,容错性好,普通的PC机,简单,批处理,非实时,数据密集型
MapReduce主要是针对大数据的,不需要了解底层的细节,只要关注业务逻辑就好了。
交作业:拍照片上传。
设计理念:计算向数据靠拢,是为了避免传输网络开销。
采用了主从结构:master/slave
master上运行jobtrack
slave上运行tasktracker
大部分计算机节点都是tasktracker
每一个部分的作用:
1.客户端client
各个clients提交给jobtracker
2.jobtracker
负责资源的监控和作业调度。
3.tasktracker
会周期性的通过心跳,将自己的任务执行状况回报给jobtracker
槽:slot
tasktracker把自己的计算能力和内存分为很多槽
槽也分为两种,分别为map slot和reduce slot两种
分别供maptask和reduce task
4.task 任务
分为两个也是map和reduce
mapreduce的工作流程
1.不同的map任务之间不会通信
2.不同的reduce任务之间也不会发生任何信息交换
主要出于这样的考虑:防止流水线现象(上一级的任务拖延会造成下一级任务的拖延)
文件过来后,首先经过inputformat,检验输入格式怎么样
然后再进入split
例如,如果有两个节点,map之间、shuffle都不互相连接
shuffle原意是“洗牌”
split:
对于MapReduce而言,处理单位就是split
每一个block都有三个副本,物理上都放在不同的DataNode
相当于6个block放在4个split中
map任务的数量:
分片太多和太少都不行,
理想的分片大小是一个HDFS块
reduce任务的数量
通常设置比reduce比槽数目稍小一点点
map端的shuffle过程:
现在内存里读写
避免反复读写磁盘
在缓存中,“键值对”
map中是有限的。
默认值一般是100M,但可以修改
溢写操作:比例是0.8
相当于100M中,有80M满了,那么我这80M可以源源不断的存到磁盘中
分区,排序,合并