`

ma-hadoop1 集群内存设置

 
阅读更多

 

 

如下介绍是 hadoop1 的非 yarn下内存分配设置:

 

1. 内存

hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在hadoop-env.sh中设置,参数为HADOOP_HEAPSIZE,默认为1000M。

大部分情况下,这个统一设置的值可能并不适合。例如对于namenode节点,1000M的内存只能存储几百万个文件的数据块的引用。
单独设置namenode的内存,可以通过HADOOP_NAMENODE_OPTS来设置。
单独设置secondrynamenode的内存,可以通过HADOOP_SECONDARYNAMENODE_OPTS来设置,使得它与namenode保持一致。
单独设置datanode的内存,可以通过HADOOP_DATANODE_OPTS来设置
单独设置BalancerNode的内存,可以通过HADOOP_BALANCER_OPTS来设置
单独设置jobtracker的内存,可以通过HADOOP_JOBTRACKER_OPTS来设置
此外,tasktracker启动独立的子JVM以运行map和reduce任务,分配给每个子JVM的内存量由mapred.child.java.opts属性(mapred-site.xml)控制,默认值为200M。

 

星环内存设置:
/etc/hdfs1/conf/hadoop-env.sh   hdfs的内存设置如下

export HADOOP_NAMENODE_OPTS="-Xmx32205m -Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"    31.5G 
export HADOOP_SECONDARYNAMENODE_OPTS="-Xmx4096m -Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"   4G
export HADOOP_DATANODE_OPTS="-Xmx4096m -Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"   4G
export HADOOP_BALANCER_OPTS="-Xmx4096m -Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"   4G

 

/etc/mapreduce1/conf/hadoop-env.sh   mapreduce的内存设置如下

export HADOOP_JOBTRACKER_OPTS="-Xmx4096m -Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"  4G
export HADOOP_TASKTRACKER_OPTS="-Xmx4096m $HADOOP_TASKTRACKER_OPTS"    4G

 


2. 最大map任务数

一个tasktracker能够同时运行最大map任务数,由mapred.tasktracker.map.tasks.maximum属性(mapred-site.xml)控制,默认为2。

 

3. 最大reduce任务数

一个tasktracker能够同时运行最大reduce任务数,由mapred.tasktracker.reduce.tasks.maximum属(mapred-site.xml)性控制,默认为2。

 

如果使用默认每个节点2个map slots, 2个reduce slots时,当来了3个map任务时,第三个map任务会在别的

2个map任务执行完毕后在进入map slots执行。

 

关于map reduce task个数的设置,以及这两个任务内存的分配设置,在星环配置文件中设置如下:

 

 

<property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>24</value>
  </property>
  <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>12</value>
  </property>
  <property>
    <name>mapred.child.java.opts</name>    运行map/reduce任务的内存
    <value>-Xmx4096m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=1 -XX:ParallelGCThreads=1</value>
  </property>

   


 
个人觉得,上述设置后,每个工作节点 使用的内存为:
datanode系统进程内存4G  + tasktracker系统进程内存4G +  tasktracker系统进程内存 4G+ 4G + (24+12)*4G = 156G 

 


上述这种设置下, map+reduce任务数 / 工作节点cpu核数(25)  = 1.5 倍,

在一个128G内存的工作节点下,上面设置的map/reduce任务内存为4G合适,、

这个工作节点不一定就 会将map reduce任务都占满并运行,大多情况下是占满map,

这样, 4G + (24)*4G = 100G  正好还有 28G的内存给当前工作机器别的任务使用,比如集群通讯等


 
4. 小总结:计算节点的内存占用量。 

 

默认情况下,一个同时运行了namenode,secondarynamenode和jobtracker的主节点(系统进程),各自使用1000M内存,所以总计使用3000M(2.92G)。
默认情况下,一个从节点运行了如下守护进程:

1个datanode:默认占用1000M内存。
1个tasktracker:默认占用1000M内存。
上面是hadoop系统进程占据内存
=============================================================================
下面是工作进程占用内存,这里使用map task个数的默认值,reduce task个数的默认值
最多2个map任务:2*200M=400M。
最多2个reduce任务:2*200M=400M。
即默认情况下,一个从节点需要使用2800M内存量(2.74G)。


在一个tasktracker上能够同时运行的任务数取决于这台机器上有多少个处理器。
由于mapreduce作业通常是I/O-bound,因此将任务数设定为超出处理器数也有一定道理,可以获得更好的利用率。
经验法则是任务总数(map任务数与reduce任务数之和)与处理器的比值在1和2之间, 
即任务总数最少为节点处理器个数,
查看当前机器cpu个数:

[root@chinadaas01 ~]# grep "model name" /proc/cpuinfo | wc -l
24

 


例如,假设一台8个处理器的工作节点,每个处理器上运行2个进程,
则可以将最大map任务数和最大reduce任务数分别设置成7(因为还有datanode和tasktracker进程,所以不能设置为8),
各个JVM子任务可用内存设置为400M,则总内存开销=1000M(datanode)+1000M(tasktracker)+7*400M(map)+7*400M(reduce)=7600M(7.5G)

这样配置是否合理,还需要考虑是否给这台机器上的其他进程预留了足够内存,否则可能导致各进程在系统中不断切换,导致性能恶化。
可以使用一些工具来监控集群的内存使用情况来进行优化,例如Ganglia工具。

 

hadoop也可以设置mapreduce操作所能使用的最大内存量,这是分别针对各项作业进行设置的。(详见《hadoop权威指南》117页的“shuffle和排序”小节)

 

即集群中,工作节点 map/reduce任务 个数和任务内存设置,要参考如下公式

 

 

1   工作节点cpu个数=<任务总个数 <= 工作节点cpu个数的2倍

2   保证工作节点内存 > (datanode)内存+(tasktracker)内存+(map task内存)*(map task总个数)+ (redcue task内存)*(reduce task总个数)

 

 

 

 

分享到:
评论

相关推荐

    spark-3.1.3-bin-without-hadoop.tgz

    1. 解压压缩包:使用tar命令解压文件,例如`tar -xvf spark-3.1.3-bin-without-hadoop.tgz`。 2. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`中设置SPARK_HOME,并将Spark的bin目录添加到PATH。 3. 如果在...

    elasticsearch-hadoop-8.8.0

    标题"elasticsearch-hadoop-8.8.0"指的是该组件的一个特定版本,即8.8.0版,这通常包含了针对该版本的优化和新功能。 在描述中提到,“用于hdfs集群访问ES的工具类型,可以将HQL转化为ES识别的命令”,这里有几个...

    spark-2.4.7-bin-without-hadoop

    在运行Spark之前,你需要根据你的环境设置相应的配置参数,比如指定数据源、设置内存分配等。 值得注意的是,随压缩包提供的"使用说明.txt"文件是引导用户正确部署和运行Spark的关键。这份文档通常会详细解释如何...

    spark-assembly-1.5.2-hadoop2.6.0.jar

    Spark-assembly-1.5.2-hadoop2.6.0.jar中的优化包括RDD(弹性分布式数据集)的缓存策略、Task调度优化、内存管理优化等,以确保在大数据处理中实现高效的性能。 7. 开发和调试: 开发者在本地开发时,可以直接...

    spark-3.0.0-bin-hadoop3.2

    为了充分利用Spark的功能,你需要了解如何配置Spark的运行环境,如设置Master和Worker节点,配置内存和CPU资源,以及理解和编写Spark程序。同时,理解Hadoop生态系统的其他组件,如HDFS和YARN,将有助于更好地集成和...

    spark-3.2.1-bin-hadoop2.7.tgz

    1. Spark Core:Spark的基础框架,负责任务调度、内存管理、错误恢复以及与存储系统的交互。 2. Spark SQL:提供了SQL接口和DataFrame/Dataset API,使得开发人员可以方便地进行结构化和半结构化数据处理。 3. Spark...

    spark2.1.0-bin-hadoop2.7

    1. YARN支持:Spark可以作为一个YARN应用提交到Hadoop集群,充分利用集群资源进行任务调度和执行。 2. HDFS兼容:Spark可以直接读写HDFS上的数据,无需将数据复制到其他存储系统。 三、Linux环境下的安装步骤 1. ...

    spark-1.4.0-bin-hadoop1.tgz

    这个特定的压缩包“spark-1.4.0-bin-hadoop1.tgz”包含了Spark 1.4.0版本,并预编译了针对Hadoop 1的依赖,这意味着它可以直接在运行Hadoop 1的集群上使用。 Hadoop是Apache另一个关键项目,是一个分布式文件系统...

    spark-3.4.1-bin-hadoop3.tgz - Spark 3.4.1 安装包(内置了Hadoop 3)

    文件名: spark-3.4.1-bin-hadoop3.tgz 这是 Apache Spark 3.4.1 版本的二进制...Spark 是一种快速、通用的集群计算系统,用于大规模数据处理。这个文件包含了所有必要的组件,可以直接下载并在 Hadoop 3 环境中使用。

    spark-3.2.4-bin-hadoop3.2-scala2.13 安装包

    为了与Hadoop集群对接,还需要配置Spark的`spark-env.sh`文件,设置Hadoop的相关路径。 5. **运行Spark**: Spark可以通过命令行工具启动,例如`spark-shell`(交互式Spark会话)或`pyspark`(Python版本的交互式...

    zxl-hadoop是一个大数据服务管理工具,基于Web界面,提供服务器集群的各种指标监控,并提供HDFS.zip

    【压缩包子文件的文件名称列表】: "zxl-hadoop-master" 这个文件名可能表示这是项目的主分支或源代码库,通常包含项目的核心代码、配置文件、文档等资源。用户可以通过解压并编译此代码来部署和运行zxl-hadoop服务。...

    spark-3.1.2.tgz & spark-3.1.2-bin-hadoop2.7.tgz.rar

    - spark-3.1.2-bin-hadoop2.7.tgz:这个版本除了包含基本的Spark组件外,还集成了Hadoop 2.7的二进制依赖,方便在Hadoop集群上直接部署和运行Spark应用。 5. 安装与运行: - 解压:使用tar命令解压tgz文件,rar...

    spark-2.4.7-bin-hadoop2.7.tgz

    Spark 2.4.7是Apache Spark的一个稳定版本,它为大数据处理提供了高效、易用且可扩展的框架...一旦下载并解压"spark-2.4.7-bin-hadoop2.7.tgz",就可以开始设置环境、配置参数,然后根据业务需求编写和运行Spark应用。

    spark-3.1.2-bin-hadoop3.2.tgz

    3. 可选配置,如修改`spark/conf/spark-env.sh`以设置内存分配、JVM参数等。 4. 初始化Hadoop环境,确保Hadoop配置正确,并启动Hadoop服务。 5. 启动Spark相关服务,如`sbin/start-all.sh`启动所有Spark组件。 6. ...

    spark-1.6.0-bin-hadoop2.6.tgz

    Spark的核心设计是基于分布式内存计算模型,它引入了Resilient Distributed Datasets (RDDs)的概念,这是一种可分区的、只读的数据集,可以在集群中的多个节点上并行操作。RDDs支持两种主要操作:转换...

    spark-2.4.0-bin-without-hadoop.tgz

    `spark-2.4.0-bin-without-hadoop.tgz` 文件是一个压缩包,其中包含了 Spark 2.4.0 版本的二进制文件,但不包括 Hadoop 相关依赖,这意味着你需要自行配置 Hadoop 集群环境或者连接到已有的 Hadoop 集群。...

    Linux运维-Hadoop集群之ambari实践-13hadoop集群启动.mp4

    Linux运维-Hadoop集群之ambari实践-13hadoop集群启动.mp4

    Linux运维-Hadoop集群之ambari实践-14hadoop集群验证.mp4

    Linux运维-Hadoop集群之ambari实践-14hadoop集群验证.mp4

    spark-2.3.0-bin-hadoop2.7版本.zip

    综上所述,"spark-2.3.0-bin-hadoop2.7版本.zip"是一个包含了完整的Spark 2.3.0发行版,集成了Hadoop2.7的环境,可供开发者在本地或集群环境中快速搭建Spark开发和测试环境。这个版本的Spark不仅在核心功能上有所...

    spark-3.0.0-bin-without-hadoop.tgz

    不包含Hadoop的Spark发行版意味着用户需要自行配置Hadoop的相关依赖,如HDFS客户端、YARN客户端等,以便Spark能与已有的Hadoop集群交互。这对于那些已经拥有成熟Hadoop环境的组织来说是一个灵活的选择,因为它避免了...

Global site tag (gtag.js) - Google Analytics