Hadoop集群的搭建(虚拟机版)

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


准备工作

博主安装环境:ubuntu20.04、hadoop2.10、jdk8

固定IP地址

编辑网络配置文件
Ubuntu版本18.04后
sudo vi /etc/netplan/00-installer-config.yaml
Ubuntu版本18.04前
vi /etc/network/interfaces
修改文件内容

network:
    ethernets:
        ens32:
        #关闭动态分配ip地址
        dhcp4: false
        addresses: [你的IP地址/24]
        #网关地址
        gateway4: 你的IP地址前三位.2
        #DNS服务器地址
        nameservers:
            #114和阿里的DNS
            addresses: [114.114.114.114,223.5.5.5]
    version: 2

执行命令,让配置生效
sudo netplan apply

配置ssh免密登陆

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


配置ssh免密登陆的过程:
假设有A和B两台主机,通过A主机免密登陆到B主机

  1. 在A和B两台主机上都执行ssh-keygen命令,生产公钥和私钥
    在A主机上执行命令是为了生成公钥和私钥
    在B主机上执行命令是为了生成.ssh目录
  2. 将A主机上的公钥通过scp方式拷贝给B主机
    scp -r /home/用户名/.ssh/id_rsa.pub 主机名@IP地址:~
  3. 在B主机上,将A主机的公钥添加(追加)到认证密钥文件中
    cat id_rsa.pub >> .ssh/authorized_keys
  4. 配置完毕可以用下列命令验证
    ssh localhost

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

配置主机名和IP的映射

在每一台主机上执行命令
sudo vi /etc/hosts
添加内容
127.0.0.1 localhost
你的IP地址 你的主机名
最好在Windows中也进行此配置
C:\windows\System32\drivers\etc\hosts

创建目录

在每台主机上创建存放软件和软链接的目录
创建目录
sudo mkdir -p /opt/softwares /opt/links
修改权限
sudo chown -R 用户名:用户名 /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目录下

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:///home/用户名/.bigdata/data/nn</value>
    </property>
    <!-- HDFS集群中从节点产生数据的存放位置 -->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///home/用户名/.bigdata/data/dn</value>
    </property>
    <!-- HDFS集群中【SecondaryNameNode】产生数据的存放位置 -->
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:///home/用户名/.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:///home/用户名/.bigdata/data/nm</value>
    </property>
</configuration>

格式化HDFS集群

HDFS集群的格式化【一般情况下只做一次,并且只在主节点上做】:
命令:
hdfs namenode -format
说明:
此操作只能执行一次
有些时候由于集群性能等问题,可能会导致HDFS集群的数据出现错乱,此时需要重新格式化集群
在重新格式化集群之前,要删除【在删除之前需要停止整个集群】集群中每个主机上的“/home/用户名/.bigdata/data/*”目录
执行以下命令即可:
rm -r /home/用户名/.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地址
配置文件slaves中需要填写所有从节点的IP地址,不要填写主节点的IP地址

编辑Hadoo安装目录下的etc/hadoop/slaves文件
填写所有从节点的IP地址或者主机名
编辑/opt/hadoop/sbin/start-yarn.sh,将35行的注释去掉