Hadoop集群环境搭建
一、集群规划
这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 DataNode
和 NodeManager
服务,但只有 hadoop-nn-01 上部署 NameNode
和 ResourceManager
服务。
二、前置条件
Hadoop 的运行依赖 JDK,需要预先安装。其安装步骤单独整理至:
使用 scp 命令进行分发 在另外两台机器上安装jdk:
[root@hadoop-nn-01 opt]# scp -r ./jdk1.8.0_181 hadoop-nn-02:/opt/
[root@hadoop-nn-01 opt]# scp -r ./jdk1.8.0_181 hadoop-dn-01:/opt/
或者将tar.gz 文件scp过去重新解压 再按照Linux 下 JDK 的安装 在另外两台机器上配置环境变量
三、配置免密登录
3.1 生成密匙
在每台主机上使用 ssh-keygen -t rsa
命令生成公钥私钥对:
ssh-keygen
3.2 免密登录
在主节点上将公钥拷到一个特定文件authorized_keys中。
[hadoop@hadoop-nn-01 .ssh]$ cat id_rsa.pub >> authorized_keys
[hadoop@hadoop-nn-01 .ssh]$ chmod 600 authorized_keys
将authorized_keys文件拷到下一个节点,并将该节点的ssh密钥id_rsa.pub
加入该文件中。
[hadoop@hadoop-nn-01 .ssh]$scp authorized_keys hadoop@hadoop-nn-02:/home/hadoop/.ssh
登录hadoop-nn-02主机
[hadoop@hadoop-nn-02 .ssh]$ cat id_rsa.pub >> authorized_keys
[hadoop@hadoop-nn-02 .ssh]$scp authorized_keys hadoop@hadoop-dn-01:/home/hadoop/.ssh
最后在hadoop-dn-01
节点
[hadoop@hadoop-dn-01 .ssh]$ cat id_rsa.pub >> authorized_keys
[hadoop@hadoop-dn-01 .ssh]$ scp authorized_keys hadoop@hadoop-nn-01:/home/hadoop/.ssh
[hadoop@hadoop-dn-01 .ssh]$ scp authorized_keys hadoop@hadoop-nn-02:/home/hadoop/.ssh
这样就完成了三个节点间的免密登录 核心就是配置authorized_keys
文件 将需要免密登录的host的id_rsa.pub
加入authorized_keys
即可
3.3 验证免密登录
ssh hadoop-nn-01
ssh hadoop-nn-02
ssh hadoop-dn-01
四、集群搭建
4.1 下载并解压
下载 Hadoop 安装包,下载地址为:https://hadoop.apache.org/releases.html
# 解压
tar -zvxf hadoop-3.1.3.tar.gz -C /home/hadoop/
4.2 配置环境变量
sudo vi /etc/profile
配置环境变量:
export HADOOP_HOME=/home/hadoop/hadoop-3.1.3
export PATH=${HADOOP_HOME}/bin:$PATH
执行 source
命令,使得配置的环境变量立即生效:
source /etc/profile
4.3 修改Hadoop配置
进入 ${HADOOP_HOME}/etc/hadoop
目录下,修改配置文件。各个配置文件内容如下:
1. hadoop-env.sh
# 指定JDK的安装位置
export JAVA_HOME=/opt/jdk1.8.0_181/
2. core-site.xml
<configuration>
<property>
<!--指定 namenode 的 hdfs 协议文件系统的通信地址-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop-nn-01:8020</value>
</property>
<property>
<!--指定 hadoop 存储临时文件的目录-->
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>
3. hdfs-site.xml
<configuration>
<property>
<!--namenode 节点数据(即元数据)的存放位置,可以指定多个目录实现容错,多个目录用逗号分隔-->
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namenode/data</value>
</property>
<property>
<!--datanode 节点数据(即数据块)的存放位置-->
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode/data</value>
</property>
</configuration>
4. yarn-site.xml
<configuration>
<property>
<!--配置 NodeManager 上运行的附属服务。需要配置成 mapreduce_shuffle 后才可以在 Yarn 上运行 MapReduce 程序。-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<!--resourcemanager 的主机名-->
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-nn-01</value>
</property>
</configuration>
5. mapred-site.xml
<configuration>
<property>
<!--指定 mapreduce 作业运行在 yarn 上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
5. workers
配置所有从属节点的主机名或 IP 地址,每行一个。所有从属节点上的 DataNode
服务和 NodeManager
服务都会被启动。
hadoop-nn-01
hadoop-nn-02
hadoop-dn-01
4.4 分发程序
将 Hadoop 安装包分发到其他两台服务器,分发后建议在这两台服务器上也配置一下 Hadoop 的环境变量。
# 将安装包分发到hadoop-nn-02
scp -r /home/hadoop/hadoop-3.1.3/ hadoop-nn-02:/home/hadoop/
# 将安装包分发到hadoop-dn-01
scp -r /home/hadoop/hadoop-3.1.3/ hadoop-dn-01:/home/hadoop/
4.5 初始化
在 hadoop-nn-01
上执行 namenode 初始化命令:
hdfs namenode -format
4.6 启动集群
进入到 hadoop-nn-01
的 ${HADOOP_HOME}/sbin
目录下,启动 Hadoop。此时 hadoop002
和 hadoop003
上的相关服务也会被启动:
# 启动dfs服务
./start-dfs.sh
# 启动yarn服务
./start-yarn.sh
4.7 查看集群
在每台服务器上使用 jps
命令查看服务进程:
[hadoop@hadoop-nn-01 sbin]$ jps
34819 SecondaryNameNode
35331 Jps
35197 NodeManager
35086 ResourceManager
34510 NameNode
34622 DataNode
[hadoop@hadoop-nn-02 data]$ jps
2771 NodeManager
2643 DataNode
2885 Jps
[hadoop@hadoop-dn-01 ~]$ jps
2837 Jps
2726 NodeManager
2598 DataNode
或直接进入 Web-UI 界面进行查看,端口为 9870
。可以看到此时有三个可用的 Datanode
:http://hadoop-nn-01:9870/
接着可以查看 Yarn 的情况,端口号为 8088
:http://hadoop-nn-01:8088/
也可看到看到此时有三个 Active Nodes
五、查看集群
[hadoop@hadoop-dn-01 gzg]$ hadoop fs -put test.txt /tmp
[hadoop@hadoop-dn-01 gzg]$ hadoop fs -text /tmp/test.txt