集群规划
- 首先进行 集群规划 ,文件中的某些配置需要基于对集群的规划,进行配置之前,需要先计划好Hadoop中的各个组件服务器应该搭载在哪台主机上,实现 负载均衡,避免由于宕机而造成不可逆损失,集群规划 是搭建分布式环境之前的最重要步骤之一,本次实验中具体规划如下:
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | DataNode SecondaryNameNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
- 操作系统:CentOS-7-x86_64
- Hadoop版本:hadoop-2.7.7
1. 核心配置文件
- 配置文件在 /hadoop-2.7.7/etc/hadoop 路径下
- 注意:在进行配置之前需要在 /etc/hosts 文件中建立IP到主机名的映射
(1)配置core-site.xml
- 编辑 core-site.xml 文件,在configuration中插入配置信息,具体配置如下所示:
<configuration>
<!--指定HDFS文件系统访问地址,将其设置为NameNode的地址,并指定通信端口-->
<!-- 默认值:file:/// -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
<description>The name of the default file system.</description>
</property>
<!--指定Hadoop运行时产生的临时文件存储目录-->
<!-- 默认值:/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.7/tmp</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
2. HDFS配置文件
- 配置文件路径同上
(1)配置hadoop-env.sh
- 编辑 hadoop-env.sh 文件,将其中的 JAVA_HOME 环境变量修改为本机Java安装绝对路径,如:
# 修改前:export JAVA_HOME=${JAVA_HOME},修改后:
export JAVA_HOME=/opt/module/jdk1.8.0_221/
(2)配置hdfs-site.xml
- 编辑 hdfs-site.xml 文件,在configuration中插入配置信息,具体配置如下所示:
<configuration>
<!--指定HDFS副本因子数,由于实验主机磁盘空间不足,本次实验中设置为1,一般需要设置为3-->
<!-- 默认值:3 -->
<property>
<name>dfs.replication</name>
<value>1</value>
<description>
Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
</description>
</property>
<!--以下是NameNode配置-->
<!--指定NameNode节点的Web UI地址-->
<!-- 默认值:0.0.0.0:50070 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop101:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
</description>
</property>
<!--指定NameNode节点上存储name table(fsimage)文件的本地路径,可以是逗号分割的多路径.-->
<!--默认值:file://${hadoop.tmp.dir}/dfs/name-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namenode/fsimage</value>
<description>
Determines where on the local filesystem the DFS name node
should store the name table(fsimage).
</description>
</property>
<!--指定NameNode节点上存储transaction(edits)文件的本地路径,可以是逗号分割的多路径.-->
<!--默认值:${dfs.namenode.name.dir}-->
<property>
<name>dfs.namenode.edits.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namenode/edits</value>
<description>
Determines where on the local filesystem the DFS name node
should store the transaction (edits) file.
</description>
</property>
<!--指定DataNode节点上存储Blocks文件的本地路径,可以是逗号分割的多路径.-->
<!--默认值:file://${hadoop.tmp.dir}/dfs/data-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/datanode/data</value>
<description>
Determines where on the local filesystem an DFS data node
should store its blocks.
</description>
</property>
<!--以下是SecondaryNameNode配置-->
<!--指定NameNode辅助名称节点SecondaryNameNode的Web UI地址-->
<!-- 默认值:0.0.0.0:50090 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
<description>
The secondary namenode http server address and port.
</description>
</property>
<!--指定SecondaryNameNode节点上存储temporary images文件的本地路径,可以是逗号分割的多路径.-->
<!--默认值:file://${hadoop.tmp.dir}/dfs/namesecondary-->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary/fsimage</value>
<description>
Determines where on the local filesystem the DFS secondary
name node should store the temporary images to merge.
</description>
</property>
<!--指定SecondaryNameNode节点上存储temporary edits文件的本地路径,可以是逗号分割的多路径.-->
<!--默认值:${dfs.namenode.checkpoint.dir}-->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary/edits</value>
<description>
Determines where on the local filesystem the DFS secondary
name node should store the temporary edits to merge.
</description>
</property>
</configuration>
3. YARN配置文件
- 配置文件路径同上
(1)配置yarn-env.sh
- 编辑 yarn-env.sh 文件,将其中的 JAVA_HOME 环境变量修改为本机Java安装绝对路径,如:
# 修改前:# export JAVA_HOME=/home/y/libexec/jdk1.6.0/,修改后:
export JAVA_HOME=/opt/module/jdk1.8.0_221/
(2)配置yarn-site.xml
- 编辑 yarn-site.xml 文件,在configuration中插入配置信息,具体配置如下所示:
<configuration>
<!--Site specific YARN configuration properties-->
<!--设置Reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定YARN中ResourceManager节点的主机地址-->
<!-- 默认值:0.0.0.0 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
<description>The hostname of the RM.</description>
</property>
<!-- YARN资源相关设置 -->
<!-- 设置nodemanager主机具有的虚拟CPU核心个数 -->
<!-- 由于本机只有2个核心,因此设置为2 -->
<!-- 默认值:8 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
<description>
Number of vcores that can be allocated
for containers. This is used by the RM scheduler when allocating
resources for containers. This is not used to limit the number of
physical cores used by YARN containers.
</description>
</property>
<!--此参数指的是当前主机nodemanager的用于分配给Container的物理内存大小,单位为MB
建议设置成较小于实际物理内存的值,留余一部分内存给操作系统使用.-->
<!--本次实验主机内存大小为2GB,因此将次参数设置成1536MB,剩余部分留给操作系统 -->
<!--默认值:8192-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1536</value>
<description>
Amount of physical memory, in MB, that can be allocated for containers.
</description>
</property>
</configuration>
4. MapReduce配置文件
# 修改前:# export JAVA_HOME=/home/y/libexec/jdk1.6.0/,修改后:
export JAVA_HOME=/opt/module/jdk1.8.0_221/
cp mapred-site.xml.template mapred-site.xml
- 编辑 mapred-site.xml 文件,在configuration中插入配置信息,具体配置如下所示:
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!--指定MR程序运行框架,设置为YARN上运行,默认是在本地运行-->
<!--默认值:local-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>
The runtime framework for executing MapReduce jobs.
Can be one of local, classic or yarn.
</description>
</property>
</configuration>
5. slaves配置文件
- 配置文件路径同上
-
(1)配置slaves文件
- 此文件内容主要是用于作为后续集群脚本启动时的参数,此文件中声明的主机共同组成集群,
- 注意:文件中内容必须一行一个hostname,不允许有任何多余空格,使用主机名配置此文件之前,应该事先在 /etc/hosts 文件中设置好主机IP到主机名的映射,具体配置如下所示:
hadoop101
hadoop102
hadoop103
6. 同步集群配置
- 同步集群中各个主机的配置文件
- 至此核心配置文件、HDFS、YARN、MapReduce、slaves、hosts共9个文件都已经配置完成,后续可在此基础上增加配置
7. 启动集群测试
- 启动集群之前最好设置 ssh免密登录,避免启动过程中需要频繁输入密码
实现主机之间ssh免密登录 -
(1)格式化NameNode节点
- 如果是第一次启动,记得使用hdfs命令格式化NameNode节点。如果不是第一次记得先删除
tmp
和logs
文件夹(都在hadoop文件夹内)。格式化命令如下:
[tomandersen@hadoop101 hadoop]$ hdfs namenode -format
-
(2)启动HDFS集群
- 注意:在哪台主机上配置的NameNode,哪台主机就是HDFS的客户端,只能在那台主机上启动HDFS集群,否则将无法正常启动NameNode,在其他节点上启动HDFS会将其作为DataNode启动,导致集群缺少ResourceManager(关闭时也应如此)。这也是“start-all.sh”等工具被弃用的重要原因之一
[tomandersen@hadoop101 hadoop]$ start-dfs.sh
-
(3)启动YARN集群
- 注意:在哪台主机上配置的ResourceManager,哪台主机就是YARN的客户端,只能在那台主机上启动YARN集群,否则将无法正常启动ResourceManager,在其他节点上启动YARN会将其作为NodeManager启动,导致集群缺少ResourceManager(关闭时也应如此)
[tomandersen@hadoop102 hadoop]$ start-yarn.sh
[tomandersen@hadoop101 hadoop]$ jps
23505 NodeManager
23915 NameNode
24270 Jps
- hadoop102:
[tomandersen@hadoop102 hadoop]$ jps
26327 Jps
25784 NodeManager
25631 ResourceManager
- hadoop103:
[tomandersen@hadoop103 hadoop]$ jps
18177 Jps
17699 NodeManager
18093 SecondaryNameNode
- 最后也可以使用Hadoop自带的例子测试运行,此程序是用于计算圆周率
hadoop jar /opt/module/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi 10 10