大数据之—Hadoop环境搭建

从纯净centos7虚拟机克隆出一台虚拟机节点node1,先安装一些基础的环境,后面基于node1基础节点状态克隆出其余节点

一、节点规划

192.168.0.137 node1
192.168.0.138 node2
192.168.0.139 node3

配置域名映射

echo "192.168.0.137  node1" >> /etc/hosts
echo "192.168.0.138  node2" >> /etc/hosts
echo "192.168.0.139  node3" >> /etc/hosts

二、node1机器处理

1、基础环境

# 调通网络
ping www.baidu.com
# 安装红帽系软件扩展包,ifconfig网络工具,文本编辑器
yum install -y epel-release net-tools vim
# 关闭防火墙策略
systemctl stop firewalld.service & systemctl disable firewalld.service & systemctl stop iptables.service

2、新建用户

# 方式一
# 创建用户需使用 root 登录
useradd hdp
# 添加密码
echo "hdp" | passwd --stdin hdp
# 配置 sudo 免密
sed -i '$ahdp  ALL=(ALL)  NOPASSWD:ALL' /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers
# 方式二
# 新建用户
useradd hdp
passwd hdp
# 提升hdp账号权限,既后期使用sudo 命令时可不填写root账户的密码
vim /etc/sudoers
%wheel  ALL=(ALL)       ALL
hdp   ALL=(ALL)     NOPASSWD:ALL  # 添加此行,一定要在这个位置(既107行下面)

3、创建hadop软件目录

# 解压目录
mkdir -p /opt/hadoop/module; mkdir -p /opt/hadoop/software; chown hdp:hdp /opt/hadoop/module; chown hdp:hdp /opt/hadoop/software

4、卸载自带的jdk

注意:如果机器上本来就有jdk8的环境,就不用卸载

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

5、安装JDK

下载:http://www.codebaoku.com/jdk/jdk-oracle-jdk1-8.html

版本:jdk-8u212-linux-x64.tar.gz

配置环境变量:vim /etc/profile.d/my_env.sh

#JAVA_HOME
export JAVA_HOME=/opt/jdk/java8
export PATH=$PATH:$JAVA_HOME/bin

刷新环境并测试:source /etc/profile; java -version

6、安装Hadoop

(必须要配置JAVA_HOME,否则启动时就会报错找不到JAVA_HOME)配置Hadoop使用的JAVA_HOME:vim /opt/hadoop/module/hadoop-3.1.3/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/opt/jdk/java8

下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/

版本:hadoop-3.1.3.tar.gz

上传至目录:/opt/hadoop/software/

修改文件权限:chown hdp:hdp hadoop-3.1.3.tar.gz

解压缩:tar -zxvf /opt/hadoop/software/hadoop-3.1.3.tar.gz -C /opt/hadoop/module/

配置环境变量:vim /etc/profile.d/my_env.sh

# HADOOP_HOME
export HADOOP_HOME=/opt/hadoop/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

刷新环境并测试:source /etc/profile; hadoop -version

7、集群文件分发脚本

需求:循环复制文件到所有节点的相同目录下(此脚本需要)

【xsync】

sudo touch /bin/xsync && sudo chmod +x /bin/xsync && vim /bin/xsync

#!/bin/bash

# 定义主机范围
host_names=(node1 node2 node3)

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo "参数不足"
    exit;
fi
#2. 遍历集群所有机器
for host in ${host_names[@]}
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

scp:远程安全拷贝

命令 递归 要拷贝的文件绝对路径/名称 目的地用户@主机:目的地路径/名称

scp -r $pdir/$fname $user@$host:$pdir/$fname

例如

scp -r /opt/module/jdk1.8.0_212 hdp@node2:/opt/module

rsync:远程文件增量式同步

安装:yum install -y rsync

命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

rsync -av $pdir/$fname $user@$host:$pdir/$fname

例如:

rsync -av /opt/module/hadoop-3.1.3/ hdp@node2:/opt/module/hadoop-3.1.3/

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

三、node2、node3机器处理

0、node1完全处理完了在克隆这两个节点

1、从node1克隆出node2、node3节点

2、修改主机名、修改ip地址

nmtui

4、修改域名映射(同node1)

5、配置三台机器互相免密登录

三台机器分别以hdp与root角色全部执行一遍以下命令,为了同步文件与配置

# 删除原来的ssh配置
cd & rm -rf .ssh/

# 按顺序执行多个命令,忽略错误,上一条的错误不会影响下一条命令的正常执行
cd & mkdir .ssh & cd .ssh & ssh-keygen -t rsa

# 按顺序执行多个命令,上一条执行成功才执行下一条,中途出错则在出错的地方停止执行
# cd && mkdir .ssh && cd .ssh && ssh-keygen -t rsa

最后三台机器全部执行命令:(分别向其它主机拷贝公钥用于免密登录)

cat /etc/hosts | awk '/node/{print $2}' | xargs -i ssh-copy-id {}

(root用户不用执行此命令)问题处理:配置ssh免密登录后,hdp用户依然需要输入密码登录

chmod 755 /home/`whoami`/; chmod 700 /home/`whoami`/.ssh/ ;chmod 600 /home/`whoami`/.ssh/authorized_keys;

6、同步文件与配置

xsync /opt/hadoop/module/; xsync /etc/profile.d/my_env.sh; source /etc/profile

四、集群配置

1、集群部署规划

