Hadoop-2.4.1学习之配置管理Hadoop

      Hadoop-2.X较Hadoop-1.X有了很大的变化,比如YARN将JobTracker的两个主要功能资源管理和作业调度监控分开为独立的后台进程,配置文件及参数也有了很大变化,目录结构的调整等。另外在Hadoop-2.X版本中,通常专门指定一台主机为NameNode,另一台主机做为ResourceManager,这两台主机为masters,集群中剩余的主机既做为DataNode也做为NodeManager,为slaves,这也与Hadoop-1.X中不同。

      Hadoop-2.X有两种类型的配置文件,一种为只读的默认的配置文件,分别为core-default.xml,hdfs-default.xml,yarn-default.xml 和mapred-default.xml。另一种为不同模块的特定配置文件,分别为etc/hadoop/core-site.xml,etc/hadoop/hdfs-site.xml,etc/hadoop/yarn-site.xml和etc/hadoop/mapred-site.xml。另外还可以通过etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh对执行环境,如:配置文件存放目录,日志目录,Java堆大小等进行配置管理。下面将从Hadoop守护进程的运行环境和守护进程的配置管理参数两方面学习Hadoop的配置管理。

配置管理守护进程的运行环境

      正如上面提到了可以通过etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh对Hadoop守护进程的执行环境进行定制。在hadoop-env.sh中至少需要正确设置JAVA_HOME为java的安装目录,否则会出现如下的错误:

[hadoop@hadoopsbin]$ ./start-dfs.sh
14/08/26 10:17:41WARN util.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using built in-java classes where applicable
Startingnamenodes on [localhost]
localhost: Error:JAVA_HOME is not set and could not be found.
localhost:Error: JAVA_HOME is not set and could not be found.
Startingsecondary namenodes [0.0.0.0]
0.0.0.0: Error:JAVA_HOME is not set and could not be found.

      在多数情况下应该设置HADOOP_PID_DIR和HADOOP_SECURE_DN_PID_DIR为只能被运行hadoop守护进程的用户写入的目录,默认值为/tmp。

      可以通过下表中的环境变量对守护进程进行管理。

守护进程

环境变量

NameNode

HADOOP_NAMENODE_OPTS

DataNode

HADOOP_DATANODE_OPTS

Secondary NameNode

HADOOP_SECONDARYNAMENODE_OPTS

ResourceManager

YARN_RESOURCEMANAGER_OPTS

NodeManager

YARN_NODEMANAGER_OPTS

WebAppProxy

YARN_PROXYSERVER_OPTS

Map Reduce Job History Server

HADOOP_JOB_HISTORYSERVER_OPTS

      例如管理NameNode使用parallelGC,可以在hadoop-env.sh中添加下面的语句:export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC${HADOOP_NAMENODE_OPTS}",默认值为:exportHADOOP_NAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}$HADOOP_NAMENODE_OPTS"。

      其它几个重要的参数有:守护进程日志目录HADOOP_LOG_DIR / YARN_LOG_DIR,守护进程的最大堆HADOOP_HEAPSIZE / YARN_HEAPSIZE,单位为MB,默认值为1000。如果想为每个守护进程设置不同的堆大小,可以使用下面的参数YARN_RESOURCEMANAGER_HEAPSIZE、YARN_NODEMANAGER_HEAPSIZE、YARN_PROXYSERVER_HEAPSIZE和HADOOP_JOB_HISTORYSERVER_HEAPSIZE分别为ResourceManager、NodeManager、WebAppProxy和Map ReduceJob History Server设置堆大小。

守护进程的配置参数

可以通过etc/hadoop/core-site.xml,etc/hadoop/hdfs-site.xml,etc/hadoop/yarn-site.xml和etc/hadoop/mapred-site.xml中的特定参数对守护进程进行配置管理,这些文件除了提供基本的配置参数外,也提供了高级配置功能,下面将介绍常用的配置参数,其它更复杂的参数需要结合实际情况调试优化。

      core-site.xml

参数

描述

fs.defaultFS

NameNode URI

hdfs://host:port/,取代了fs.default.name

io.file.buffer.size

4096

SequenceFiles中用于读写的缓存大小

      hdfs-site.xml

参数

描述

dfs.namenode.name.dir

NameNode持久存储命名空间和事务日志的本地文件系统目录

如果该值为逗号分隔的目录列表,那么名称表将被复制到所有目录中

dfs.hosts

dfs.hosts.exclude

允许和排除的DataNode列表

如果必要,使用这些文件控制允许和禁止的DataNodes列表

dfs.blocksize

134217728128M

HDFS块大小,默认为128M,可以使用后缀kmgt等指定大小,如128m

dfs.namenode.handler.count

10

用于处理来自DataNodeRPC的服务线程数

dfs.datanode.data.dir

DataNode存储块的本地文件目录

 

如果该值为逗号分隔的目录列表,数据将会存储在所有目录中,通常位于不同的设备中

      mapred-site.xml

参数

描述

mapreduce.framework.name

yarn

执行MapReduce作业的框架,可以为localclassicyarn,默认为local

mapreduce.map.memory.mb

1536

Mapper使用的物理内存大小

mapreduce.map.java.opts

-Xmx1024M

Mapper的子jvm的堆大小

