Hadoop完全分布式搭建

前言

在配置hadoop集群时总会遇到各种各样的问题,这里将完整的hadoop完全分布式的配置过程做一次完整的总结,希望能够帮助到更多人

虚拟机的准备

分布式集群需要三台虚拟机,这里不做太多解释、直接克隆出来即可

1. 修改主机名和修改静态地址

这里的配置每台主机除了主机名和地址不一样外,其余的配置都是一样的

# 修改主机名
hostnamectl set-hostname hadoop102
​
# 修改IP地址 
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 进入文件内部后修改此项为
BOOTPROTO="static"

# 底部追加
IPADDR="192.168.88.102"
NETMASK="255.255.255.0"
DNS1="192.168.88.2"
​
# 重启网卡
systemctl restart network

3. 准备主机名映射

# C:\Windows\System32\drivers\etc\hosts
# 在文件中填入以下内容 这里的内容要和在虚拟机中设置的保持一致
192.168.88.102 hadoop102
192.168.88.103 hadoop103
192.168.88.104 hadoop104

在每台Linux的/etc/hosts文件中,填入以下内容

192.168.88.102 hadoop102
192.168.88.103 hadoop103
192.168.88.104 hadoop104

4. 配置SSH免密登录

SSH服务是一种用于远程登录的安全认证协议

  1. 生成公钥和私钥文件 ssh-keygen -t rsa -b

  2. 将密钥文件复制到其他主机上

    # 在每一台主机上都要执行
    ssh-copy-id hadoop102
    ssh-copy-id hadoop103
    ssh-copy-id hadoop104

5. 配置JDK环境

  1. 下载LIinu版本的JDK安装包

    wget https://repo.huaweicloud.com/java/jdk/8u152-b16/jdk-8u152-linux-i586.tar.gz
    ​
    # 下载wget的命令
    # yum -y install wget
  2. 创建文件夹,用来部署JDK,将JDK安装部署

    mkdir -p /opt/module
  3. 解压缩JDK安装文件

    tar -zxvf jdk-8u351-linux-x64.tar.gz -C /opt/module
  4. 配置JDK的软链接

    ln -s /opt/module/jdk1.8.0_361 /opt/module/jdk
  5. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中

    # 编辑/etc/profile文件
    export JAVA_HOME=/opt/module/jdk
    export PATH=$PATH:$JAVA_HOME/bin
  6. 生效环境变量

    source /etc/profile
  7. 配置java执行程序的软链接

    # 删除系统自带的java程序
    rm -f /usr/bin/java
    # 软链接我们自己安装的java程序
    ln -s /export/server/jdk/bin/java /usr/bin/java
  8. 执行验证:

    java -version
    javac -version

6. 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

7. 集群分发脚本xsync

功能:循环复制文件到所有集群节点的相同目录下

在/home/xi/bin目录下创建xsync文件

cd /home/xi/bin
vim xsync

编写脚本

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Arguement!
        exit;
fi
​
#2. 遍历集群所有机器(根据自己的集群名修改)
for host in hadoop102 hadoop103 hadoop104
do
        echo ==================== $host ====================
        #3. 遍历所有目录,挨个发送
        for file in $@
        do
                #4. 判断文件是否存在
                if [ -e $file ]
                        then
                                #5. 获取父目录
                                pdir=$(cd -P $(dirname $file); pwd)
                                #6. 获取当前文件的名称
                                fname=$(basename $file)
                                ssh $host "mkdir -p $pdir"
                                rsync -av $pdir/$fname $host:$pdir
                        else
                                echo $file does not exists!
                fi
        done
done
​设置执行权限
chmod 777 xsync

8. 集群配置

集群部署规划

hadoop102hadoop103hadoop104
HDFS

NameNode

DataNode

DataNodeDataNode
YARNNodeManager

ResourceManager

NodeManager

NodeManager

需要配置五个核心文件

vim /opt/module/hadoop/etc/hadoop

core-site.xml

vim core-site.xml
<configuration>
  <!-- 指定NameNode的地址 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop102:8020</value>
  </property>
  <!-- 指定hadoop数据的存储目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop/data</value>
  </property>
  <!-- 配置HDFS网页登录使用的静态用户为自己指定的用户 -->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>xi</value>
  </property>
</configuration>

hdfs-site.xml

vim hdfs-site.xml
<configuration>
  <!-- nn web端访问地址  -->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>hadoop102:9870</value>
  </property>
  <!-- 2nn web端访问地址 -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop104:9868</value>
  </property>
</configuration>

yarn-site.xml

vim yarn-site.xml
<configuration>
  <!-- 指定 MR 走 shuffle  -->
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>
  <!-- 指定ResourceManager的地址  -->
  <property>
     <name>yarn.resourcemanager.hostname</name>
     <value>hadoop103</value>
  </property>
  <!-- 环境变量的继承  -->
  <property>
     <name>yarn.nodemanager.env-whitelist</name>
  <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  </property>
</configuration>

mapred-site.xml

vim mapred-site.xml
<configuration>
  <!-- 定制mapreduce程序运行在yarn上 -->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <!-- 历史服务器端地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
  </property>
  <!-- 历史服务器web端地址 -->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
  </property>
</configuration>

workers

vim workers
hadoop102
hadoop103
hadoop104

9. 启动hadoop集群

# 启动hdfs
start-hdfs.sh
# 停止hdfs
stop-hdfs.sh
​
# 启动yarn
stop-yarn.sh
# 停止yarn
stop-yarn.sh
​
# 启动历史服务器
mapred --daemon start jobhistoryserver
# 停止历史服务器
mapred --daemon stop jobhistoryserver

10. 配置日志的聚集

在yarn-site.xml中添加以下节点

<configuration>
 <!-- 开启日志聚集功能 -->
  <property>
      <name>yarn.log-aggregation-enable</name>
      <value>true</value>
  </property>
  <!-- 设置日志聚集服务器地址 -->
  <property>
      <name>yarn.log.server.url</name>
  <value>http://hadoop102:19888/jobhistory/logs</value>
  </property>
  <!-- 设置日志保留七天 -->
  <property>
      <name>yarn.log-aggregation.retain-seconds</name>
      <value>604800</value>
  </property>
</configuration>

11. hadoop集群常用脚本

  1. hadoop集群启停脚本

# 在/home/xi/bin/下操作
vim myhadoop.sh

脚本文件

#!/bin/bash
if [ $# -lt 1 ]
then
        echo "No Args Input..."
        exit ;
fi
case $1 in
        "start")
        echo " =================== 启动 hadoop 集群 ==================="
        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.3.1/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.3.1/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
        "stop")
        echo " =================== 关闭 hadoop 集群 ==================="
        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.3.1/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
*)
        echo "Input Args Error..."
;;
esac

赋予脚本执行权限

chmod 777 myhadoop.sh
  1. 查看多台服务器Java进程脚本

vim jpsall

脚本文件

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps
done

查看jps进程是否与规划的一致

jpsall

配置完毕,这里最好打一个快照,方便之后进行回滚操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值