下图是HDFS的架构:

从上图中可以知道,HDFS包含了NameNode、DataNode以及Client三个角色,当我们的HDFS没有配置HA的时候,那还有一个角色就是SecondaryNameNode,这四个角色都是基于JVM之上的Java进程。既然是Java进程,那我们肯定可以调整这四个角色使用的内存的大小。接下来我们就详细来看下怎么配置HDFS每个角色的内存

我们这里说配置的内存主要还是指JVM的堆内存

默认的内存配置

NameNode

当启动我们在视频课程中搭建好HDFS集群后,我们可以在master上通过如下的命令来查看NameNode和SecondaryNameNode这两个进程占用的堆内存:

## 在master机器上执行
ps -ef | grep NameNode

  得到的结果如下:

上图中第1处的-Xmx1000m表示NameNode的堆内存是1000M

上图中第2处的-Xmx1000m表示SecondaryNameNode的堆内存是1000M

DataNode

我们可以通过如下的命令来查看slave1和slave2上的DataNode占用的堆内存:

ps -ef | grep DataNode

  得到的结果如下:

从上图可以看出,两个slave上的DataNode的堆内存都是1000M

Client

当我们执行下面命令的时候:

hadoop fs -ls /

  其实也是启动一个名字为FsShell的Java进程,如下图:

这个FsShell进程就是一个Client进程,这个Client进程的默认堆内存是512M

结论

  • HDFS集群中的角色(NameNode、SecondaryNameNode、DataNode)的默认的堆内存大小都是1000M
  • Client进程的堆内存大小是512M

如何配置内存

要想知道如何配置每个角色的内存,我们首先需要搞明白上面默认的内存配置是在哪里配置的。

这些默认的配置都是在Hadoop的安装目录下的配置目录下文件hadoop-env.sh中,即/home/hadoop-twq/bigdata/hadoop-2.7.5/etc/hadoop/hadoop-env.sh

hadoop-env.sh文件中有几个和内存相关的配置:

我们按照上图从上往下,分别仔细看下

# The maximum amount of heap to use, in MB. Default is 1000.
#export HADOOP_HEAPSIZE=
#export HADOOP_NAMENODE_INIT_HEAPSIZE=""

  

HADOOP_HEAPSIZE:表示HDFS中所有角色的最大堆内存,默认是1000M,这个也就是我们所有HDFS角色进程的默认堆内存大小

HADOOP_NAMENODE_INIT_HEAPSIZE:表示NameNode的初始化堆内存大小,默认也是1000M

# Extra Java runtime options.  Empty by default.
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"

  HADOOP_OPTS: 表示HDFS所有角色的JVM参数设置,对于HDFS所有角色的通用的JVM参数可以通过这个配置来设置。默认的话是空的配置

# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER
:-INFO,NullAppender} $HADOOP_NAMENODE_OPTS"

  HADOOP_NAMENODE_OPTS:针对NameNode的特殊的JVM参数的配置,默认只设置hadoop.security.loggerhdfs.audit.logger两个日志级别信息参数

export HADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"

  

HADOOP_DATANODE_OPTS:针对DataNode的特殊的JVM参数的配置,默认只设置hadoop.security.logger日志级别信息参数

export HADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUD
IT_LOGGER:-INFO,NullAppender} $HADOOP_SECONDARYNAMENODE_OPTS"

  HADOOP_SECONDARYNAMENODE_OPTS:针对SecondaryNameNode的特殊的JVM参数的配置,默认只设置hadoop.security.loggerhdfs.audit.logger两个日志级别信息参数

export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS"

 HADOOP_PORTMAP_OPTS:这个是在HDFS格式化时需要的JVM配置,也就是执行hdfs namenode -format时的JVM配置 

# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS"

  

HADOOP_CLIENT_OPTS:表示HDFS客户端命令启动的JVM的参数配置,这里配置的JVM的堆内存的大小为512M。这个配置是针对客户端命令(比如fs, dfs, fsck, distcp等)的JVM堆内存配置

NameNode、DataNode以及Client进程堆内存的配置方式

NameNode、DataNode以及Client进程堆内存是在hadoop-env.sh中的配置HADOOP_NAMENODE_OPTSHADOOP_DATANODE_OPTS以及HADOOP_CLIENT_OPTS配置的