mapreduce.reduce.memory.mb

3072

Reducer使用的物理内存

mapreduce.reduce.java.opts

-Xmx2560M

Reducer的子jvm的堆大小

mapreduce.task.io.sort.mb

100

排序文件时使用的缓存大小

mapreduce.task.io.sort.factor

10

排序文件时一次合并的流数,决定了打开文件句柄的数量

mapreduce.reduce.shuffle.

parallelcopies

5

在洗牌时被Reducer运行的并行传输的数量

mapreduce.jobhistory.address

 

MapReduce JobHistory 服务器host:port,默认端口为 10020

mapreduce.jobhistory.webapp.address

 

MapReduce JobHistory 服务器的 Web地址host:port默认端口为19888

mapreduce.jobhistory.intermediate-done-dir

/tmp/hadoop-yarn/staging /history/done_intermediate

MapReduce作业写入的历史文件目录

mapreduce.jobhistory.done-dir

/tmp/hadoop-yarn/staging /history/done

MR作业历史服务器管理的存放历史文件的目录

      由于之前没有接触过yarn-site.xml(Hadoop-1.X中不存在该文件),所以将会结合yarn-default.xml学习yarn-site.xml中管理ResourceManager、NodeManager的参数。首先是对ResourceManager、NodeManager都起作用的参数:

参数

描述

yarn.acl.enable

true /false

是否启用访问控制列表,默认值为false

yarn.admin.acl

Admin ACL

ACL中可以管理集群的人员。ACL中使用逗号分隔用户,使用空格分隔用户和组,使用逗号分隔组。默认值为*允许所有人,空格表示任何人都没有权限

yarn.log-aggregation-enable

false

是否启用日志聚合,默认为false

      其次是专门用于ResourceManager的参数:

参数

描述

yarn.resourcemanager.address

host:port

客户端提交作业的主机和端口号,默认端口为8032。如果设置该参数会覆盖 yarn.resourcemanager.hostname设置的主机名

yarn.resourcemanager.scheduler.address

host:port

调度器地址。ApplicationMasters通过该地址与调度器会话以取得资源,默认端口8030

yarn.resourcemanager.resource-tracker.address

host:port

默认端口8031。NodeManager通过该地址与ResourceManager会话

yarn.resourcemanager.admin.address

host:port

RM管理命令的地址,默认端口为8033

yarn.resourcemanager.webapp.address

host:port

RM的web接口地址,默认端口为8088

yarn.resourcemanager.hostname

host

RM主机名,所有yarn.resourcemanager*address 都是用了该值

yarn.resourcemanager.scheduler.class

调度器类名

资源调度器的类名,默认为org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler,还可以为 FairScheduler 或者 FifoScheduler

yarn.scheduler.minimum-allocation-mb

1024

RM中为每个容器请求分配的最小内存,单位为MB。小于该值的请求不会生效并会分配该最小值

yarn.scheduler.maximum-allocation-mb

8192

RM中为每个容器请求分配的最大内存,单位为MB。大于该值的求不会生效并分配该最大值

yarn.resourcemanager.nodes.include-path 

yarn.resourcemanager.nodes.exclude-path

 

若必要,使用该值指定的文件控制允许和禁止的NodeManagers

      然后是管理NodeManager的参数:

参数

描述

yarn.nodemanager.resource.memory-mb

8192

可以分配给容器的物理内存,单位MB

yarn.nodemanager.vmem-pmem-ratio

2.1

任务使用的虚拟内存乘以该比例可能超过物理内存

yarn.nodemanager.local-dirs

${hadoop.tmp.dir}/nm-local-dir

用逗号分隔的用于写入中间文件的本地文件系统目录

yarn.nodemanager.log-dirs

${yarn.log.dir}/userlogs

逗号分隔的存放日志的本地文件系统目录

yarn.nodemanager.log.retain-seconds

10800

日志保留的时间,单位秒,只有在日志聚合禁用的情况下该参数才可用

yarn.nodemanager.remote-app-log-dir

/tmp/logs

当应用程序完成时应用程序日志移动到什么位置,需要设置正确地权限。只有在日志聚合禁用的情况下该参数才可用

yarn.nodemanager.remote-app-log-dir-suffix

logs

日志将会聚合到${yarn.nodemanager.remote-app-log-dir}/${user}/${该参数} 。只有在日志聚合禁用的情况下该参数才可用

yarn.nodemanager.aux-services

mapreduce_shuffle

MapReduce程序需要的洗牌服务

      最后是管理历史服务器的参数:

参数

描述

yarn.log-aggregation.retain-seconds

-1

在删除之前保存聚合日志多久。默认值为-1,禁用。

yarn.log-aggregation.retain-check-interval-seconds

-1

检查聚合日志的时间间隔,如果该值为0或负数,则该值为十分之一聚合日志保留时间

      Hadoop-2.X的配置管理比Hadoop-1.X的配置管理更加复杂,有许多参数或许在学习过程中不会使用到,但当集群规模扩大时这些参数会发挥重要作用,而这往往需要通过多次修改参数值,比较执行结果,必要时还需要参考源代码。

你可能感兴趣的:(mapreduce,配置管理,源代码,yarn,Hadoop-2.4.1)