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.logger
和hdfs.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.logger
和hdfs.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_OPTS
、HADOOP_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内存配置的更多相关文章
- 第6章 HDFS HA配置
目录 6.1 hdfs-site.xml文件配置 6.2 core-site.xml文件配置 6.3 启动与测试 6.4 结合ZooKeeper进行自动故障转移 在Hadoop 2.0.0之前,一个H ...
- STL库的内存配置器(allocator)
正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...
- eclipse启动时虚拟机初始内存配置
eclipse启动时虚拟机初始内存配置: -Xms256M -Xmx512M -XX:PermSize=256m -XX:MaxPermSize=512m
- JBOSS最大连接数配置和jvm内存配置
一.调整JBOSS最大连接数. 配置deploy/jboss-web.deployer/server.xml文件 . <Connector port="80 ...
- SQLServer—系统中的内存配置
前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE来限制内存.但是,在SQLServer2012以后,这个选项将被弃用,所以不能使用 ...
- STL内存配置器
一.STL内存配置器的总体设计结构 1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时, 使用第一级配置器,否则使用 ...
- 第十七章——配置SQLServer(2)——32位和64位系统中的内存配置
原文:第十七章--配置SQLServer(2)--32位和64位系统中的内存配置 前言: 本文讲述32位和64位系统中的内存配置,在SQLServer 2005/2008中,DBA们往往尝试开启AWE ...
- SGI STL内存配置器存在内存泄漏吗?
阅读了SGI的源码后对STL很是膜拜,很高质量的源码,从中学到了很多.温故而知新!下文中所有STL如无特殊说明均指SGI版本实现. STL 内存配置器 STL对内存管理最核心部分我觉得是其将C++对象 ...
- Tomcat和JDK的内存配置
1.jvm内存管理机制: 1)堆(Heap)和非堆(Non-heap)内存 按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Ja ...
随机推荐
- 「中山纪中集训省选组D1T1」最大收益 贪心
题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...
- LeetCode 151. 翻转字符串里的单词(Reverse Words in a String)
151. 翻转字符串里的单词 151. Reverse Words in a String
- 【剑指offer】面试题 6. 从尾到头打印链表
面试题 6. 从尾到头打印链表 NowCoder 题目描述 输入一个链表的头结点,从尾到头反过来打印出每个结点的值. Java 实现 ListNode Class class ListNode { i ...
- 一个php将数据库的数据导出到excle表格中的小dome
首先我们需要下载个PHPExcel,PHPExcel下载地址链接:https://pan.baidu.com/s/1nxpAc45 密码:qgct 下面来写个dome: <?php //把数据写 ...
- BZOJ5104 Fib数列 二次剩余、BSGS
传送门 发现只有通项公式可以解决考虑通项公式 \(F_n = \frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^ ...
- 组件系列之RabbitMQ
官网: https://www.rabbitmq.com/getstarted.html 1.四种交换机 TODO... 2.消费者获取消息方式:推 和 拉 拉取:每次拉取一条,循环拉取需要的条数在批 ...
- vmware的三种网络模式讲解
vmware有三种网络设置模式,分别是Bridged(桥接),NAT(网络地址转换),Host-only(私有网络共享主机) 1.Bridged(桥接) 桥接模式默认使用的是:VMnet0 什么是桥接 ...
- Hadoop之HDFS读写流程
hadoophdfs 1. HDFS写流程 2. HDFS写流程 1. HDFS写流程 HDFS写流程 副本存放策略: 上传的数据块后,触发一个新的线程,进行存放. 第一个副本:与client最近的机 ...
- centos7 设置 查看 开机 启动项
1.查看开机自启项centos7自启项已不用chkconfig改为:systemctl list-unit-files左边是服务名称,右边是状态,enabled是开机启动,disabled是开机不启动 ...
- Oracle统计、分析和优化环境配置
Oracle统计.分析和优化环境配置 创建批处理文件Login.bat 用于初始化设置系统环境 Login.bat @echo off title eoda mode con cols=140 col ...