原则:

  • NameNode和SecondaryNameNode不要部署在同一个节点上
  • ResourceManager消耗内存,不要和NameNode、SecondaryNameNode部署在同一节点上

部署情况:

node1 node2 node3
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

2、配置文件说明

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

/opt/hadoop/module/hadoop-3.1.3/share/hadoop

默认文件 文件存放在Hadoop的jar包中的位置
[core-default.xml] hadoop-common-3.1.3.jar/core-default.xml
[hdfs-default.xml] hadoop-hdfs-3.1.3.jar/hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-3.1.3.jar/yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

(2)自定义配置文件:

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml

四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

3、配置集群

(1)核心配置文件

配置core-site.xml:vim $HADOOP_HOME/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>
    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/module/hadoop-3.1.3/data</value>
    </property>
    <!-- 配置HDFS网页登录使用的静态用户为hdp -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hdp</value>
    </property>
</configuration>

(2)HDFS配置文件:vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>node1:9870</value>
    </property>
    <!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node3:9868</value>
    </property>
</configuration>

(3)YARN配置文件:vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node2</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>

(4)MapReduce配置文件:vim $HADOOP_HOME/etc/hadoop/mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

(5)分发配置

xsync $HADOOP_HOME/etc/hadoop/
# 查看分发情况:
cat $HADOOP_HOME/etc/hadoop/core-site.xml

4、群起集群

1、配置workers

vim $HADOOP_HOME/etc/hadoop/workers

node1
node2
node3

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步群起配置

xsync $HADOOP_HOME/etc

2、启动集群

更改应用启动权限

chown hdp:hdp -R /opt/hadoop/module/

(1)如果集群是第一次启动,需要在node1节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

hdfs namenode -format

(2)启动HDFS(在NameNode节点上执行:node1,会引导其它DataNode启动)

$HADOOP_HOME/sbin/start-dfs.sh

(3)停止HDFS(同上)

$HADOOP_HOME/sbin/stop-dfs.sh

(4)在配置了ResourceManager的节点(node2)启动YARN

$HADOOP_HOME/sbin/start-yarn.sh

(5)停止YARN

$HADOOP_HOME/sbin/stop-yarn.sh

(6)Web端查看HDFS的NameNode

(7)Web端查看YARN的ResourceManager

3、集群基本可用性测试

略....

4、配置历史服务器

为了查看程序历史运行情况,可以配置历史服务器。具体配置步骤如下:

  • vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
</property>
  • 分发配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

  • 启动历史服务器

mapred --daemon start historyserver

  • 停止历史服务器

mapred --daemon stop historyserver

  • 查看JobHistory

http://node1:19888/jobhistory

五、配置日志聚集

image-20220621214216769

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryServer。

  • 配置yarn-site.xml

vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

<!-- 开启日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://node1:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
  • 分发配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

  • 重启ResourceManager(node2)和HistoryServer(node1)

node2执行: $HADOOP_HOME/sbin/stop-yarn.sh && $HADOOP_HOME/sbin/start-yarn.sh

node1执行:mapred --daemon stop historyserver && mapred --daemon start historyserver

六、集群启动/停止方式总结

1、各个模块分开启动停止(配置ssh是前提)常用

  • HDFS集群启停
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/stop-dfs.sh
  • YARN集群启停
$HADOOP_HOME/sbin/start-yarn.sh
$HADOOP_HOME/sbin/stop-yarn.sh

2、各个服务组件逐一启动/停止

  • HDFS单节点启停
hdfs --daemon start/stop namenode/datanode/secondarynamenode
  • YARN单节点启停
yarn --daemon start/stop resourcemanager/nodemanager

八、编写Hadoop集群常用脚本

1、Hadoop集群一键启停脚本

包含HDFS,Yarn,Historyserver服务

【myhadoop】

touch /opt/myhadoop ; chmod +x /opt/myhadoop; vim /opt/myhadoop

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "没有参数输入..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="
        echo " --------------- 启动 hdfs ---------------"
        ssh node1 "$HADOOP_HOME/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh node2 "$HADOOP_HOME/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh node1 "$HADOOP_HOME/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="
        echo " --------------- 关闭 historyserver ---------------"
        ssh node1 "$HADOOP_HOME/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh node2 "$HADOOP_HOME/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh node1 "$HADOOP_HOME/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

2、查看三台服务器Java进程脚本

可能的问题(本质就是没有读取到java环境变量,把java的环境变量配置到/etc/profile.d/my_env.sh中即可):ssh远程执行命令而找不到环境变量

【jpsall】

touch /opt/jpsall ; chmod +x /opt/jpsall ; vim /opt/jpsall;

#!/bin/bash

# 定义主机范围
host_names=(node1 node2 node3)

for host in ${host_names[@]}
do
        echo =============== $host ===============
        ssh $host jps 
done

3、文件分发脚本

xsync /opt/jpsall ; xsync /opt/jpsall

九、常用端口号说明

端口名称 Hadoop2.x Hadoop3.x
NameNode内部通信端口 8020 / 9000 *8020 / 9000/9820
NameNode HTTP UI *50070 *9870
MapReduce查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

十、集群时间同步

时间矫正的原因:如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。

参考:https://www.cnblogs.com/harrymore/p/9566229.html

说明

安装包与参考文献都在阿里云盘里

posted @ 2022-06-21 23:55  黄河大道东  阅读(78)  评论(0编辑  收藏  举报