Ubuntu18.04Hadoop集群搭建过程

虽然不知道有什么用但为了上课还是要装
直接切入正题

从零开始的先看这篇
https://blog.csdn.net/m0_46108436/article/details/105148399

用到的资源

master主节点用的桌面版 其他子节点用的server版
安装的时候有个坑
安装的时候一个需要注意的地方是,Ubuntu在安装的过程中是需要联网下载一些软件包的(无论是桌面版还是server版),而默认的软件包镜像地址下载非常慢,导致安装需要的时间非常长,需要改成国内镜像
在这里插入图片描述
国内的一些主流镜像地址是都可以的,这里是阿里云和163的镜像地址

  • http://mirrors.aliyun.com/ubuntu/
  • http://mirrors.163.com/ubuntu/

注意!!所有节点都要有root用户权限 不然文件复制不过去 具体看最上面的链接,文章里有介绍root用户使用方法

注意!!!本文所有图中的slove都改成slave,我之前写错了,影响各位了

切换到root用户

sudo su #回车后自己输入密码

在这里插入图片描述

修改主机名字和ip映射

  • 修改主机名字 主机改成master 其他改成slave1、slave2以此类推
vim /etc/hostname
  • 修改ip映射
vim /etc/hosts

不管多少台 每台都要这样写

这里的ip是每个人都不一样的,一定要注意ip和主机名对应,不知道的用ifconfig命令查询主机ip
在这里插入图片描述
然后重启一下才能在终端看到机器名的变化

reboot

测试能否互相ping通 能看到消息就直接Ctrl+C结束
master主机ping slave1
slave1 ping master

SSH无密码登陆节点

这个操作是要让master节点可以无密码 SSH 登陆到各个slave节点上。

1、首先生成master节点的公匙,在master节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):

执行ssh localhost

ssh localhost
cd ~/.ssh             
rm ./id_rsa*            # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa       # 一直按回车就可以

在这里插入图片描述

2、让master节点需能无密码 SSH 本机,在master节点上执行

cat ./id_rsa.pub >> ./authorized_keys

测试是否成功

ssh master

在这里插入图片描述
生成公钥后:此时登陆本机不需要输入密码
3、接着在 master节点将上公匙传输到 slave1和slave2节点(在传输前如果不存在目录,先创建)

scp ~/.ssh/id_rsa.pub root@slave1:/home/hadoop/

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 datanode 上 root 用户的密码(root),输入完成后会提示传输完毕,如下所示:
在这里插入图片描述
4、接着在 slave1节点上,将 ssh 公匙加入授权:
切换到/home/hadoop目录

cd /home/hadoop/
mkdir ~/.ssh       # 如果不存在该文件夹需先创建,若已存在则忽略
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub    # 用完就可以删掉了

在这里插入图片描述

如果有其他 slave节点,也要执行将 master公匙传输到 slave节点、在 slave节点上加入授权这两步。这样,在 master节点上就可以无密码 SSH 到各个 slave节点了,可在 master节点上执行如下命令进行检验,如下所示:
输入exit即可退出
在这里插入图片描述

安装jdk

在主机安装jdk

cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件

把从百度网盘下载得到的jdk-8u241-linux-x64tar.gz传到/usr/lib/jvm下

cd /usr/lib/jvm # 进入目录
tar -zxf jdk-8u241-linux-x64.tar.gz
mv jdk1.8.0_241 jdk # 改名字

设置环境变量

回到根目录

cd ~

编辑.bashrc

vim ~/.bashrc

在文件开头添加以下内容

export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

查看是否安装成功:

java -version

出现以下内容即视为成功

root@master:~# java -version
openjdk version "1.8.0_241"
OpenJDK Runtime Environment (build 1.8.0_241-8u241-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.241-b09, mixed mode)

同步到slave1、slave2

同步(因为我们的免密码登录是配了master用户的,所以root用户,还是要输入密码的)
如果有多台就更改slave1名称 每台都要配jdk

scp -r /usr/lib/jvm/jdk root@slave1:/usr/lib/jvm

回到根目录

cd ~

编辑.bashrc

vim ~/.bashrc

在文件开头添加以下内容

