您的位置:首页 > 运维架构

Hadoop-2.4.1学习之配置管理Hadoop

2014-08-26 16:51 232 查看
      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
134217728(128M)
HDFS块大小,默认为128M,可以使用后缀k、m、g、t等指定大小,如128m

dfs.namenode.handler.count
10
用于处理来自DataNode的RPC的服务线程数

dfs.datanode.data.dir
DataNode存储块的本地文件目录

 

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

参数

描述
mapreduce.framework.name
yarn
执行MapReduce作业的框架,可以为local,classic和yarn,默认为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的配置管理更加复杂,有许多参数或许在学习过程中不会使用到,但当集群规模扩大时这些参数会发挥重要作用,而这往往需要通过多次修改参数值,比较执行结果,必要时还需要参考源代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息