本帖最后由 pig2 于 2013-11-21 19:16 编辑
1. 参考文档l Apache官网Hadoop集群Cluster安装文档,原文地址 2. Hadoop基本概念l Hadoop经典模型一般会在集群里面专门指定一台机器作为NameNode,再指定一台作为资源管理节点ResourceManager l hadoop两种配置方式 n 只读方式配置(Read-only default configuration):直接修改core-default.xml, hdfs-default.xml, yarn-default.xml, mapred-default.xml四个配置文件(位置:$HADOOP_PREFIX\etc\hadoop) n 特定站点配置(Site-specific configuration):修改“$HADOOP_PREFIX\conf\”目录中的上述四个文件(可从$HADOOP_PREFIX\share\hadoop\common\templates\conf中去copy一份) l $HADOOP_PREFIX/ bin/目录是执行命令脚本的位置,hadoop命令用到的执行参数可以在$HADOOP_PREFIX/conf/hadoop-env.sh和$HADOOP_PREFIX/etc/hadoop/yarn-env.sh(/$HADOOP_PREFIX/conf/yarn-env.sh)文件中修改,如JDK路径等 3. Hadoop配置文件及参数3.1 hadoop-env.sh/yarn-env.sh3.1.1 配置项目Daemon | Environment Variable | 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 |
其他可配置的参数有: Daemon | Environment Variable | ResourceManager | YARN_RESOURCEMANAGER_HEAPSIZE | NodeManager | YARN_NODEMANAGER_HEAPSIZE | WebAppProxy | YARN_PROXYSERVER_HEAPSIZE | Map Reduce Job History Server | HADOOP_JOB_HISTORYSERVER_HEAPSIZE | 3.1.2 配置说明启用JMX远程管理监控 效果:启用后可通过Jconsole对hadoop各类节点进行远程监控 修改$hadoop_home/conf/hadoop_env.sh文件 export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS" export XXXX=”-Dcom.sun.management.jmxremote $XXXX” export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS -Dcom.sun.management.jmxremote.port=8003" Dcom.sun.management.jmxremote.port=8006端口号 Dcom.sun.management.jmxremote.ssl=false ssl安全认证false Dcom.sun.management.jmxremote.authenticate=false 用户认证false 3.2 Non-Secure Mode配置3.2.1 conf/core-site.xmlParameter | Value | Notes | fs.defaultFS | NameNode URI | 格式如:hdfs://host:port/ 默认的文件服务的协议和NS逻辑名称,和hdfs-site里的对应,取代了1.0版本中的fs.default.name | io.file.buffer.size | 131072 | 读写序列化文件缓冲区大小 | 3.2.2 conf/hdfs-site.xml3.2.2.1 NameNode配置Parameter | Value | Notes | dfs.namenode.name.dir | NameNode命名空间和事务处理日志本地存储路径 | 该配置项可以配置多个路径,多路径用逗号分隔,用来对NameNode内容做备份冗余 | dfs.namenode.hosts dfs.namenode.hosts.exclude | 允许的host列表. 拒绝的host列表 | 有需要的话可用用这两个配置项对NameNode的host进行控制 | dfs.blocksize | 67108864 /64M 134217728 /128M 268435456 /256M | HDFS(分布式文件系统)文件块大小,默认是256MB,设置数值较大的话计算时用的map较少,太小的话浪费可用的map资源,这里根据需要设置,笔者提示:最好对自己的应用做个分析,最终文件是用来提供什么服务的 | dfs.namenode.handler.count | 100 | Hadoop系统里启动的任务线程数 | 3.2.2.2 DataNode配置Parameter | Value | Notes | dfs.datanode.data.dir | DataNode本地文件存储的路径 | 该配置项可以配置多个路径,多路径时用逗号进行分隔,一般做集群的时候存储数据都是存储到在不同的设备里面; 多目录配置时,存储的数据会被存储到所有的配置目录里面 | 3.2.3 conf/yarn-site.xml3.2.3.1 ResourceManager and NodeManagerParameter | Value | Notes | yarn.acl.enable | true /false | 用来控制是否打开访问控制列表,ACL的英文是Access Control List 访问控制列表,默认值是false | yarn.admin.acl | Admin ACL | ACL用来设置集群管理员,可以设置多人,多人设置用逗号分隔,默认值是*,表示任何人; 如果是空格的话表示所有人都不能访问; | yarn.log-aggregation-enable | false | 配置是否启用日志聚合 |
yarn.admin.acl用来设定集群管理员,服务级别的权限控制是通过配置hadoop-policy.xml实现。 3.2.3.2 ResourceManagerParameter | Value | Notes | yarn.resourcemanager.address | 用来设置客户端提交job | host:port | yarn.resourcemanager.scheduler.address | 用来做主节点和资源节点间的任务调度 | host:port | yarn.resourcemanager.resource-tracker.address | 资源跟踪地址 | host:port | yarn.resourcemanager.admin.address | 管理命令 | host:port | yarn.resourcemanager.webapp.address | 资源管理界面 | host:port | yarn.resourcemanager.scheduler.class | 资源调度算法 ResourceManager Schedule class, | 默认采用CapacityScheduler容量调度算法(hadoop推荐使用的算法); 可选项还有FifoScheduler先进先出算法; | yarn.scheduler.minimum-allocation-mb | 每个调度的最小内存设置 | In MBs | yarn.scheduler.maximum-allocation-mb | 每个调度的最大内存设置 | In MBs | yarn.resourcemanager.nodes.include-path yarn.resourcemanager.nodes.exclude-path | 允许/拒绝的NodeManager清单 | 有需要的话设置 |
l 资源调度算法的class有(yarn.resourcemanager.scheduler.class配置项): n org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler n org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler 3.2.3.3 NodeManagerParameter | Value | Notes | yarn.nodemanager.resource.memory-mb | NodeManager可用的物理内存,单位是MB | 定义NodeManager的资源 | yarn.nodemanager.vmem-pmem-ratio | 虚拟内存比例 | 任务过程中如果对内存的需求超过物理内存的话将启用虚拟内存进行任务处理,虚拟内存最大值靠该处设置的比例进行控制 | yarn.nodemanager.local-dirs | 中间数据写入的路径,多路径用逗号分隔 | 多路径配置的话可以降低磁盘的I/O | yarn.nodemanager.log-dirs | 日志文件写入的路径,多路径用逗号分隔 | 多路径配置的话可以降低磁盘的I/O | yarn.nodemanager.log.retain-seconds | 10800 | 单位为秒,日志在本地保存的默认时间,这项仅在日志聚合关闭的时候使用 | yarn.nodemanager.remote-app-log-dir | /logs | 该项仅在日志聚合开启时使用,应用程序完成后,应用程序的日志将被移到该目录下 | yarn.nodemanager.remote-app-log-dir-suffix | logs | 该项仅在日志聚合开启时使用,日志将被聚合到目录${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} | yarn.nodemanager.aux-services | mapreduce.shuffle | 给Map Reduce应用程序设置故障诊断服务 | 3.2.3.4 History Server (Needs to be moved elsewhere)Parameter | Value | Notes | yarn.log-aggregation.retain-seconds | -1 | 设置聚合日志保留时间,-1表示不作控制 | yarn.log-aggregation.retain-check-interval-seconds | -1 | 设置检查日志频率,如果满足删除条件的话,执行删除操作,如果这里的值是0或者-1的话,这个时间默认会按聚合日志保留时间的十分之一计算。 | 3.2.4 conf/mapred-site.xml3.2.4.1 MapReduce ApplicationsParameter | Value | Notes | mapreduce.framework.name | yarn | 运行框架设置为 Hadoop YARN | mapreduce.map.memory.mb | 1536 | Maps最大资源 | mapreduce.map.java.opts | -Xmx1024M | Maps Child JVM的heap-size堆大小 | mapreduce.reduce.memory.mb | 3072 | Reduces最大资源 | mapreduce.reduce.java.opts | -Xmx2560M | Reduces Maps Child JVM的heap-size堆大小 | mapreduce.task.io.sort.mb | 512 | sort整理数据最大使用内存设置 | mapreduce.task.io.sort.factor | 100 | 整理数据时一次合并的流数量 | mapreduce.reduce.shuffle.parallelcopies | 50 | Reduce运行的最大并行复制数量,用来获取大量maps的输出 | 3.2.4.2 MapReduce JobHistory ServerParameter | Value | Notes | mapreduce.jobhistory.address | MapReduce Job历史服务Server host:port | 默认端口10020. | mapreduce.jobhistory.webapp.address | MapReduce Job历史服务的web界面host:port | 默认端口19888. | mapreduce.jobhistory.intermediate-done-dir | /mr-history/tmp | MapReduce jobs写入历史文件的目录 | mapreduce.jobhistory.done-dir | /mr-history/done | MR JobHistory Server管理的历史文件目录 |
4. Hadoop自动感知能力l HDFS和YARN组件是按自动感应方式设计的 l NameNode和ResourceManager在管理员配置模块通过API实现对Slave节点的管理 l API给每个DNS或者IP分配一个Rack ID l 特定站点模式可以使用topology.node.switch.mapping.impl进行定义,默认的实现方式是运行一个脚本命令来配置topology.script.file.name 5. Hadoop节点监测Hadoop提供了节点监测机制NodeManagers,如果节点出现异常,ResourceManager将不再把任务发给该节点,直到异常节点恢复为止。 健康监测脚本在conf/yarn-site.xml配置 Parameter | Value | Notes | yarn.nodemanager.health-checker.script.path | Node health script | Script to check for node's health status. | yarn.nodemanager.health-checker.script.opts | Node health script options | Options for script to check for node's health status. | yarn.nodemanager.health-checker.script.interval-ms | Node health script interval | Time interval for running health script. | yarn.nodemanager.health-checker.script.timeout-ms | Node health script timeout interval | Timeout for health script execution. | 6. Hadoop Slave File通常集群环境里面只有一个NameNode和一个ResourceManager,在conf/slaves把所有slave节点的hostname和IP地址都列上 7. Hadoop系统日志Hadoop日志是用apache log4j实现的,可同过conf/log4j.properties对日志进行配置。 8. Hadoop系统运行配置完成以后,将配置文件HADOOP_CONF_DIR 分发到集群内所有节点上 8.1 Hadoop启动To start a Hadoop cluster you will need to start both the HDFS and YARN cluster. Format a new distributed filesystem: $ $HADOOP_PREFIX/bin/hdfs namenode -format <cluster_name>Start the HDFS with the following command, run on the designated NameNode: $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start namenodeRun a script to start DataNodes on all slaves: $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanodeStart the YARN with the following command, run on the designated ResourceManager: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanagerRun a script to start NodeManagers on all slaves: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanagerStart a standalone WebAppProxy server. If multiple servers are used with load balancing it should be run on each of them: $ $HADOOP_YARN_HOME/bin/yarn start proxyserver --config $HADOOP_CONF_DIRStart the MapReduce JobHistory Server with the following command, run on the designated server: $ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh start historyserver --config $HADOOP_CONF_DIRHadoop ShutdownStop the NameNode with the following command, run on the designated NameNode: $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenodeRun a script to stop DataNodes on all slaves: $ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanodeStop the ResourceManager with the following command, run on the designated ResourceManager: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanagerRun a script to stop NodeManagers on all slaves: $ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanagerStop the WebAppProxy server. If multiple servers are used with load balancing it should be run on each of them: $ $HADOOP_YARN_HOME/bin/yarn stop proxyserver --config $HADOOP_CONF_DIRStop the MapReduce JobHistory Server with the following command, run on the designated server: $ $HADOOP_PREFIX/sbin/mr-jobhistory-daemon.sh stop historyserver --config $HADOOP_CONF_DIR |