Hadoop YARN框架调研以及问题总结
1.YARN总体介绍
YARN的根本思想是将 JobTracker 两个主要的功能分离成单独的组件,分别是全局资源管理器(Resouce Manager ,RM)和每个应用独有的Application Master(AM)。RM管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。
1.1 RM
RM是全局的资源管理器,负责整个系统资源管理和分配。主要有两个组件组成,调度器(Scheduler),和应用管理器(Applications Manager,ASM)。
1.1.1 调度器(Scheduler)
调度器根据根据容量、队列等限制条件,将系统中资源给各个正在运行的应用程序。资源分配的单位用资源容器(Container)表示。Container是动态资源分配的单位,将内存、CPU、磁盘、网络等资源封装在一起,从而限制每个任务使用的资源量。现在YARN支持Fair Schedule和Capacity Schedule。
1.1.2 Applications Manager
ASM负责管理整个系统中所有的应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster(AM)、监控AM的运行状态并在失败时重新启动AM。
1.2 Application Master
AM主要有三个功能:
A.与RM协商获取资源
B.与NM通信以启动/停止任务
C.监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
1.3 NodeManager
NodeManager(NM)是每个节点上资源和任务管理器。有两个主要作用:
A.定时的向RM汇报本节点的资源使用情况和各个Container的运行状态。
B.接收并处理AM的任务启动/停止等请求
1.4 Container
Container是YARN为了将来作资源隔离而提出的一个框架。每个任务对应一个Container,且该任务只能在该Container中运行。
2. YARN的部署
<!--[if !supportLists]-->1. <!--[endif]-->编译
mvn package -Pdist,native -DskipTests
<!--[if !supportLists]-->2. <!--[endif]-->安装环境
茂源已经将安装好的rpm包放到yum的服务器,因此修改repos即可。
路径/etc/yum.repos.d/
<!--[if !supportLists]-->A.<!--[endif]-->添加sogou-ws-gym.repo,其内容如下:
[sogou-ws-gym]
name=Sogou WebSearch internal packages
baseurl=http://gym.wd.djt.ss.vm.sogou-op.org/yum-release/cdh4
gpgcheck=0
enabled=1
<!--[if !supportLists]-->B. <!--[endif]-->执行命令yum clean all
<!--[if !supportLists]-->C. <!--[endif]-->yum list| grep hadoop可以看到所有的hadoop的包
<!--[if !supportLists]-->D.<!--[endif]-->yum install 所有cdh4.3.0 hadoop版本是2.0.0的包,可以使用一个脚本来执行,后续完成。
<!--[if !supportLists]-->3. <!--[endif]-->更新配置
路径/etc/hadoop/conf
主要修改的配置文件:core-site.xml,hdfs-site.xml,mapred-site.xml(支持MR任务),yarn-site.xml,slaves(添加集群中所有host)
可以scp已经配置OK的xml,并修改hostname来完成更新配置
scp root@rsync.cloud-dev101121129.web.cnc.ss.nop.vm.sogou-op.org:/etc/hadoop/conf/* ./
注意配置classpath
<!--[if !supportLists]-->4. <!--[endif]-->启动YARN
路径/etc/init.d/
启动服务service hadoop-hdfs-namenode init
service hadoop-hdfs-namenode start
service hadoop-hdfs-datanode start
service hadoop-yarn-resourcemanager start
service hadoop-yarn-nodemanager start
根据service启动时打印的log的路径来看各个service启动时出错信息,使用jps命令来看各个service有没有正常启动。
典型错误:
A.启动hdfs的service时,需要mkdir namenode和datandoe的路径,并保证其用户的group都是hdfs,否则会出现permission denied
3. YARN distributeshell的启动
在yarn的目录下,启动如下命令:
sudo -u hdfs hadoop jar share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.0.0-cdh4.3.0.jar org.apache.hadoop.yarn.applications.distributedshell.Client -jar share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.0.0-cdh4.3.0.jar -shell_command ls -num_containers 10 -container_memory 350 -master_memory 350
4. SVC系统面临问题
使用YARN框架整合资源提高集群利用率面临的问题:
A.按时间调度的策略
B.严格控制container资源问题
C.基于RPC框架的CS通信模型
对于问题A,使用cgroup动态修改的功能
可以通过 LXC 读和操纵 cgroup 文件系统的一些部分。要管理每个容器对 cpu 的使用,可以通过读取和调整容器的 cpu.shares 来进行:
1.lxc-cgroup -n name cpu.shares
2.lxc-cgroup -n name cpu.shares howmany
使用cgroup来严格限制container资源,并支持动态修改
对于问题B
对于YARN本身架构采用了cgroup来限制container的CPU资源,利用线程来控制内存的总体资源。
现在需要在NodeManager中增加一个Monitor接口,此接口的主要作用是:保障volunteer机器的使用权
对于问题C
有两种方案实现:
A.实现基于RPC的框架的通信模型,在client端提供接口SendRecvData(request, &reponse);同时在server端提供接口ProcessData(request, &reponse)。用户需要联编通信模型的库。具体的实现可以在详设中说明。
B.类似hadoop streaming模型,对于client端,调用如下的编程模式:cat 提供需要计算的数据 | ./SendRecv > temp。对于client端,我们需要实现SendRecv接口。
对于Server端,调用如下的模式:./RecvData ,对于Server端需要实现RecvData,同时将用户实际的计算程序作为RecvData的子进程,需要实现进程间的通信,并同时需要注意对于多线程的程序,需要保证输入和输出数据的一致性。
对于需要计算的数据的格式,可以按照sequence file的格式,value-len value的形式。
用户不需要关心数据传输的过程。
<!--[if !supportLists]-->5. <!--[endif]-->内存收集方式实验
对于内存收集使用/proc/meminfo的形式,针对问题:对于将文件mmap到内存后,对于cached内存影响的问题
使用如下的代码进行测试:
#include <sys/mman.h> /* for mmap and munmap */
#include <sys/types.h> /* for open */
#include <sys/stat.h> /* for open */
#include <fcntl.h> /* for open */
#include <unistd.h> /* for lseek and write */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int fd;
void *mapped_mem, * p;
int flength = 1024;
void *start_addr = 0;
fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
flength = lseek(fd, 1, SEEK_END);
printf("get file:%s, len:%d!\n", argv[1], flength);
write(fd, "\0", 1); /* 在文件最后添加一个空字符,以便下面printf正常工作 */
lseek(fd, 0, SEEK_SET);
while ( 1 ) {
mapped_mem = mmap(start_addr, flength, PROT_READ, MAP_PRIVATE, fd, 0);
/* 使用映射区域. */
printf("%s\n", (char *)mapped_mem);
close(fd);
const int alloc_size = 32 * 1024;
char* memory = (char *)malloc (alloc_size);
mlock (memory, alloc_size);
sleep(100000);
}
munmap(mapped_mem, flength);
return 0;
}
执行上述程序,传入一个长度为4247B(约4.2K)的文件。其cached内存的大小,执行前后基本没有增加。如下图:
程序执行前 程序执行后
多次测试,发现cached的数据在前后增加并不显著。
对于mapped的内存:
程序执行前 程序执行后
Mapped的数据增加了48KB(尚不能解释为什么增长这么多)。但可以看出对于mmap文件映射后,cached的数adf据无明显变化,而应该占用的是mmaped的内存。
同样测试mlock后,cached的数据也无明显变化,仅占用了Mlocked的内存,如下图:
程序执行前 程序执行后
因此,可以知道,mlock只占用了Mlocked的内存。
根据上述的实验,可以知道:对于总机的内存占用情况,可以使用下述的公式计算:
MemFree + Cached – Mlocked – Mapped
相关推荐
YARN (Yet Another Resource Negotiator) 是 Hadoop 的资源管理器,它提供了一个通用的资源管理和调度框架。通过 YARN,不同类型的计算任务可以共享同一集群的资源,从而提高了资源利用率和灵活性。 #### 六、Spark...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它是大数据处理领域的核心工具,尤其在云计算领域有着广泛的应用。本篇将深入探讨Hadoop的各个方面,包括HDFS(Hadoop Distributed File System)架构、...
首先,Hadoop是解决大数据处理问题的核心框架,它的主要目标是实现对海量数据的分布式存储和计算。1.1章节中,我们了解到Hadoop主要是为了解决传统单机系统在面对大数据量时的性能瓶颈和扩展性问题。1.2章节深入解析...
- **YARN**:资源管理和任务调度框架,主要负责资源的监控、分配和管理,以及应用程序的具体调度和协调。 #### 五、数据计算与实时处理 随着业务需求的变化,数据仓库也逐渐引入了实时处理能力,以便更好地满足...
- **MapReduce**:是Hadoop的核心计算框架,通过将复杂任务拆分成可并行处理的map和reduce阶段,实现了大数据的批量处理。 2. **Spark**: - **内存计算**:Spark引入了Resilient Distributed Datasets (RDDs),...
Spark 支持多种部署模式,包括独立模式、Hadoop YARN、Apache Mesos 以及 Kubernetes。在独立模式下,Spark 自行管理资源;在 YARN 或 Mesos 上,Spark 作为应用提交给资源管理系统,由它们分配和调度资源;而在 ...
本文档主要探讨了几个关键的技术方案,包括数据源存储、分布式计算引擎、以及机器学习框架,并分析了它们的优缺点。 首先,分布式文件系统如HDFS(Hadoop Distributed File System)是大数据存储的基础。HDFS为大...
4. 分布式系统框架:这个工程师熟悉 Zookeeper、Kafka、Flume、YARN、Sqoop 等分布式系统框架。 5. 推荐算法:这个工程师了解基于 CB、CF、Mahout 的推荐算法。 6. 项目经验:这个工程师拥有丰富的项目经验,包括...
- 大数据处理框架如Hadoop生态系统(HDFS、MapReduce、YARN、Hive、Pig等)和Spark生态系统(Spark Core、Spark SQL、Spark Streaming、MLlib等)是实现大数据处理的关键工具。 - 数据安全和隐私保护也是大数据...
Hadoop/YARN是经典的分布式计算框架,MapReduce是其核心编程模型,用于大规模数据处理。学生需要通过编程练习来理解这两个概念。Spark作为更现代的处理引擎,提供了更高效的内存计算和交互式数据分析能力。Lab 3引导...
- 大数据基础平台搭建:构建包括硬件、软件在内的大数据平台,如Hadoop、Spark等分布式计算框架,提供数据存储和处理的基础架构。 - 数据采集:采用各种手段,如API接口、日志抓取、传感器数据等,实现数据的全面...
- **技能要求**:精通多种大数据处理技术,如Spark、Hadoop生态(HDFS、Yarn、Hbase、Hive等),并且熟悉主流的NoSQL数据库(如MongoDB)和消息队列(如Kafka)。 ##### 2. 教育背景 - **要求描述**:一般要求本科...
在移动互联网时代,各式各样的新业务和新产品不断出现,通信市场的用户总体规模增长速度变缓,使运营商之间的竞争愈加激烈,新产品营销的时效性和准确度问题亟需解决。实时营销作为新的营销方式,具有较高的实时性,通过...