参考答案:
hadoop中常用的调度器有三种:
1)FIFO:(hadoop2.x之前的默认调度器),它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。
2)计算能力调度器(容量调度器)Capacity schedular:(hadoop2.x之后的默认调度器)支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定。调度时,首先按照以下策略选择一个合适队列:计算每个正在运行任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择队列中一个作业,按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。
3)公平调度器Fair scheduler 同计算能力调度器类似,支持多队列多用户。每个队列的资源量可配置,同一队列中的作业公平共享队列中所有资源。
参考答案:
如果你的场景需要先提交的JOB限制性,那就FIFO。
如果想着大家都有机会获取到资源,就得用容量调度,公平调度。容量调度不好的地方是多个队列资源不能相互抢占,提前就把资源分走了,哪怕那个队列没有任务,所以一般都是公平调度。
FIFO调度没人单独用。公平调度支持在某个队列内部选择公平调度还是FIFO。
所以可以认为公平调度是一个混合的调度器。
参考答案:
(1)单机模式
(2)伪分布模式
(3)分布式
参考答案:
(1)Hadoop Streaming框架最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行;map/reduce程序只要遵循从标准输入stdin读,写出到标准输出stdout即可。
(2)Hadoop Streaming容易进行单机调试,通过管道前后相接的方式就可以模拟streaming, 在本地完成map/reduce程序的调试 # cat inputfile | mapper | sort | reducer > output 。
(3)streaming框架还提供了作业提交时的丰富参数控制,直接通过streaming参数,而不需要使用java语言修改;很多mapreduce的高阶功能,都可以通过steaming参数的调整来完成。
参考答案:
Combiner 发生在map节点;sort排序发生在map和reduce阶段。
参考答案:
(1)大小表关联用Reduce join 的分布式缓存。
(2)两个大表关联:Reduce join + BloomFilter。
参考答案:
步骤1:用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster、用户程序等。
步骤2:ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
步骤3:ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控他的运行状态,直到运行结束,即要重复步骤4-7。
步骤4:ApplicationMaster采用轮询的方式通过RPC协议找ResourceManager申请和领取资源。
步骤5:一旦Application申请到资源后,便与对应的NodeManager通信,要求启动任务。
步骤6:NodeManager为任务设置好运行环境,包括环境变量、JAR包、二进制程序等,然后将任务启动命令写到另一个脚本中,并通过运行该脚本启动任务。
步骤7:各个任务通过RPC协议向ApplicationMaster汇报自己的状态和进度,ApplicationMaster随时掌握各个任务的运行状态,从而可以再任务失败时重新启动任务。在应用程序运行过程中,用户可以随时通过RPC协议ApplicationMaster查询应用程序的当前运行状态。
步骤8:应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。
参考答案:
文件 数据块数量 map数量
64kb 1 1
65MB 2 1
200MB 4 4
参考答案:
(1)MapReduce中的shuffle过程中使用了缓存机制,map task的输出数据需要先写入内存缓冲区中,缓冲区的作用是批量收集map结果,减少磁盘IO的影响。
(2)Hbase中的缓存分了两层:MemStore 和 BlockCache,MemStore供写数据使用,BlockCache供读数据使用
参考答案:
1)NameNode :管理hdfs名字空间、数据块映射关系,配置副本策略,接受读写请求。
2)DataNode:存储数据,执行数据的读写操作。
3)ResourceManager:处理客户端请求,启动并监控ApplicationMaster,监控NodeManager,资源分配与调度。
4)NodeManager:单节点资源管理,处理来自ResourceManager和ApplicationMaster的指令。
5)Zookeeper:协调服务,实现NN RM 高可用 。
6)FailoverController(zkfc ):不断监听本机NN的状态,然后周期性的向Zookeeper发送心跳,如果当前NN关掉了,重新选举NN Active。
7)journalnode:确保两个NN元数据保持同步。