共计 7272 个字符,预计需要花费 19 分钟才能阅读完成。
一、目的
本文描述了如何安装、配置和管理有实际意义的 Hadoop 集群,其规模可从几个节点的小集群到几千个节点的超大集群。如果你希望在单机上安装 Hadoop 玩玩,从这里能找到相关细节。
二、先决条件
1. 确保在你集群中的每个节点上都安装了所有必需软件。
2. 获取 Hadoop 软件包。
三、安装
安装 Hadoop 集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为 JobTracker。这些机器是 masters。余下的机器即作为 DataNode 也作为 TaskTracker。这些机器是 slaves。
我们用 HADOOP_HOME 指代安装的根路径。通常,集群里的所有机器的 HADOOP_HOME 路径相同。
————————————– 分割线 ————————————–
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
————————————– 分割线 ————————————–
四、配置
接下来描述了如何配置 Hadoop 集群。
1、配置文件
对 Hadoop 的配置通过 conf/ 目录下的两个重要配置文件完成:
1.hadoop-default.xml – 只读的默认配置。
2.hadoop-site.xml – 集群特有的配置。
要了解更多关于这些配置文件如何影响 Hadoop 框架的细节,请看这里。
此外,通过设置 conf/hadoop-env.sh 中的变量为集群特有的值,你可以对 bin/ 目录下的 Hadoop 脚本进行控制。
2、集群配置
要配置 Hadoop 集群,你需要设置 Hadoop 守护进程的运行环境和 Hadoop 守护进程的运行参数。
Hadoop 守护进程指 NameNode/DataNode 和 JobTracker/TaskTracker。
2.1、配置 Hadoop 守护进程的运行环境
管理员可在 conf/hadoop-env.sh 脚本内对 Hadoop 守护进程的运行环境做特别指定。
至少,你得设定 Java_HOME 使之在每一远端节点上都被正确设置。
管理员可以通过配置选项 HADOOP_*_OPTS 来分别配置各个守护进程。下表是可以配置的选项。
守护进程 | 配置选项 |
NameNode | HADOOP_NAMENODE_OPTS |
DataNode | HADOOP_DATANODE_OPTS |
SecondaryNamenode | HADOOP_SECONDARYNAMENODE_OPTS |
JobTracker | HADOOP_JOBTRACKER_OPTS |
TaskTracker | HADOOP_TASKTRACKER_OPTS |
例如,配置 Namenode 时, 为了使其能够并行回收垃圾(parallelGC),要把下面的代码加入到 hadoop-env.sh :
export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}”
其它可定制的常用参数还包括:
HADOOP_LOG_DIR – 守护进程日志文件的存放目录。如果不存在会被自动创建。
HADOOP_HEAPSIZE – 最大可用的堆大小,单位为 MB。比如,1000MB。这个参数用于设置 hadoop 守护进程的堆大小。缺省大小是 1000MB。
2.2、配置 Hadoop 守护进程的运行参数
这部分涉及 Hadoop 集群的重要参数,这些参数在 conf/hadoop-site.xml 中指定。
参数 | 取值 | 备注 |
fs.default.name | NameNode 的 URI。 | hdfs:// 主机名 / |
mapred.job.tracker | JobTracker 的主机(或者 IP)和端口。 | 主机: 端口。 |
dfs.name.dir | NameNode 持久存储名字空间及事务日志的本地文件系统路径。 | 当这个值是一个逗号分割的目录列表时,nametable 数据将会被复制到所有目录中做冗余备份。 |
dfs.data.dir | DataNode 存放块数据的本地文件系统路径,逗号分割的列表。 | 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。 |
mapred.system.dir | Map/Reduce 框架存储系统文件的 HDFS 路径。比如 /hadoop/mapred/system/。 | 这个路径是默认文件系统(HDFS)下的路径,须从服务器和客户端上均可访问。 |
mapred.local.dir | 本地文件系统下逗号分割的路径列表,Map/Reduce 临时数据存放的地方。 | 多路径有助于利用磁盘 i /o。 |
mapred.tasktracker.{map|reduce}.tasks.maximum | 某一 TaskTracker 上可运行的最大 Map/Reduce 任务数,这些任务将同时各自运行。 | 默认为 2(2 个 map 和 2 个 reduce),可依据硬件情况更改。 |
dfs.hosts/dfs.hosts.exclude | 许可 / 拒绝 DataNode 列表。 | 如有必要,用这个文件控制许可的 datanode 列表。 |
mapred.hosts/mapred.hosts.exclude | 许可 / 拒绝 TaskTracker 列表。 | 如有必要,用这个文件控制许可的 TaskTracker 列表。 |
通常,上述参数被标记为 final 以确保它们不被用户应用更改。
2.3、现实世界的集群配置
这节罗列在大规模集群上运行 sort 基准测试 (benchmark) 时使用到的一些非缺省配置。
运行 sort900 的一些非缺省配置值,sort900 即在 900 个节点的集群上对 9TB 的数据进行排序:
参数 | 取值 | 备注 |
dfs.block.size | 134217728 | 针对大文件系统,HDFS 的块大小取 128MB。 |
dfs.namenode.handler.count | 40 | 启动更多的 NameNode 服务线程去处理来自大量 DataNode 的 RPC 请求。 |
mapred.reduce.parallel.copies | 20 | reduce 启动更多的并行拷贝器以获取大量 map 的输出。 |
mapred.child.Java.opts | -Xmx512M | 为 map/reduce 子虚拟机使用更大的堆。 |
fs.inmemory.size.mb | 200 | 为 reduce 阶段合并 map 输出所需的内存文件系统分配更多的内存。 |
io.sort.factor | 100 | 文件排序时更多的流将同时被归并。 |
io.sort.mb | 200 | 提高排序时的内存上限。 |
运行 sort1400 和 sort2000 时需要更新的配置,即在 1400 个节点上对 14TB 的数据进行排序和在 2000 个节点上对 20TB 的数据进行排序:
参数 | 取值 | 备注 |
mapred.job.tracker.handler.count | 60 | 启用更多的 JobTracker 服务线程去处理来自大量 TaskTracker 的 RPC 请求。 |
mapred.reduce.parallel.copies | 50 | |
tasktracker.http.threads | 50 | 为 TaskTracker 的 Http 服务启用更多的工作线程。reduce 通过 Http 服务获取 map 的中间输出。 |
mapred.child.java.opts | -Xmx1024M | 使用更大的堆用于 maps/reduces 的子虚拟机 |
2.4、Slaves
通常,你选择集群中的一台机器作为 NameNode,另外一台不同的机器作为 JobTracker。余下的机器即作为 DataNode 又作为 TaskTracker,这些被称之为 slaves。
在 conf/slaves 文件中列出所有 slave 的主机名或者 IP 地址,一行一个。
一、目的
本文描述了如何安装、配置和管理有实际意义的 Hadoop 集群,其规模可从几个节点的小集群到几千个节点的超大集群。如果你希望在单机上安装 Hadoop 玩玩,从这里能找到相关细节。
二、先决条件
1. 确保在你集群中的每个节点上都安装了所有必需软件。
2. 获取 Hadoop 软件包。
三、安装
安装 Hadoop 集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为 NameNode,另一台不同的机器被指定为 JobTracker。这些机器是 masters。余下的机器即作为 DataNode 也作为 TaskTracker。这些机器是 slaves。
我们用 HADOOP_HOME 指代安装的根路径。通常,集群里的所有机器的 HADOOP_HOME 路径相同。
————————————– 分割线 ————————————–
Ubuntu 13.04 上搭建 Hadoop 环境 http://www.linuxidc.com/Linux/2013-06/86106.htm
Ubuntu 12.10 +Hadoop 1.2.1 版本集群配置 http://www.linuxidc.com/Linux/2013-09/90600.htm
Ubuntu 上搭建 Hadoop 环境(单机模式 + 伪分布模式)http://www.linuxidc.com/Linux/2013-01/77681.htm
Ubuntu 下 Hadoop 环境的配置 http://www.linuxidc.com/Linux/2012-11/74539.htm
单机版搭建 Hadoop 环境图文教程详解 http://www.linuxidc.com/Linux/2012-02/53927.htm
搭建 Hadoop 环境(在 Winodws 环境下用虚拟机虚拟两个 Ubuntu 系统进行搭建)http://www.linuxidc.com/Linux/2011-12/48894.htm
————————————– 分割线 ————————————–
四、配置
接下来描述了如何配置 Hadoop 集群。
1、配置文件
对 Hadoop 的配置通过 conf/ 目录下的两个重要配置文件完成:
1.hadoop-default.xml – 只读的默认配置。
2.hadoop-site.xml – 集群特有的配置。
要了解更多关于这些配置文件如何影响 Hadoop 框架的细节,请看这里。
此外,通过设置 conf/hadoop-env.sh 中的变量为集群特有的值,你可以对 bin/ 目录下的 Hadoop 脚本进行控制。
2、集群配置
要配置 Hadoop 集群,你需要设置 Hadoop 守护进程的运行环境和 Hadoop 守护进程的运行参数。
Hadoop 守护进程指 NameNode/DataNode 和 JobTracker/TaskTracker。
2.1、配置 Hadoop 守护进程的运行环境
管理员可在 conf/hadoop-env.sh 脚本内对 Hadoop 守护进程的运行环境做特别指定。
至少,你得设定 Java_HOME 使之在每一远端节点上都被正确设置。
管理员可以通过配置选项 HADOOP_*_OPTS 来分别配置各个守护进程。下表是可以配置的选项。
守护进程 | 配置选项 |
NameNode | HADOOP_NAMENODE_OPTS |
DataNode | HADOOP_DATANODE_OPTS |
SecondaryNamenode | HADOOP_SECONDARYNAMENODE_OPTS |
JobTracker | HADOOP_JOBTRACKER_OPTS |
TaskTracker | HADOOP_TASKTRACKER_OPTS |
例如,配置 Namenode 时, 为了使其能够并行回收垃圾(parallelGC),要把下面的代码加入到 hadoop-env.sh :
export HADOOP_NAMENODE_OPTS=”-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}”
其它可定制的常用参数还包括:
HADOOP_LOG_DIR – 守护进程日志文件的存放目录。如果不存在会被自动创建。
HADOOP_HEAPSIZE – 最大可用的堆大小,单位为 MB。比如,1000MB。这个参数用于设置 hadoop 守护进程的堆大小。缺省大小是 1000MB。
2.5、日志
Hadoop 使用 Apache log4j 来记录日志,它由 Apache Commons Logging 框架来实现。编辑 conf/log4j.properties 文件可以改变 Hadoop 守护进程的日志配置(日志格式等)。
2.6、历史日志
作业的历史文件集中存放在 hadoop.job.history.location,这个也可以是在分布式文件系统下的路径,其默认值为 ${HADOOP_LOG_DIR}/history。jobtracker 的 web UI 上有历史日志的 web UI 链接。
历史文件在用户指定的目录 hadoop.job.history.user.location 也会记录一份,这个配置的缺省值为作业的输出目录。这些文件被存放在指定路径下的“_logs/history/”目录中。因此,默认情况下日志文件会在“mapred.output.dir/_logs/history/”下。如果将 hadoop.job.history.user.location 指定为值 none,系统将不再记录此日志。
用户可使用以下命令在指定路径下查看历史日志汇总
$ bin/hadoop job -history output-dir
这条命令会显示作业的细节信息,失败和终止的任务细节。
关于作业的更多细节,比如成功的任务,以及对每个任务的所做的尝试次数等可以用下面的命令查看
$ bin/hadoop job -history all output-dir
一但全部必要的配置完成,将这些文件分发到所有机器的 HADOOP_CONF_DIR 路径下,通常是 ${HADOOP_HOME}/conf。
五、Hadoop 的机架感知
HDFS 和 Map/Reduce 的组件是能够感知机架的。
NameNode 和 JobTracker 通过调用管理员配置模块中的 APIresolve 来获取集群里每个 slave 的机架 id。该 API 将 slave 的 DNS 名称(或者 IP 地址)转换成机架 id。使用哪个模块是通过配置项 topology.node.switch.mapping.impl 来指定的。模块的默认实现会调用 topology.script.file.name 配置项指定的一个的脚本 / 命令。如果 topology.script.file.name 未被设置,对于所有传入的 IP 地址,模块会返回 /default-rack 作为机架 id。在 Map/Reduce 部分还有一个额外的配置项 mapred.cache.task.levels,该参数决定 cache 的级数(在网络拓扑中)。例如,如果默认值是 2,会建立两级的 cache- 一级针对主机(主机 -> 任务的映射)另一级针对机架(机架 -> 任务的映射)。
六、启动 Hadoop
启动 Hadoop 集群需要启动 HDFS 集群和 Map/Reduce 集群。
格式化一个新的分布式文件系统:
$ bin/hadoop namenode -format
在分配的 NameNode 上,运行下面的命令启动 HDFS:
$ bin/start-dfs.sh
bin/start-dfs.sh 脚本会参照 NameNode 上 ${HADOOP_CONF_DIR}/slaves 文件的内容,在所有列出的 slave 上启动 DataNode 守护进程。
在分配的 JobTracker 上,运行下面的命令启动 Map/Reduce:
$ bin/start-mapred.sh
bin/start-mapred.sh 脚本会参照 JobTracker 上 ${HADOOP_CONF_DIR}/slaves 文件的内容,在所有列出的 slave 上启动 TaskTracker 守护进程。
七、停止 Hadoop
在分配的 NameNode 上,执行下面的命令停止 HDFS:
$ bin/stop-dfs.sh
bin/stop-dfs.sh 脚本会参照 NameNode 上 ${HADOOP_CONF_DIR}/slaves 文件的内容,在所有列出的 slave 上停止 DataNode 守护进程。
在分配的 JobTracker 上,运行下面的命令停止 Map/Reduce:
$ bin/stop-mapred.sh
bin/stop-mapred.sh 脚本会参照 JobTracker 上 ${HADOOP_CONF_DIR}/slaves 文件的内容,在所有列出的 slave 上停止 TaskTracker 守护进程。
更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13