探讨问题的同胞们可以加QQ群:315309006
本文是基于hadoop0.23.9版本的说明
1. 参考文档
l Apache官网Hadoop集群Cluster安装文档,Ctrl+鼠标左键点击这里进入链接地址
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.sh
3.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.xml
Parameter | 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.xml
3.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.xml
3.2.3.1 ResourceManager and NodeManager
Parameter | 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 ResourceManager
Parameter | 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 NodeManager
Parameter | 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.xml
3.2.4.1 MapReduce Applications
Parameter | 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 Server
Parameter | 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 namenode
Run a script to start DataNodes on all slaves:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs start datanode
Start the YARN with the following command, run on the designated ResourceManager:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start resourcemanager
Run a script to start NodeManagers on all slaves:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR start nodemanager
Start 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_DIR
Start 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_DIR
Hadoop Shutdown
Stop the NameNode with the following command, run on the designated NameNode:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop namenode
Run a script to stop DataNodes on all slaves:
$ $HADOOP_PREFIX/sbin/hadoop-daemon.sh --config $HADOOP_CONF_DIR --script hdfs stop datanode
Stop the ResourceManager with the following command, run on the designated ResourceManager:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop resourcemanager
Run a script to stop NodeManagers on all slaves:
$ $HADOOP_YARN_HOME/sbin/yarn-daemon.sh --config $HADOOP_CONF_DIR stop nodemanager
Stop 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_DIR
Stop 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
探讨问题的同胞们可以加QQ群:315309006