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的配置管理。
在多数情况下应该设置HADOOP_PID_DIR和HADOOP_SECURE_DN_PID_DIR为只能被运行hadoop守护进程的用户写入的目录,默认值为/tmp。
可以通过下表中的环境变量对守护进程进行管理。
例如管理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设置堆大小。
core-site.xml
hdfs-site.xml
mapred-site.xml
由于之前没有接触过yarn-site.xml(Hadoop-1.X中不存在该文件),所以将会结合yarn-default.xml学习yarn-site.xml中管理ResourceManager、NodeManager的参数。首先是对ResourceManager、NodeManager都起作用的参数:
其次是专门用于ResourceManager的参数:
然后是管理NodeManager的参数:
最后是管理历史服务器的参数:
Hadoop-2.X的配置管理比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 |
其它几个重要的参数有:守护进程日志目录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中用于读写的缓存大小 |
参数 | 值 | 描述 |
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存储块的本地文件目录 | 如果该值为逗号分隔的目录列表,数据将会存储在所有目录中,通常位于不同的设备中 |
参数 | 值 | 描述 |
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.acl.enable | true /false | 是否启用访问控制列表,默认值为false |
yarn.admin.acl | Admin ACL | ACL中可以管理集群的人员。ACL中使用逗号分隔用户,使用空格分隔用户和组,使用逗号分隔组。默认值为*允许所有人,空格表示任何人都没有权限 |
yarn.log-aggregation-enable | false | 是否启用日志聚合,默认为false |
参数 | 值 | 描述 |
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 |
参数 | 值 | 描述 |
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.4.1学习之配置管理HDFS联盟
- 2008年7月21日学习笔记----(管理续)操作与配置cisco设备
- 想学习配置管理,请前辈指教
- hadoop学习---2.cygwin及sshd安装配置
- hadoop学习笔记(2) 伪分布模式配置
- hadoop学习笔记(2) 伪分布模式配置
- 【hadoop学习】Hadoop配置
- [ASP.NET学习笔记之三十一]ASP.NET配置管理
- Hadoop学习系列教程——单机版hadoop的配置安装
- 【hadoop学习】在Mac OS上配置hadoop伪分布式环境【上】
- [转] hadoop学习---3.hadoop在ubuntu下的安装配置
- spring2.5.6学习笔记六:配置Spring管理的bean的作用域
- 黑马程序员_学习笔记8用类加载器的方式管理资源和配置文件及类加载器的总结
- hadoop伪分布模式配置学习
- 【hadoop学习】在Mac OS上配置hadoop伪分布式环境【下】
- ITCAST视频-Spring学习笔记(配置Spring管理的bean的作用域)
- spring学习笔记整理--04(配置Spring管理的bean的作用域、生命周期)
- QT学习之三:Qt Creator2.4.1的开发环境的配置和测试
- hadoop学习---3.hadoop在ubuntu下的安装配置
- Linux 学习笔记(十一)软件和配置管理