2. Hadoop将mapreduce的输入数据划分成等长的小数据块,成为输入分片,简称“分片”(split),每个分片的大小趋向于HDFS的一个块的大小,默认是64MB。
3. Hadoop为每个分片构建一个map任务,每个DataNode节点只能有一个map。
4. 机架感知可以确定两个节点是否在同一机架上。
5. Map任务将其输出写入本地硬盘,reduce任务将输出结果写入HDFS。
6. 单个reduce任务的输入通常来自所有mapper的输出。
7. 一个完整的MapReduce至少发生两次网络传输。Map输出经过排序发送到reduce,这一过程成为shuffle,通过网络宽带传输。Reduce将结果写入HDFS这一过程也需要通过网络传输。
每日一问
: Yarn调度策略有几种?
1. Yarn资源调度管理器。Yarn的自愿抽象比较简单,只有两种资源:内存和CPU。其中内存资源比较关键,直接决定任务能否成功。如果某个任务需要的内存过多,可能无法执行或者OOM。CPU资源的限制比较弱,只限定了一台NM上能并发执行多少任务。如果并发的过多,执行的可能比较慢。
2. Container是RM分配资源的基本单位。每个Container包含特定数量的CPU资源和内存资源,用户的程序运行在Container中,有点类似虚拟机。RM负责接收用户的资源请求并非配Container,NM负责启动Container并监控资源使用。如果使用资源(目前只有内存)超出Container的限制,相应进程会被NM杀掉。可见Container不止用于资源分配,也用于资源隔离。理论上说不同Container之间不能互相影响。
3. yarn常用调度器:
调度器主要有两个作用:1.决定如何划分队列2.决定如何分配资源(分为队列分配资源和为单个application分配资源)
- FIFO
u 先进先出调度策略。所有的application按照提交的顺序来执行,这些application都放在一个队列中,只有在执行完一个后,下一个才会执行。
u 缺点:耗时的长任务会导致后提交的任务一直处于等待状态;不适合共享集群。
- CapacityScheduler
u Capacity Scheduler为每个人分配一个队列,每个队列占用的集群资源是固定的,但是可以不同,队列内部还是采用FIFO调度的策略。
- FairScheduler
u Fair Scheduler 试图为每个任务均匀分配资源,比如当前只有任务 1 在执行,那么它拥有整个集群资源,此时任务 2 被提交,那任务 1 和任务 2 将平分集群资源,以此类推
- 参考链接:
http://blog.youkuaiyun.com/xiaoxiangzi222/article/details/52808013
http://blog.sina.com.cn/s/blog_9d6887fe0102wibo.html
https://www.iteblog.com/archives/1536.html?from=like