Hadoop集群的搭建(公网服务器版)

发布于 2020-12-20  221 次阅读


准备工作

博主安装环境:云服务器CentOS7、hadoop2.10、jdk8

配置ssh免密登陆

免密登陆:
通过ssh命令登陆远程主机时,不需要手动输入密码
但是在登陆过程中需要密码,即在登陆过程中自动获取密码
ssh远程登录工具可以生产两种密钥,公钥用于加密,私钥用于解密


配置ssh免密登陆的过程:
假设你只有一台主机

  1. 在主机上执行ssh-keygen命令,生产公钥和私钥
  2. 在主机上,将公钥添加(追加)到认证密钥文件中
    cat .ssh/id_rsa.pub >> .ssh/authorized_keys
  3. 配置完毕可以用下列命令验证
    ssh localhost

注意:
.ssh 目录的权限必须是700
.ssh/authorized_keys 文件权限必须是600
否则公钥认证不会生效。

配置主机名和IP的映射

该步骤可以跳过
配置时请注意内网、外网

执行命令
sudo vi /etc/hosts
添加内容
内网IP地址 主机名
最好在Windows中也进行配置
外网IP地址 主机名
C:\windows\System32\drivers\etc\hosts

创建目录

在每台主机上创建存放软件和软链接的目录
创建目录
sudo mkdir -p /opt/softwares /opt/links
修改权限(一般不用修改)
sudo chown -R root:root /opt/*

搭建集群

Hadoop集群分为:

  • 单机模式:不需要启动任何服务
  • 伪分布式:只有一个计算机节点,主节点和从节点的服务都在该节点上启动
  • 全分布式:有多个计算机节点,主节点和从节点的服务启动在不同的计算机节点上

下面只讲伪分布式的搭建过程
全分布式博主也没有试过

安装JDK

解压JDK的安装包到/opt/softwares目录中
tar zxvf jdk-8u261-linux-x64.tar.gz -C /opt/softwares
创建JDK安装路径的软链接到/opt/links目录中
ln -sf /opt/softwares/jdk1.8.0_261 /opt/links/jdk
配置环境变量
vi ~/.bashrc
加入以下内容

####_JAVA_CONF_####
export JAVA_HOME=/opt/links/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin

执行命令使配置生效
source ~/.bashrc
检测是否安装成功
java -version

安装Hadoop

解压
tar zxvf hadoop-2.10.0.tar.gz -C /opt/softwares/
创建软链接
ln -sf /opt/softwares/hadoop-2.10.0 /opt/links/hadoop
配置环境变量
vi ~/.bashrc

####_HADOOP_CONF_####
export HADOOP_HOME=/opt/links/hadoop
export HADOOP_USER_NAME=用户名
export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin

执行命令使配置生效
source ~/.bashrc
检测是否安装成功
hadoop version

配置Hadoop

以下文件皆在/opt/links/hadoop/etc/hadoop目录下
配置文件中IP地址请一定要用内网IP

hadoop-env.sh

​ 将第25行的JAVA_HOME的路径改为绝对路径

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 用于配置HDFS集群的主节点的IP和端口 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://内网IP地址:9000</value>
    </property>
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- HDFS中数据块的备份个数 -->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <!-- HDFS中数据块的大小(默认128M) -->
    <property>
        <name>dfs.blocksize</name>
        <value>32M</value>
    </property>
    <!-- HDFS集群中主节点产生数据的存放位置 -->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///root/.bigdata/data/nn</value>
    </property>
    <!-- HDFS集群中从节点产生数据的存放位置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///root/.bigdata/data/dn</value>
    </property>
    <!-- HDFS集群中【SecondaryNameNode】产生数据的存放位置 -->
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:///root/.bigdata/data/snn</value>
    </property>
    <property>
        <name>dfs.namenode.checkpoint.edits.dir</name>
        <value>file:///home/用户名/.bigdata/data/snn</value>
    </property>
    <!--Hadoop Web UI界面 -->
    <property>
        <name>dfs.http.address</name>
        <value>内网IP地址:50070</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>内网IP地址:50090</value>
    </property>
</configuration>

mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 配置MR程序的运行平台 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <!-- 配置访问MR程序运行的历史记录的IP和端口 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>内网IP地址:10020</value>
    </property>
    <!-- 配置通过浏览器访问MR程序运行的历史记录的IP和端口 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>内网IP地址:19888</value>
    </property>
    <!-- 从配置层面优化MR程序 -->
    <property>
        <name>mapreduce.job.ubertask.enable</name>
        <value>true</value>
    </property>
</configuration>

yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 配置YARM集群主节点的IP地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>内网IP地址</value>
    </property>
    <!-- 配置MR程序中的数据混洗【Shuffle】方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <!-- 配置YARM集群中从节点产生的数据的存放位置 -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>file:///root/.bigdata/data/nm</value>
    </property>
</configuration>

格式化HDFS集群

HDFS集群的格式化【一般情况下只做一次,并且只在主节点上做】:
命令:
hdfs namenode -format
说明:
此操作只能执行一次
有些时候由于集群性能等问题,可能会导致HDFS集群的数据出现错乱,此时需要重新格式化集群
在重新格式化集群之前,要删除【在删除之前需要停止整个集群】集群中每个主机上的“/root/.bigdata/data/*”目录
执行以下命令即可:
rm -r /root/.bigdata/data/* # 该操作在所有的节点上做
hdfs namenode -format # 该操作只在主节点上做

启动/停止集群

查看节点是否启动成功的命令:jps

HDFS集群

  • 主节点【NameNode】:
    hadoop-daemon.sh start/stop namenode
  • 从节点【DataNode】:
    hadoop-daemon.sh start/stop datanode
  • 第二名字节点【SecondaryNameNode】:
    hadoop-daemons.sh start/stop secondarynamenode
  • Web界面 外网IP地址:50070

YARN集群

  • YARN集群依赖于HDFS集群,所以要先启动HDFS集群,再启动YARN集群
  • 主节点【ResourceManager】:
    yarn-daemon.sh start/stop resourcemanager
  • 从节点【NodeManager】:
    yarn-daemon.sh start/stop nodemanager
  • MR程序作业运行历史记录服务器:
    mr-jobhistory-daemon.sh start/stop historyserver
  • YARN集群作业运行历史日志代理服务器:
    yarn-daemon.sh start/stop proxyserver
  • Web界面 外网IP地址:8088

一键启动/停止

  • start/stop-all.sh:可用但已经过时
  • HDFS集群:start/stop-dfs.sh
  • YARN集群:start/stop-yarn.sh:不包含日志服务节点
  • 要启动时包含WebAppProxyServer
    需要修改start-yarn.sh,将35行的注释去掉

常见问题

集群启动超时

大概率是 配置文件里 使用的不是内网IP
把外网IP改成内网IP即可

如果使用的是主机名
就把/etc/hosts里的映射改为内网IP

一键启动需要输入密码

.ssh 目录的权限必须是700
.ssh/authorized_keys 文件权限必须是600
否则公钥认证不会生效。

无法访问50070端口

首先看无法访问的原因是 拒绝访问 还是 连接时间超时

如果是拒绝访问 那么就是端口没有放开的原因
检查云服务器安全组+防火墙(宝塔面板) 放开端口就行

如果是连接时间超时
检查Windows下IP映射是否正确,这里要外网IP
检查域名是否完成备案,IP地址是否输错

Hadoop Web UI中无法上传文件

按F12 或者 右击->检查 进入开发者模式
查看upload资源URL

因为上传资源时URL使用的是主机名
如果在Windows下没有配置映射 用的就是内网IP地址

在Windows hosts中做IP映射即可

SSH端口更改无法连接

在 hadoop-env.sh 中,添加

export HADOOP_SSH_OPTS="-p 端口"