20150814-hadoop学习笔记
2015-08-14 10:13
281 查看
1、hadoop 1.0 的 MapReduce作业机制
可以通过一行代码来运行一个MapReduce作业。
客户端:提交MapReduce作业。
jobtracker:协调作业的运行。jobtracker是一个java应用程序,他的主类是JobTracker。
tasktracker:运行作业划分后的任务。tasktracker是java应用程序,他的主类是TaskTracker。
分布式文件系统,用来在其他实体间共享作业文件。
作业提交:
作业的初始化:
(步骤5)JobTracker接收了submitJob()的方法调用后,会把此调用列入 作业调度器 (job scheduler) 进行调度,并初始化一个表示正在运行作业的对象--封装任务和记录信息,以便跟踪任务的状态和进程。
(步骤6)为了创建任务运行列表,作业调度器 首先从hdfs获取 JobClient 已算好的输入分片信息,每个分片一个map,创建reduce任务的数量。
任务的分配:
tasktracker运行一个简单的循环来定期发送“心跳”给jobtracker来告知其是否还存活。心跳是两者之间的消息通道。例如tasktracker已经准备好了去接收新的任务。
对于map任务,jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。尽量做到 数据本地化、机架本地化。
对于map和reduce任务,tasktracker有固定数量的任务槽。例如:一个tasktracker可以同时运行2个map和2个reduce。准确的数量由核的数量和内存大小决定。
任务的执行:
通过HDFS把作业的JAR文件复制到tasktracker所在的文件系统。实现JAR包本地化。
tasktracker新建一个Taskrunner实例来运行任务。
作业的调度:
FIFO先进先出调度。
每个任务都会最大限度的利用集群的资源,也就是说一个很大任务,就会霸占整个集群的资源。
通过mapred.job.priority属性或者JobClient的setJobPriority()方法来设定优先级别(可以选择),但是不支持抢占。所以高优先级的任务也要等已经开始了的低优先级任务跑完了才能开始。
Fair Scheduler让每个用户公平的共享集群能力。
它能让某个用户的短的作业在合理的时间内完成,即便是另一个用户的长时间作业正在运行。
每个用户获得的资源不会因为任务的多少而有所不同。
每个用户都有自己的作业池。
Fair Scheduler支持抢占,如果一个作业池没有得到足够的资源,它会终止其他池的资源过多的任务,以便把作业槽分给运行资源不足的池。
Fair Scheduler是一个后续模块。要使用它,需要把JAR包放在Hadoop的类路径(classpath),即把它从hadoop的contrib/fairscheduler目录下复制到lib目录下。设置mapred.jobtracker.taskScheduler=org.apache.hadoop.mapred.FairScheduler
2、hadoop 2.0 的 MapReduce作业机制
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
可以通过一行代码来运行一个MapReduce作业。
客户端:提交MapReduce作业。
jobtracker:协调作业的运行。jobtracker是一个java应用程序,他的主类是JobTracker。
tasktracker:运行作业划分后的任务。tasktracker是java应用程序,他的主类是TaskTracker。
分布式文件系统,用来在其他实体间共享作业文件。
作业提交:
作业的初始化:
(步骤5)JobTracker接收了submitJob()的方法调用后,会把此调用列入 作业调度器 (job scheduler) 进行调度,并初始化一个表示正在运行作业的对象--封装任务和记录信息,以便跟踪任务的状态和进程。
(步骤6)为了创建任务运行列表,作业调度器 首先从hdfs获取 JobClient 已算好的输入分片信息,每个分片一个map,创建reduce任务的数量。
任务的分配:
tasktracker运行一个简单的循环来定期发送“心跳”给jobtracker来告知其是否还存活。心跳是两者之间的消息通道。例如tasktracker已经准备好了去接收新的任务。
对于map任务,jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。尽量做到 数据本地化、机架本地化。
对于map和reduce任务,tasktracker有固定数量的任务槽。例如:一个tasktracker可以同时运行2个map和2个reduce。准确的数量由核的数量和内存大小决定。
任务的执行:
通过HDFS把作业的JAR文件复制到tasktracker所在的文件系统。实现JAR包本地化。
tasktracker新建一个Taskrunner实例来运行任务。
作业的调度:
FIFO先进先出调度。
每个任务都会最大限度的利用集群的资源,也就是说一个很大任务,就会霸占整个集群的资源。
通过mapred.job.priority属性或者JobClient的setJobPriority()方法来设定优先级别(可以选择),但是不支持抢占。所以高优先级的任务也要等已经开始了的低优先级任务跑完了才能开始。
Fair Scheduler让每个用户公平的共享集群能力。
它能让某个用户的短的作业在合理的时间内完成,即便是另一个用户的长时间作业正在运行。
每个用户获得的资源不会因为任务的多少而有所不同。
每个用户都有自己的作业池。
Fair Scheduler支持抢占,如果一个作业池没有得到足够的资源,它会终止其他池的资源过多的任务,以便把作业槽分给运行资源不足的池。
Fair Scheduler是一个后续模块。要使用它,需要把JAR包放在Hadoop的类路径(classpath),即把它从hadoop的contrib/fairscheduler目录下复制到lib目录下。设置mapred.jobtracker.taskScheduler=org.apache.hadoop.mapred.FairScheduler
2、hadoop 2.0 的 MapReduce作业机制
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
相关文章推荐
- Linux Terminal fortune
- shell printf 用法
- CentOS 6.5系统中iptables防火墙
- IIS日志-网站运维的好帮手
- linux 更新war中的某个文件
- opencv-阈值处理
- CentOS系统中修改目录的权限后恢复
- CentOS–root密码忘记的解决办法
- mysql_高可用
- linux jdk tomcat项目部署,常见问题
- Linux cp 复制文件或复制文件夹
- linux定时任务的设置
- 在linux环境下,java实现ftp下载获取文件对象数组总是失败的原因
- tomcat如何配置到Windows服务里
- docker 初探
- Linux下设置IP的配置命令
- linux 没有root登陆
- 实现文章指定时间发布功能【php + linux】
- linux下用户切换su,右键菜单添加
- ALSA音频库移植,alsa-utils工具的使用