02、Hadoop3.x从入门到放弃,第二章:集群环境搭建

Hadoop3.x从入门到放弃,第二章:集群环境搭建

一、安装JDK并配置环境变量

/etc/profile中部分代码如下:

for循环profile.d中的sh文件并使之生效,所以我们只需要在profile.d文件夹下配置我们的my_env.sh文件就好了

xml 复制代码
vim /etc/profile.d/my_env.sh  

##java conf
export JAVA_HOME=/opt/module/jdk1.8.0_271
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin


source /etc/profile   使配置文件生效

二、安装Hadoop并配置环境变量

xml 复制代码
vim /etc/profile.d/my_env.sh  

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


source /etc/profile   使配置文件生效


##hadoop目录功能
bin : 里面有hadoop的各种命令工具,如:hdfs存储 mapred计算 yarn调度
etc : 里面有大量的配置信息,如hdfs-site.xml   mapred-site.xml   yarn-site.xml  core-site.xml  works
sbin: 里面也有Hadoop的各种命令工具,如:start-dfs.sh  start-yarn.sh   hadoop-daemon.sh  mr-jobhistory-daemon.sh

三、集群配置

xml 复制代码
【注意:】
NameNode \ 2NN \ ResourceManager 都比较耗内存,不能安装在同一台机器上。

##配置文件分两种:
1、默认配置文件:
    存放在各自jar包中
    hadoop-common-3.1.3.jar/core-default.xml
    hadoop-hdfs-3.1.3.jar/hdfs-default.xml
    hadoop-yarn-common-3.1.3.jar/yarn-default.xml
    hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

2、自定义配置文件
    %HADOOP_HOME%/etc/hadoop/下
    core-default.xml
    hdfs-default.xml
    yarn-default.xml
    mapred-default.xml

1、核心配置文件core-site.xml

xml 复制代码
    <!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>

2、HDFS配置hdfs-site.xml

xml 复制代码
    <!-- 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>

3、YARN配置yarn-site.xml

xml 复制代码
	<!-- 指定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>

    <!-- 环境变量的继承 HADOOP_MAPRED_HOME 是 3.1.3的一个小BUG 后续版本不需要配置-->
    <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>

4、MapReduce配置mapred-site.xml

xml 复制代码
 	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

四、群起集群

1、配置workers

xml 复制代码
位置:%HADOOP_HOME%/etc/hadoop/workers

新增三台服务器的主机名称:
hadoop102
hadoop103
hadoop104
不允许有任何空格

2、启动集群

xml 复制代码
> 如果集群是第一次启动,需要在hadoop102节点格式化NameNode
  格式化NameNode会产生新的集群ID,导致NameNode和D阿塔Node的集群id不一致,集群找不到以往的数据。
  如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止NameNode和DataNode进程。
  并且要删除所有机器的data和logs目录,然后再进行格式化

  hdfs namenode -format
xml 复制代码
>启动HDFS  (在一台上启动即可)
  sbin/start-dfs.sh

启动后  jps 



xml 复制代码
>在配置了ResourceManeger的节点启动yarn
  sbin/start-dfs.sh

启动后 jps



xml 复制代码
>web端查看HDFS的NameNode
  http://hadoop102:9870
  可以查看hdfs上存储的数据信息
xml 复制代码
>web端查看yarn的resourceManeger
  http://hadoop103:8088
  可以查看yarn上运行的job信息

3、常见报错

hdfs启动报错

xml 复制代码
将start-dfs.sh,stop-dfs.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数

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


将start-yarn.sh,stop-yarn.sh(在hadoop安装目录的sbin里)两个文件顶部添加以下参数

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

【注意:添加后,使用xsync 分发到每台机器上】
【之后就可以使用root账号登陆hdfs和yarn了】

如果服务崩溃了起不起来了怎么处理

xml 复制代码
1、先停掉所有服务
./stop-yarn.sh  ./stop-dfs.sh  (实在不行就kill)

2、删掉 data 和 logs
rm -rf ./data ./logs

3、格式化 namenode
hdfs namenode -format

4、启动集群
sbin/start-dfs.sh    对应的服务器启动 sbin/start-yarn.sh

4、测试HDFS和YARN

xml 复制代码
##创建目录

hadoop fs -mkdir /wcinput

##上传文件

hadoop fs -put ./myfile/words.txt /wcinput

##测试yarn
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput



5、配置历史服务器

