配置虚拟机环境

建立四台虚拟机,配置Hadoop的分布式集群。并且配置静态ip地址如下,最终实现master能够直接与三个节点ssh无密码联通。

主机名 ip地址
master 192.168.166.100
node1 192.168.166.101
node2 192.168.166.102
node3 192.168.166.103

安装VMware虚拟机平台

新建虚拟机

安装CentOS-7系统

安装Java环境

克隆虚拟机

配置静态ip与hosts文件

配置ssh免密登陆

使用 ssh-keygen -t rsa 生成一对RSA公私钥,将公钥放在目标登录的服务器上,私钥放在本地。当ssh客户端发出请求,请求使用基于密钥的安全验证,服务器将先寻找公钥,并与传递过来的公钥做比较,若一致,则服务器使用公钥加密一个challenge并返回客户端,客户端通过私钥解密challenge并发送到服务器即可完成安全验证。

ssh-copy-id -i ~/.ssh/id_rsa.pub master

ssh-copy-id -i ~/.ssh/id_rsa.pub node1

ssh-copy-id -i ~/.ssh/id_rsa.pub node2

ssh-copy-id -i ~/.ssh/id_rsa.pub node3

Hadoop集群安装

(Master)上传解压Hadoop

tar -zxf hadoop-3.1.4.tar.gz -C /opt

如图,hadoop已解压到/opt目录下

(Master)配置configuration

后续所有配置文件均在如下目录

/opt/hadoop-3.1.4/etc/hadoop

hadoop-env.sh

vim编辑hadoop-env.sh文件如下

yarn-env.sh

该文件无需配置,原因如下

core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!--hdfs临时路径-->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<!--hdfs 的默认地址、端口 访问地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
</configuration>

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
23
24
25
26
27
28
29
30
<configuration>
<!--hdfs web的地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!-- 副本数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 是否启用hdfs权限检查 false 关闭 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 块大小,默认字节, 可使用 k m g t p e-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.name.dir</name>
<value>/data/hadoop/datanode</value>
</property>
</configuration>

mapred-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<configuration>
<!--local表示本地运行,classic表示经典mapreduce框架,yarn表示新的框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/hadoop-3.1.4</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/hadoop-3.1.4/share/hadoop/mapreduce/*:/opt/hadoop-3.1.4/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>

yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<configuration>
<!--集群master-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- NodeManager上运行的附属服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 关闭内存检测-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>

workers

1
2
3
node1
node2
node3

(Master)拷贝安装包到其他节点

scp -r /opt/hadoop-3.1.4/ node1:/opt/

scp -r /opt/hadoop-3.1.4/ node2:/opt/

scp -r /opt/hadoop-3.1.4/ node3:/opt/

(Slave)创建数据存储目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir -p /data/hadoop/tmp
mkdir -p /data/hadoop/namenode

ssh node1 "mkdir -p /data/hadoop/tmp"
ssh node1 "mkdir -p /data/hadoop/namenode"

ssh node2 "mkdir -p /data/hadoop/tmp"
ssh node2 "mkdir -p /data/hadoop/namenode"

ssh node3 "mkdir -p /data/hadoop/tmp"
ssh node3 "mkdir -p /data/hadoop/namenode"

ssh node1 "ls /data/hadoop"
ssh node2 "ls /data/hadoop"
ssh node3 "ls /data/hadoop"

(Master)HDFS格式化

到 /opt/hadoop-3.1.4/bin目录执行hdfs格式化命令

1
2
cd /opt/hadoop-3.1.4/bin/
./hdfs namenode -format my_hdfs

其中my_hdfs为自己指定的名称

Hadoop集群启动与关闭

为了方便使用hadoop的相关命令,故把hadoop安装目录的bin与sbin添加到PATH环境变量中。

添加如下内容到文件/etc/profile

1
2
3
export HADOOP_HOME=/opt/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

Hadoop集群启动

在Master节点: $HADOOP_HOME/sbin/start-dfs.sh ,启动HDFS
在Master节点:$HADOOP_HOME/sbin/start-yarn.sh, 启动YARN。
在Master节点:$HADOOP_HOME/bin/mapred --daemon start historyserver,启动日志服务。

如果添加过bin与sbin环境变量,可以直接

start-dfs.sh

start-yarn.sh

mapred --daemon start historyserver

分别启动HDFS,YARN,日志服务。

Hadoop集群关闭

stop-dfs.sh

stop-yarn.sh

mapred --daemon stop historyserver

Hadoop集群启动报错

编辑如下文件

/opt/hadoop-3.1.4/etc/hadoop/hadoop-env.sh

插入如下语句

1
2
3
4
5
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

查看节点上的服务

jps是一条java提供的命令,用于监控当前启动的java进程。

如下图分别为master与node3上执行jps命令监控到的服务


关闭虚拟机防火墙

分别在master, node1, node2, node3中永久关闭防火墙

systemctl disable firewalld.service

在宿主机浏览器中访问

hdfs监控

http://192.168.166.100:50070/

其中url的主机地址为master节点的ip地址,端口号为hdfs-site.xml中配置的端口

yarn 任务管理器监控

http://192.168.166.100:8088/