目的
本篇文章介绍了如何安装和配置Hadoop集群,范围从几个节点到几千个节点的超大集群。要使用Hadoop,您可能需要先在单机上安装(请参考 单节点安装
)。
本篇文章不涉及安全或高可用性等高级主题。
准备环境
3台Linux服务器(CentOS7 64位)。
配置host
在三个服务器中,分别编辑/etc/hosts
文件,下面为此次示例IP:
1
2
3
| 10.4.53.78 bigdata-1
10.4.53.79 bigdata-2
10.4.53.80 bigdata-3
|
计划分配
将bigdata-1
做为主节点,运行NameNode
和ResourceManager
,将bigdata-2
和bigdata-3
做为从节点,运行DataNode
和DataManager
。
安装pdsh
pdsh
的全称是parallel distributed shell
,可以在多台服务器上一起执行shell命令。pdsh
使用前要配置ssh免密登陆
。
如果安装失败,没有找到yum源,查看当前yum源里是否有epel
,如果没有则需要安装。
配置SSH免密登陆
在bigdata-1
上生成密钥:
1
| ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
|
将生成的公钥同步到bigdata-2
和bigdata-3
上
1
2
| ssh-copy-id bigdata-2
ssh-copy-id bigdata-3
|
执行同步时,要输入密码确认,执行成功后,则可免密登陆
1
2
| ssh bigdata-2
ssh bigdata-3
|
配置Hadoop集群
在bigdata-1
服务器上操作,根据单节点安装
中下载解压Hadoop3。
配置Hadoop环境变量
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
1
2
| # 配置JAVA_HOME
export JAVA_HOME=/usr/local/java/default
|
配置dfs文件
$HADOOP_HOME/etc/hadoop/core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
| <configuration>
<property>
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
<name>fs.defaultFS</name>
<value>hdfs://bigdata-1:9000</value>
</property>
<property>
<!--指定 hadoop 集群存储临时文件的目录-->
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
|
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| <configuration>
<property>
<!--datanode 节点数据(即数据块)的数量-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<!--SecondaryNameNode的地址-->
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata-1:9868</value>
</property>
<property>
<!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/dfs/name</value>
</property>
<property>
<!--datanode 节点数据(即数据块)的存放位置-->
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/dfs/data</value>
</property>
</configuration>
|
$HADOOP_HOME/libexec/hadoop-config.sh
1
2
3
4
| # 以下在Hadoop3中必须配置,否则启动失败,在Hadoop2中无需配置。
HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
|
配置yarn文件
$HADOOP_HOME/etc/hadoop/yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <configuration>
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<property>
<!--resourcemanager 的主机名-->
<name>yarn.resourcemanager.hostname</name>
<value>bigdata-1</value>
</property>
</configuration>
|
$HADOOP_HOME/etc/hadoop/mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
| <configuration>
<!--指定 mapreduce 作业运行在 yarn 上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--制定 mapreduce 作业运行时依赖的classpath路径-->
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
|
$HADOOP_HOME/libexec/yarn-config.sh
1
2
3
| # 以下在Hadoop3中必须配置,否则启动失败,在Hadoop2中无需配置。
YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root
|
配置从节点信息
$HADOOP_HOME/etc/hadoop/workers
⚠️ Hadoop2里的文件名为slaves
分发Hadoop程序
使用pdcp
将bigdata-1
服务器上所有的配置分发到其他服务器,pdcp
是安装pdsh
时附带安装的命令,用来传输文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 分别创建java目录
pdsh -w bigdata-[2-3] mkdir /usr/local/java
# 分别创建hadoop目录
pdsh -w bigdata-[2-3] mkdir /usr/local/hadoop
# 并行传输Hadoop,因为是个目录,所以加 -r
pdcp -r -w bigdata-[2-3] /usr/local/hadoop/hadoop-3.3.0 /usr/local/hadoop/
# 并行传输Java
pdcp -r -w bigdata-[2-3] /usr/local/java/jdk8u282-b08 /usr/local/java/
# 并行传输hosts文件
pdcp -w bigdata-[2-3] /etc/hosts /etc/hosts
# 并行传输环境变量配置文件
pdcp -w bigdata-[2-3] /etc/profile /etc/profile
# 使环境变量生效
pdsh -w bigdata-[2-3] source /etc/profile
|
格式化
在bigdata-1
上执行namenode格式化命令:
1
| $HADOOP_HOME/bin/hdfs namenode -format
|
启动集群
- 在
bigdata-1
上执行启动hdfs命令:
1
| $HADOOP_HOME/sbin/start-dfs.sh
|
启动成功后,执行jps
命令查看启动的进程,可以在bigdata-1
上看到NameNode
和SecondaryNameNode
进程,在bigdata-2
和bigdata-3
上看到DataNode
。
- 在
bigdata-1
上执行启动yarn命令:
1
| $HADOOP_HOME/sbin/start-yarn.sh
|
启动成功后,执行jps
命令查看新增的进程,可以在bigdata-1
上看到新增了ResourceManger
进程,在bigdata-2
和bigdata-3
上新增了NodeManager
进程。
其他命令
- 停止hdfs命令
1
| $HADOOP_HOME/sbin/stop-dfs.sh
|
- 停止yarn命令
1
| $HADOOP_HOME/sbin/stop-yarn.sh
|
- 启动全部(依次启动hdfs和yarn)
1
| $HADOOP_HOME/sbin/start-all.sh
|
- 停止全部(依次停止hdfs和yarn)
1
| $HADOOP_HOME/sbin/stop-all.sh
|
Web UI
- ResourceManager访问地址
http://bigdata-1:8088
- NameNode访问地址
http://bigdata-1:9870
⚠️ 在Hadoop2中,访问地址是 http://bigdata-1:50070
- SecondaryNameNode访问地址
http://bigdata-1:9868
⚠️ 在Hadoop2中,访问地址是 http://bigdata-1:50090
- NodeManager访问地址
http://bigdata-2:8042
- DataNode访问地址
http://bigdata-2:9864
⚠️ 在Hadoop2中,访问地址是 http://bigdata-2:50075