龙空技术网

Yarn_生产环境核心参数配置案例---大数据之hadoop3.x_0150

添财程序猿 76

前言:

现在同学们对“hadoop内存配置”都比较注重,小伙伴们都想要分析一些“hadoop内存配置”的相关资讯。那么小编在网摘上搜集了一些有关“hadoop内存配置””的相关知识,希望姐妹们能喜欢,你们快快来了解一下吧!

然后我们来,看个配置yarn 生产环境核心参数的案例

首先我们的需求就是,我们要统计1G数据中,每个单词出现的次数.

我们有3台服务器,然后每台配置4G,4核cpu,4线程.可以看到

然后就是去配置yarn的参数,按照我们实际的环境

我们先分析一下需求,可以看到,我们有1G的文件需要处理,那么

如果我们每个maptask用默认的处理128M的内容,那么需要8个MapTask 1个reducetask

1个 mrappmaster 也就是我们需要 8 +1 +1 10个容器,那么,我们有3台服务器,10个任务

那么10 / 3 = 3 个任务,也就是,我们每台服务器要运行至少3个任务..也就是3个container对吧

这个时候,我们有10个任务需要运行,我们可以这样划分:

4,3,3 这3台服务器,分别运行 4,3,3个任务

3个任务的 我们可以 其中有一个个来 运行 mrappmaster对吧,这个占用资源少.

然后至于服务器,我们可以在京东搜索一下去看看,可以看到标明了,几核几线程的...对吧,还有内存

硬盘多大

可以看到我这里,看性能CPU,打开资源监视器

可以看到我这个就是有16个核心对吧

然后还可以去京东去看看,机架就是长上面这样子的.

这个机架一般是可以防静电之类的.

然后我们去配置参数,可以看到首先去配置capacityscheduler,这个容量调度器,我们中小公司,我们用这个容量调度器就可以了.

然后我们再去看线程数的设置,可以看到,默认是50,这个是resourcesmanager来处理请求的线程数,

我们一共3台机器,每个机器4线程的,那么我们一共可以开12个线程,所以这里,默认50个线程是不合理的,那么这里我们设置成8个线程.

然后配置这个 yarn.nodemanager.resource.detect-hardware-capabilities 这个参数

这个配置是否自动检测硬件配置可以看到设置成false,默认就可以,我们要手动检测对吧.

可以看到这个配置 yarn.nodemanager.resource.count-logical-processors-as-cores

这个是否将虚拟的核数当做CPU的核数, 这里我们设置成false,因为我们每个机器的配置都一样对吧,我们说如果你的配置,比如3台机器有I5,I7,I3的,配置不一样,这个时候你就可以把

这个配置打开.把I7,虚拟成2个I5来用对吧.

让算力均衡.

然后这个,yarn.nodemanager.resource.prores-vcores-multiplier 这个,默认是1.0对吧,就是说

1台机器就当1个来用,比如你想用,2核心 4线程的 设备,但现在你有个,4核心8线程的,那么这个时候,

这个设置为2.0,那么就把这个4核心8线程的设备给虚拟出2台 2核心4线程的设备了.

然后这里,设置nodemanager的内存数,可以看到默认是8G,但是我们只有4G对吧,所以这里

改成4096,改成 yarn.nodemanager.resource.memory-mb是 4G

然后我们再看yarn.nodemanager.resource.cpu-vcores 这里 4个CPU,4个线程

虽然默认是8个,默认nodemanager使用8个核心工作,而这里我们只有4个核心,所以这里设置成4

注意这些配置都是针对单台nodemanager设置的.

可以看到nodemanager的最小内存是1G,这个是没问题的,这样就可以了.

然后 最大内存我们知道我们的机器,最大内存是4G,系统还得用一部分,这里我们设置成最大内存是

2G,不能用默认的8G对吧.

并且一个容器占用2G的话,我4G还可以用两个容器对吧.

然后最小的CPU可以看到默认是1个,这个没问题,我们有4核cpu对吧

然后最大CPU核心数,可以看到默认是4个,我们,修改为2个,因为我一共有4个核心,不能都分出去了对吧.

这个虚拟内存检测,这里默认是打开的,我们修改为关闭

为什么关闭呢?

我们来看一下

首先比如说我们实际上有4G的,服务器内存,这个是真实的内存,这个是不可以设置的,

然后一般,可以看到虚拟内存是屋里内存的2.1倍, 虚拟内存就是8.4G,但是从centos7开始,

这个对虚拟内存的使用,java虚拟机和Linux系统就不太友善了,各自为政.

这个时候Linux系统,为java8虚拟机开辟了一块虚拟内存,比如5个G,但是java8虚拟机他不用,

他自己又弄了一块..4G,但是真正java8虚拟机使用的时候,根本用不到4G...所以就造成了

Linux系统给他开辟的这5G的内存,就浪费了,所以在centos7和java8之间,我们一般关闭这个配置.

然后我们要去配置就可以了

但需要注意,因为这里我的,3台机器的配置都是一样的...所以我直接设置成一样的配置就可以了

,但是如果你的机器,比如一台是64G,一台是128G,一台是16G内存,那么这个时候,你就不能

这样配置了,你需要,单独配置每台nodemanager对吧.

首先我们进入 cd /opt/module/hadoop-3.1.3/文件夹

然后

然后我们进入 cd /etc/hadoop/

然后

执行 vim yarn-site.xml

然后

走到文件的末尾

然后把之前的配置,全部都粘贴过来

可以看到然后就可以,退出保存了,然后再把配置,分发到其他的服务器上去

执行 xsync yarn-site.xml 这样分发这个配置文件

好分发完了以后,我们去开启集群

myhadoop.sh start 去开启集群

好启动完了,我们去看看

这里jpsall 可以看到,没问题对吧

有hadoop102 到104 这3台都运行了

然后我们去hadoop集群管理后台去看一下:

可以看到对应的内存,已经变成12G了对吧,因为我们3台每台4G,然后

Minimum Allocation 最小内存是1024,最大内存是Maximum Allocation 是2048

好启动好以后,我们去执行wordcount程序

在 /opt/module/hadoop-3.1.3 这个目录下,然后执行

hadoop jar share/hadoop/

回车去看一下目录

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /input2

我们输入是input 输出是input2

我们去看一下保证input2没有这个输出文件夹

我们把output1,output都删除掉

然后上面我们回车,去执行,wordcount程序

然后执行的时候,我们去hadoop集群去看看,可以看到Allocated Memory

Allocated 是划拨的意思 可以看到我们配置了最大是2G内存.

他这里使用了也是2G内存对吧.

然后

我们去看执行情况可以看到,正在执行对吧

然后可以看到现在已经用了 MEMORY USED 是2G的内存,然后Memory Total这个是总共内存是12GB对吧

Minimum Allocation 已经分配最小内存是1024 1G对吧,分配最大内存是Maximum Allocation 2048 2G对吧

标签: #hadoop内存配置