xml 复制代码
为了查看程序的历史运行情况,需要配置下历史服务器。
(如查看http://hadoop103:8088  页面上对应任务的 history)

配置mapred-site.xml

xml 复制代码
    <!--配置历史服务器端地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
    </property>

    <!--历史服务器web端地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
    </property>

【然后sync 同步至所有服务器】
xml 复制代码
【重新启动服务】
sbin/start-dfs.sh      对应服务器上 启动 sbin/start-yarn.sh

【启动历史服务器】
mapred --daemon start historyserver
(mapred这个命令 在%HADOOP_HOME%/bin目录下)

【查看进程】
jps
xml 复制代码
【查看历史服务】
http://hadoop102:19888

可 执行测试 任务
hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput2

6、配置日志聚集功能

xml 复制代码
什么叫日志聚集:
   应用运行完成以后,将程序运行日志信息上传到hdfs系统上

日志聚集好处:
   方便查看程序运行详情,方便开发调试

注意:
   开启日志聚集功能,需要重启NodeManager\ResourceManeger\HistoryServer

配置yarn-site.xml

xml 复制代码
<!--开启日志聚集功能-->
<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>

<!--设置日志保留时间为7天-->
<property>
   <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
xml 复制代码
【分发配置】 把这个配置 分发到所有服务器上
【重启服务】
sbin/stop-yarn.sh    
mapred --daemon top historyserver
sbin/stop-dfs.sh   

7、集群常用脚本

xml 复制代码
#########1、各模块分开启动停止:
>整体启动/停止HDFS
start-dfs.sh  /  stop-dfs.sh 

>整体启动/停止YARN
start-yarn.sh  /  stop-yarn.sh

>启动历史服务器
mapred --daemon start historyserver
xml 复制代码
##########2、各服务组件的逐一启动停止:
>分别启动/停止HDFS组件
hdfs -daemon start/stop 【namenode /  datanode  / secondarynamenode】

>启动/停止YARN
yarn -daemon start/stop  【resourcemanager / nodemanager】

【脚本如下】:
xml 复制代码
#!/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.1.3/sbin/start-dfs.sh"
     echo "========================启动YARN=============================="
     ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
     echo "=======================启动 historyserver====================="
     ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;

"stop")
     echo "======================关闭 HADOOP 集群========================"
    
     echo "======================关闭HDFS==============================="
     ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
     echo "=====================关闭YARN================================"
     ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
     echo "=====================关闭HDFS================================"
     ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
     echo "Input Args Error..."

;;
esac
xml 复制代码
#########3、查看所有服务器 进程脚本

#!/bin/bash

for host in hadoop102 hadoop103  hadoop104
do
    echo "====================$host====================="
    ssh $host jps
done

8、常用的端口号

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

9、集群时间同步

xml 复制代码
#########查看所有节点ntpd服务转改和开机自启动状态############
systemctl status ntpd

systemctl start ntpd

systemctl is-enabled ntpd

########修改hadoop102的ntp.conf配置文件
vim /etc/ntp.conf

内容如下:
  > 授权192.168.73.0~192.168.73.255网段上的所有机器可以从这台机器上查询和同步时间【注释 放开】
    restrict 192.168.73.0 mask 255.255.255.0 nomodify notrap

  > 集群在局域网中,不使用其他互联网上的时间 【注释掉】
    #server 0.centos.pool.ntp.org iburst
    #server 1.centos.pool.ntp.org iburst
    #server 2.centos.pool.ntp.org iburst
    #server 3.centos.pool.ntp.org iburst
   
  > 当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为急群众的其他节点提供时间同步
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10

  > 修改hadoop102的/etc/sysconfig/ntpd文件
    vim /etc/sysconfig/ntpd
    增加如下内容(让硬件时间与系统时间一起同步)
    SYNC_HWCLOCK=yes
  
  >重启ntpd服务
    systemctl start ntpd
  
  > 设置ntpd服务开机启动
    systemctl enable ntpd
xml 复制代码
########其他机器操作#######
>关闭所有节点的ntp服务和自启动
  systemctl stop ntpd
  systemctl disable ntpd

> 其他机器配置1分钟与时间服务器同步一次
  sudo crontab -e
   */1 * * * * /usr/sbin/ntpdate hadoop102

> 修改任意机器时间
  sudo date -s "2024-04-07 11:11:11"


> 1分钟后查看机器是否与时间服务器同步
  sudo date
相关推荐
宅小海18 小时前
14 配置Hadoop集群-配置历史和日志服务
linux·服务器·hadoop
嘟嘟嘟嘟嘟嘟嘟.19 小时前
MapReduce的工作原理
大数据·mapreduce
珹洺20 小时前
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
java·开发语言·前端·hive·hadoop·servlet·html
2401_871290581 天前
Hadoop 集群的常用命令
大数据·hadoop·分布式
只因只因爆1 天前
mapreduce的工作原理
大数据·linux·hadoop·mapreduce
lix的小鱼1 天前
hadoop集群的常用命令
大数据·linux·hadoop
直裾1 天前
【mapreduce】工作原理
mapreduce
shouwangV61 天前
hive执行CTAS报错“Hive Runtime Error while processing row”
数据仓库·hive·hadoop
洋芋爱吃芋头1 天前
1. hadoop 集群的常用命令
hadoop
一个天蝎座 白勺 程序猿1 天前
大数据(4.1)Hive架构设计与企业级实战:从内核原理到性能巅峰优化,打造高效数据仓库
数据仓库·hive·hadoop