HDFS內存配置


下圖是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"

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM