本文翻译翻译自http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/ClusterSetup.html
具体的实践,请参阅:搭建两个节点的简单hdfs集群。
译注:仅仅是翻译,内容关于搭建一个纯净,简单的hadoop集群。实际的集群,需要考虑高可靠,性能,安全。
参考:高可靠
安全(保全):保全模式 和 服务器级别授权
1.目的
告诉读者如何搭建具有几个节点或者成千上万个节点的集群。
但不包含高可靠和保全内容。
2.前提
译注:如果是生产库,千万不要使用稳定版本之外的。除非你愿意支付这种代价。
3.安装
通常包括在所有节点上解压软件,或者也可以使用打包系统。
划分硬件的功能很重要。
通常,一台机器作为名称节点,另外一台作为资源管理器。这两台是核心机器。
其它服务(诸如web应用代理服务器和mr作业历史服务器)可以运行在专有机器上,也可以在大机上共存,具体取决于负载。
其它的机器,用作数据节点和节点管理器。它们属于从属。
译注:原文分别使用master和slave划分几种服务。以为把它们分别翻译为“核心","从属".
4.非保全模式的配置
hadoop的java配置通过两种配置文件进行:
-
只读默认配置 - 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.xm和etc/hadoop/mapred-site.xml.
此外,我们可以控制位于bin目录下的hadoop脚本,方式是修改 etc/hadoop/hadoop-env.sh 和 etc/hadoop/yarn-env.sh
为了配置hadoop集群,我们需要配置运行hadoop守护程序用户的环境变量,并配置守护程序有关的参数。
HDFS守护程序包含NameNode, SecondaryNameNode, and DataNode。YARN的是ResourceManager, NodeManager, 和WebAppProxy。如果有使用MR,那么还包含MapReduce Job History Server。
在大型集群中,这些守护程序通常是在不同的主机上分开运行(应为压力实在大)。
4.1配置hadoop守护程序环境
管理员应该使用etc/hadoop/hadoop-env.sh,etc/hadoop/mapred-env.sh ,etc/hadoop/yarn-env.sh来设定节点有关的定制环境。
有些情况下,还必须设定JAVA_HOME。(译注,这个是通过实践,是严重推荐的,因为有的人的机器上可能有许多JAVA环境).
管理员可以使用下表中环境变量为每个独立的守护程序设定特定的选项:
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 |
例如,为了让名称节点可以使用JAVA并行的GC(垃圾回收),那么可以在 hadoop-env.sh 中添加如下语句:
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"
etc/hadoop/hadoop-env.sh 中有更多的例子。
译注:要启用什么java配置? 这个如果不是很熟悉hadoop的内核,还是不要轻易调整。 但如果是研究性的集群,不烦可以试试,或者遇到死马的时候,也可以考虑下。
其它一些配置也可以定制,包括:
- HADOOP_PID_DIR - 守护程序进程id文件所在路径。
- HADOOP_LOG_DIR - 守护程序日志路径。
- HADOOP_HEAPSIZE / YARN_HEAPSIZE - java虚拟机所使用最大内存,单位MB。例如如果是1000就是1000MB。默认就是1000MB.可以根据集群的需要调整大小。
大部分情况下,我们应该设定HADOOP_PID_DIR 和 HADOOP_LOG_DIR,这样只有启动守护程序的用户可以写。否则有潜在的连接攻击。
一般来说,也需要在系统级别shell环境中配置HADOOP_PREFIX,例如可以在目录/etc/profile.d下的脚本中设定:
HADOOP_PREFIX=/path/to/hadoop
export HADOOP_PREFIX
译注:关于是否设置系统级别的环境变量,要看具体环境而定。
Daemon |
Environment Variable |
ResourceManager |
YARN_RESOURCEMANAGER_HEAPSIZE |
NodeManager |
YARN_NODEMANAGER_HEAPSIZE |
WebAppProxy |
YARN_PROXYSERVER_HEAPSIZE |
Map Reduce Job History Server |
HADOOP_JOB_HISTORYSERVER_HEAPSIZE |
4.2配置hadoop守护程序
译注:这个小章节,需要读者格外注意。但本章节中提到的配置仅仅是一些关键性的部分,并不包含所有。建议读者详细阅读各个配置文件的default文档说明。
HDFS设置
Parameter |
Value |
Notes |
fs.defaultFS |
NameNode URI |
hdfs://host:port/ 有的地方如果有启用viewFs,可能前缀不同。但本文只说简单的。 |
io.file.buffer.size |
131072 |
Size of read/write buffer used in SequenceFiles. 单位字节。具体可以参考core-default.xml说明 |
-
etc/hadoop/hdfs-site.xml
-
NameNode(名称节点):