Hadoop 2.9.1 集群安装
本文章翻译自Hadoop官方文档:https://hadoop.apache.org/docs/r2.9.1/hadoop-project-dist/hadoop-common/ClusterSetup.html
目的
本文描述了如何安装、配置和管理有实际意义的Hadoop集群,其规模可从几个节点的小集群到几千个节点的超大集群。
本文档中不包含高级话题例如安全和高可用。
先决条件
安装
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。
通常,集群里的一台机器被指定为NameNode,另一台不同的机器被指定为ResourceManager。这些机器是masters。其他的服务(例如WebAppProxy Server 和 MapReduce JobHistory Server)通常根据负载需要安装在专有机器上或者共享的设备上。
集群中剩下的节点既作为DataNode也作为NodeManager,他们是slaves
非安全模式下配置Hadoop
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.xml
和etc/hadoop/mapred-site.xml
另外,你可以通过设置etc/hadoop/hadoop-env.sh
和etc/hadoop/yarn-env.sh
的变量为集群特有的值来控制*/bin*目录下的hadoop脚本。
要配置Hadoop集群,你需要设置Hadoop守护进程的运行环境和Hadoop守护进程的运行参数。
HDFS的守护进程有NameNode, SecondaryNameNode和DataNode。YARN的守护进程有ResourceManager, NodeManager和WebAppProxy。如果要使用MapReduce, MapReduce JobHistory Server也会运行。在大型集群的安装中,这些服务都被安装在不同的机器上。
配置Hadoop守护进程运行环境
管理员应该修改etc/hadoop/hadoop-env.sh
, etc/hadoop/yarn-env.sh
和可选的etc/hadoop/mapred-env.sh
, 添加集群特有的值来定制Hadoop守护进程的运行环境。
在最后,你必须在每个节点配置好正确的JAVA_HOME
管理员可以使用下面表格中的配置变量来配置指定守护进程的运行环境:
守护进程 | 环境变量 |
---|---|
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 |
例如,为了让NameNode使用并行垃圾回收器,需要在hadoop-env.sh
中添加下面的配置:
|
|
可以在etc/hadoop/hadoop-env.sh
中看其他的一些设置的示例。
还有其他的一些有用的配置变量如:
-
HADOOP_PID_DIR - 存储守护进程ID文件的目录
-
HADOOP_LOG_DIR - 守护进程日志存放的位置。如果日志文件不存在会自动创建。
-
HADOOP_HEAPSIZE / YARN_HEAPSIZE - 最大堆大小,单位MB。例如变量设置为1000,堆大小会设置为1000MB。这个变量用于配置守护进程的堆大小。默认值是1000。如果你需要为每个守护进程单独设置堆大小可以使用这个堆变量。
守护进程 环境变量 ResourceManager YARN_RESOURCEMANAGER_HEAPSIZE NodeManager YARN_NODEMANAGER_HEAPSIZE WebAppProxy YARN_PROXYSERVER_HEAPSIZE Map Reduce Job History Server HADOOP_JOB_HISTORYSERVER_HEAPSIZE
在大多数情况下,你应该指定HADOOP_PID_DIR和HADOOP_LOG_DIR目录,以便它们只能由运行守护进程的用户写入。否则就有可能发生符号链接攻击^1^。
还有一个传统的做法是在系统shell环境变量中配置HADOOP_PREFIX, 例如在/etc/profile.d里添加一个简单的脚本
|
|
符号链接攻击示例
示例1
应用A在/tmp目录下创建一个文件,它假设因为文件名不常见或者因为它编码A的名字或者pid作为文件名,所以无需检查文件是否已经存在
攻击者创建一个指向重要文件F的名字相同的符号链接(软连接)。当root用户执行A的时候,F会被覆盖重写
示例2
用户A运行一个应用创建了一个文件/tmp/x,准备一会更新它。
用户B攻击这个应用,把/tmp/x移走,创建了一个指向重要文件F的软连接/tmp/x
配置Hadoop守护进程
这一节重点介绍配置文件中指定的重要参数
-
etc/hadoop/core-site.xml
Parameter Value Notes fs.defaultFS
NameNode URI hdfs://host:port io.file.buffer.size
131072 Size of read/write buffer used in SequenceFiles. -
etc/hadoop/hdfs-site.xml
- NameNode的配置
Parameter Value Notes dfs.namenode.name.dir
NameNode持久化存储命名空间和事务日志的本地文件系统路径 如果是逗号分隔的目录列表,则为了冗余,将name table复制到所有目录中 dfs.hosts
/dfs.hosts.exclude
List of permitted/excluded DataNodes. If necessary, use these files to control the list of allowable datanodes. dfs.blocksize
268435456 HDFS blocksize of 256MB for large file-systems. dfs.namenode.handler.count
100 More NameNode server threads to handle RPCs from large number of DataNodes.
- NameNode的配置