1.首先配置Linux集群
1.1首先关闭防火墙并且禁止开机启用防火墙
systemctl stop firewalld && systemctl disable firewalld
查看防火墙状态
firewall-cmd --state
1.2关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && /usr/sbin/setenforce 0
记得重启配置生效
reboot
查看se记得重启linux状态
sestatus
1.3各节点之间主机名互相解析分别修改3台主机名分别为node1、node2和node3,在centos 7中直接修改/etc/hostname加入本机主机名和主机表,然后重启网络服务即可。
设置主机名称 修改最后的一个hostname
hostnamectl set-hostname hostname
在这里我以高大帅的机器为例:
此次机器集群为 xx.xx.xx.160
xx.xx.xx.161
xx.xx.xx.162
xx.xx.xx.163
- 或者使用如下命令操作修改主机名称:
vi /etc/hostname #删除里面其他没有用的信息添加 我们的节点名称 node1
重启网络服务:
systemctl restart network.service
输入命令检测是否修改成功(修改为node1则成功):
hostname
其他两台机器改一下我们的hostname就行了 node2 node3(重复上面的操作)
1.4配置3台主机的主机表,在/etc/hosts中加入
vim /etc/hosts #往后面添加如下数据节点信息 不要修改里面的已有信息
xx.xx.xx.160 master
xx.xx.xx.161 node1
xx.xx.xx.162 node2
xx.xx.xx.163 node3
其余的两台机器都是如此操作
1.5检测是否配置成功
ping node1 -c 3 # 只ping 3次就会停止,否则要按Ctrl+c中断ping命令 修改里面的节点名称查看是否ping通
1.6SSH无密码登录节点
以master为例,我们执行如下命令生成密匙:
#执行这条命令一直按回车即可:
ssh-keygen -t rsa
#master、node1、node2、node3中都执行下面这四条命令 需要输入各个机器对应的密码
ssh-copy-id -i master
ssh-copy-id -i node1
ssh-copy-id -i node2
ssh-copy-id -i node3
- 其余的三台机器都执行1.6操作
1.7测试节点免密登陆
[root@node1 ~]# ssh node2
Last failed login: Sun Aug 16 12:45:43 CST 2020 from 106.13.215.17 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sun Aug 16 12:44:35 2020 from node1
2.Hadoop安装及配置
2.1首先得有Java环境(最好是手动安装,不要yum安装)
下载安装包 jdk-8u141-linux-x64.tar.gz
2.1.1解压javajdk
tar -zxvf jdk-8u141-linux-x64.tar.gz
2.1.2配置全局变量
vim /etc/profile
复制以下三行到文件中,按esc退出编辑模式,输入:wq保存退出(这里的JAVA_HOME以自己实际的目录为准)
export JAVA_HOME=/root/apps/jdk1.8.0_141
export PATH=./$PATH:$JAVA_HOME/bin
2.1.3全局变量立即生效
source /etc/profile
2.1.4查看安装jdk是否成功
java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
其他的机器自行远程拷贝
scp -r /root/apps/jdk1.8.0_141 node1:/root/apps
scp -r /root/apps/jdk1.8.0_141 node2:/root/apps
scp -r /root/apps/jdk1.8.0_141 node3:/root/apps
拷贝环境配置文件
scp -r /etc/profile node1:/etc
scp -r /etc/profile node2:/etc
scp -r /etc/profile node3:/etc
测试每个jdk环境
2.2安装Hadoop
2.2.1下载Hadoop安装包
http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
2.2.2上传Hadoop
在根目录下创建app目录
mkdir apps
使用工具上传文件到这个目录下面(我使用的是xftp)
2.2.3配置Hadoop
解压我们的安装包
tar -zxvf hadoop-3.2.1.tar.gz
配置我们的hadoop环境
修改hadoop-env.sh文件
vim apps/hadoop-3.2.1/etc/hadoop/hadoop-env.sh
添加信息
export JAVA_HOME=/root/apps/jdk1.8.0_141
export HADOOP_LOG_DIR=/root/data/hadoop_repo/logs/hadoop
检测我们的hadoop环境是否有问题
[root@master apps]# ./hadoop-3.2.1/bin/hadoop version
Hadoop 3.2.1
Source code repository https://gitbox.apache.org/repos/asf/hadoop.git -r b3cbbb467e22ea829b3808f4b7b01d07e0bf3842
Compiled by rohithsharmaks on 2019-09-10T15:56Z
Compiled with protoc 2.5.0
From source with checksum 776eaf9eee9c0ffc370bcbc1888737
This command was run using /root/apps/hadoop-3.2.1/share/hadoop/common/hadoop-common-3.2.1.jar
手动配置JDK,忽略下面的操作
有的可能会报错,需要修改一下我们的jdk配置(这个错误只存在于我们的yum自动安装的openjdk)
ERROR: JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el6_9.x86_64 does not exist.
vi /etc/profile #把JAVA_HOME直接指定为我们的/usr
export JAVA_HOME=/usr
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
全局变量立即生效
source /etc/profile
检查jdk是否错误
java -version
2.2.3.1配置core-site.xml
注意fs.defaultFS属性中的主机名需要和你配置的主机名保持一致
cd /root/apps/hadoop-3.2.1
vim ./etc/hadoop/core-site.xml
#在core-site.xml 添加上我们的配置信息
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/data/hadoop_repo</value>
</property>
</configuration>
2.2.3.2同样的,修改配置文件 hdfs-site.xml:
vim ./etc/hadoop/hdfs-site.xml #添加如下内容
<configuration>
<!-- 副本数设置为3 小于等于节点数-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定名称结点缓存数据的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/name</value>
</property>
<!-- 指定数据结点缓存数据的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/data</value>
</property>
<!-- 指定 hadoop 辅助名称节点的地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node1:50090</value>
</property>
</configuration>
2.2.3.3修改mapred-site.xml
vim ./etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定以Yarn方式运行 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
2.2.3.4修改yarn-site.xml
vim ./etc/hadoop/yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定启动YARN的ResourceManager的主机地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
2.2.3.5修改works
vim ./etc/hadoop/worker
删除localhost添加如下内容
master
node1
node2
node3
2.2.3.6修改启动脚本
修改start-dfs.sh,stop-dfs.sh这两个脚本文件在文件中前面都增加如下内容:
[root@master hadoop-3.2.1]# vim ./sbin/start-dfs.sh
[root@master hadoop-3.2.1]# vim ./sbin/stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
修改start-yarn.sh,stop-yarn.sh这两个文件在文件前面增加人如下内容:
[root@master hadoop-3.2.1]# vim ./sbin/stop-yarn.sh
[root@master hadoop-3.2.1]# vim ./sbin/start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
拷贝我们配置好的文件到其他的主机下面
scp -r /root/apps/hadoop-3.2.1 node1:/root/apps
scp -r /root/apps/hadoop-3.2.1 node2:/root/apps
scp -r /root/apps/hadoop-3.2.1 node3:/root/apps
2.2.4配置完成后,执行 NameNode 的格式化:
./bin/hdfs namenode -format #这个是在hadoop的安装目录下执行
启动成功的话,我们的root目录下会创建我们的hdpdata目录
并且显示
2020-08-21 11:07:20,195 INFO common.Storage: Storage directory /root/name has been successfully formatted.
使用命令
ll /root
2.2.4.1接下来启动hdfs集群
./sbin/start-dfs.sh #其他集群也需要执行这个命令
显示如下:
[root@master hadoop-3.2.1]# ./sbin/start-dfs.sh
Starting namenodes on [master]
Last login: Fri Aug 21 09:57:22 CST 2020 from 223.70.160.3 on pts/0
Last failed login: Fri Aug 21 11:08:27 CST 2020 from 112.17.39.78 on ssh:notty
There were 87 failed login attempts since the last successful login.
Starting datanodes
Last login: Fri Aug 21 11:09:04 CST 2020 on pts/0
node2: WARNING: /root/data/hadoop_repo/logs/hadoop does not exist. Creating.
node3: WARNING: /root/data/hadoop_repo/logs/hadoop does not exist. Creating.
node1: WARNING: /root/data/hadoop_repo/logs/hadoop does not exist. Creating.
Starting secondary namenodes [node1]
Last login: Fri Aug 21 11:09:07 CST 2020 on pts/0
如果使用hadoop 2.x 我们需要访问 50070端口
现在们使用hadoop 3.x 我们需要访问 9870端口
以我自己现在使用的为例
#这个是hdfs
xx.xx.xx.160:9870
#这个集群节点
xx.xx.xx.160:8088
后面 可能启动后无法访问**xx.xx.xx.160:8088 ** 系统缓存原因(这个关闭主集群节点就行了)
我们需要先关闭然后重新启动集群节点
./sbin/stop-all.sh
./sbin/start-dfs.sh
Hadoop集群密码设置见
评论区