export JAVA_HOME=/usr/lib/jvm/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

查看是否安装成功:

java -version

出现以下内容即视为成功

root@master:~# java -version
openjdk version "1.8.0_241"
OpenJDK Runtime Environment (build 1.8.0_241-8u241-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.241-b09, mixed mode)

安装Hadoop,配置PATH变量

将hadoop.tar.gz上传到虚拟机中。我们选择将 Hadoop 安装至 /usr/local/ 中:hadoop的安装包我在本地下载好之后,直接上传到了虚拟机的usr/local中了。(下面命令可以根据你的安装包的目录的不同而有所改变)

进入/usr/local/

cd /usr/local/

解压安装包

tar -zxf hadoop-3.2.1.tar.gz  

将文件夹名改为hadoop

mv hadoop-3.2.1 hadoop         

修改文件权限

chown -R root ./hadoop  

最后查看hadoop版本看是否安装成功
进入hadoop目录

cd /usr/local/hadoop/

查看版本

./bin/hadoop version

如下即为安装成功
在这里插入图片描述
上面显示已经安装好hadoop,可以配置hadoop环境变量了。这样就可以在任意目录中直接使用 hadoop、hdfs 等命令了,如果还没有配置的,需要在 master节点上进行配置。首先执行 vim ~/.bashrc,加入一行:

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

在这里插入图片描述

配置集群/分布式环境

1、集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: workers(16.04好像是slaves)、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

以下修改不建议用vim 建议用gedit 如果用了vim发生格式混乱问题可以:q!退出不保存 然后用gedit编辑

cd /usr/local/hadoop/etc/hadoop
  • workers 添加slave1、slave2
    在这里插入图片描述
  • 文件 core-site.xml 改为下面的配置
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>
  • 文件 hdfs-site.xml,dfs.replication 一般设为 3
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>
  • 文件 mapred-site.xml (可能需要先重命名 mv mapred-site.xml.template mapred-site.xml,默认文件名为 mapred-site.xml.template),然后配置修改如下:
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>
  • 文件 yarn-site.xml:
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

2、配置好后,将 master上的 /usr/local/hadoop 文件夹复制到各个节点上。在 master节点上执行:

cd /usr/local

先压缩

tar -zcf hadoop.master.tar.gz ./hadoop

复制到slave1

scp ./hadoop.master.tar.gz slave1:/home/hadoop

3、在slave1节点上执行

删掉旧的(如果存在)

rm -rf /usr/local/hadoop    

解压

tar -zxf hadoop.master.tar.gz -C /usr/local

修改文件权限

chown -R root /usr/local/hadoop  

在这里插入图片描述

4、同样,如果有其他 slave节点,也要执行将 hadoop.master.tar.gz 传输到 slave节点、在 slave节点解压文件的操作。首次启动需要先在 master节点执行 NameNode 的格式化:(中间可能会让你按y回车)

hdfs namenode -format       # 首次运行需要执行初始化,之后不需要

成功的话,会看到 “successfully formatted” 的提示即为成功
在这里插入图片描述
5、接着可以启动 hadoop 了,启动需要在 master节点上进行:

注意!!! 如果你出现以下报错直接看最后的报错解决
在这里插入图片描述

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

输入jps查看
出警告不用管

在master可以看到
在这里插入图片描述
在slave1可以看到
在这里插入图片描述

在这里插入图片描述
缺少任一进程都表示出错。另外还需要在 master节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功
我这里只配了一台所以是1
在这里插入图片描述
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:9870
在这里插入图片描述

本来连50070端口一直连不上 查了很久很久发现hadoop3更新了端口配置
在这里插入图片描述

启动关闭

启动全部

start-all.sh

关闭hadoop

stop-all.sh

Ubuntu关闭防火墙开机启动

切换到root账号下,检查防火墙状态

firewall-cmd --state

在这里插入图片描述
关闭防火墙

 systemctl stop firewalld.service

再次检查防火墙状态,已经是not running

firewall-cmd --state

设置主节点上禁止开机启动防火墙

systemctl disable firewalld.service

报错

Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
在这里插入图片描述

在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root

猜你喜欢

转载自blog.csdn.net/m0_46108436/article/details/105729877