所以我们如果想配置NameNode的堆内存可以有两种方式:

## 第一种方式
export HADOOP_NAMENODE_INIT_HEAPSIZE="20480M" ## 第二种方式
export HADOOP_NAMENODE_OPTS="-Xms20480M -Xmx20480M -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender} $HADOO
P_NAMENODE_OPTS"

  

如果我们想配置DataNode的堆内存可以有以下两种方式:

## 第一种方式
export HADOOP_HEAPSIZE=2048M ## 第二种方式,这种方式会覆盖掉上面第一种方式的配置
export HADOOP_DATANODE_OPTS="-Xms2048M -Xmx2048M -Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"

  如果我们想配置Client的堆内存可以有如下方式:

export HADOOP_CLIENT_OPTS="-Xmx1024m $HADOOP_CLIENT_OPTS"

  

HDFS内存配置的更多相关文章

  1. 第6章 HDFS HA配置

    目录 6.1 hdfs-site.xml文件配置 6.2 core-site.xml文件配置 6.3 启动与测试 6.4 结合ZooKeeper进行自动故障转移 在Hadoop 2.0.0之前,一个H ...

  2. STL库的内存配置器(allocator)

    正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...

  3. eclipse启动时虚拟机初始内存配置

    eclipse启动时虚拟机初始内存配置: -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m

  4. JBOSS最大连接数配置和jvm内存配置

    一.调整JBOSS最大连接数. 配置deploy/jboss-web.deployer/server.xml文件 .       <Connector         port="80 ...

  5. SQLServer—系统中的内存配置

    前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE来限制内存.但是,在SQLServer2012以后,这个选项将被弃用,所以不能使用 ...

  6. STL内存配置器

    一.STL内存配置器的总体设计结构 1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时, 使用第一级配置器,否则使用 ...

  7. 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置

    原文:第十七章--配置SQLServer(2)--32位和64位系统中的内存配置 前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE ...

  8. SGI STL内存配置器存在内存泄漏吗?

    阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...

  9. Tomcat和JDK的内存配置

    1.jvm内存管理机制: 1)堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Ja ...

随机推荐

  1. 怎么又出错了?盘点java中最容易出现的错误

    现如今,java已经广泛应用各种软件开发领域.基于面向对象的设计,java屏蔽了诸如C,C++等语言的一些复杂性,提供了垃圾回收机制,平台无关的虚拟机技术,Java创造了一种前所未有的开发方式.所以, ...

  2. python zip函数(11)

    一.zip函数描述和使用 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,返回的结果可以直接强转为list列表,这样做的好处是节约了不少的 ...

  3. LeetCode 139. 单词拆分(Word Break)

    139. 单词拆分 139. Word Break

  4. Python 实用第三方库安装方法

    下面将自己学习过程中总结的Python第三方库的安装常用三种方法分享给大家,本人推荐前面两种方式.(已安装Python) 方法一:pip命令行直接安装 打开cmd命令窗口,通过命令 pip insta ...

  5. 解决python中的Non-UTF-8 code starting with ‘\xbs4’ in file错误

    出现错误如下图: 主要原因为编辑python脚本使用的编辑器编码有问题.我使用的编辑器是notepad++,由于没有做Python语言编辑配置,默认使用的是ANSI编码(右下角位置有编码格式),如下: ...

  6. linux route详细解读

    route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...

  7. Python接口自动化基础---环境准备

    安装requests模块 pip install requests request帮助文档查看 import requests print(help(requests)) Help on packag ...

  8. Linux环境下安装mysql服务

    我使用的是阿里云的ECS服务,系统是CentOS7,安装mysql版本是5.7 第一步,通过 wget -i -c http://dev.mysql.com/get/mysql57-community ...

  9. 行内块inline-block元素之间出现空白间隙原因及解决办法

    首先,来看下具体的问题,下面是用inline-block布局实现的两边固定宽度,中间自适应的html代码: 1 2 3 4 5 6 7 8 9 <section class="layo ...

  10. "Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办"

    今年年初的时候,所谓"Oracle要对Java收费"的新闻,在网上传得沸沸扬扬.这个新闻被专业人士视为标题党,而国内众多技术论坛,比如知乎社区上,有很多大神对"Java收 ...