hadoop集群搭建

时间:2022-07-23
本文章向大家介绍hadoop集群搭建,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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集群密码设置见

https://blog.csdn.net/teeleejoin/article/details/93490570