二、Hadoop部署(含单机和集群)

二、Hadoop部署(含单机和集群)

IT-风油精 620 2023-01-09

1、单机部署(用于开发和测试)

单机部署主要是用于开发hadoop程序和测试使用,不建议在生产环境中使用。

1.1、解压文件到/opt/module/

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

1.2、将Hadoop的安装路径添加到环境变量

检查是否解压成功
图片-1673245208015
编辑环境变量
sudo vim /etc/profile.d/my_env.sh
添加以下内容:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=PATH:PATH:HADOOP_HOME/bin
export PATH=PATH:PATH:HADOOP_HOME/sbin
保存 :wq

1.3、刷新 /etc/profile

source /etc/profile

1.4、输入 hadoop version 查看hadoop版本

图片-1673245675784

1.5、检查本地库文件

hadoop checknative
图片-1673245702792

2、集群部署(生产环境)

在生产环境中一般采用集群部署。

2.1 配置免密登录

图片-1673245904092

2.1.1、生成密钥

ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

2.1.2、将公钥拷贝到要免密登录的目标机器上

ssh-copy-id hadoop102
图片-1673245872217
ssh-copy-id hadoop103
ssh-copy-id hadoop104
注意:
还需要在hadoop102上采用root账号,配置一下无密登录到hadoop102、hadoop103、hadoop104;
还需要在hadoop103上采用atguigu账号配置一下无密登录到hadoop102、hadoop103、hadoop104服务器上。

2.1.3、 .ssh文件夹下(~/.ssh)的文件功能解释

图片-1673246088544

2.1.4、权限问题可能导致免密登录不成功

需要保证某个用户的文件夹权限为700

2.2、配置集群分发

xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

  • rsync命令原始拷贝:rsync  -av     /opt/module    root@hadoop103:/opt/
  • 期望脚本:xsync要同步的文件名称
  • 说明:在/home/atguigu/bin这个目录下存放的脚本,atguigu用户可以在系统任何地方直接执行。

(3)脚本实现
(a)在/home/atguigu目录下创建xsync文件
cd /home/atguigu
vim xsync
在该文件中编写如下代码(请注意host,host为你当前系统用户):

#!/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

(b)修改脚本 xsync 具有执行权限
chmod +x xsync
(c)将脚本移动到/bin中,以便全局调用
sudo mv xsync /bin/
(d)测试脚本
sudo xsync /bin/xsync

(4)、继续同步文件
xsync /opt/software/
xsync /opt/module/
sudo xsync /etc/profile.d/my_env.sh

2.3、NTP集群时间同步

集群时间同步
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
图片-1673246765045
配置时间同步具体实操:

2.3.1、时间服务器配置(必须root用户)

(1)在所有节点关闭ntp服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd

(2)修改ntp配置文件
vim /etc/ntp.conf
修改内容如下:
a)修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
b)修改2(集群在局域网中,不使用其他互联网上的时间)
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 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
c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改/etc/sysconfig/ntpd 文件
vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

(4)重新启动ntpd服务
systemctl start ntpd

(5)设置ntpd服务开机启动
systemctl enable ntpd
图片-1673246839605

2.3.2、其他机器配置(必须root用户)

(1)在其他机器配置10分钟与时间服务器同步一次
crontab -e
编写定时任务如下:每隔10分钟同步一下时间
*/10 * * * * /usr/sbin/ntpdate hadoop102

(2)修改任意机器时间
date -s “2017-9-11 11:11:11”

(3)十分钟后查看机器是否与时间服务器同步
date
说明:测试的时候可以将10分钟调整为1分钟,节省时间。

2.4、配置集群

组件/服务器 hadoop102 hadoop103 hadoop104
HDFS NameNode,DataNode DataNode SecondaryNameNode,DataNode
Yarn NodeManager ResourceManager,NodeManager NodeManager

注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

2.4.1、在解压出来的hadoop文件夹下面的etc里存放着配置文件
图片-1673247303296
(1)核心配置文件
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 配置namenodes的默认地址 -->
  <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>
<!-- 数据存储路径 -->
    <property>
        <name>hadoop.data.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
<!-- 兼容性配置 -->
    <property>
        <name>hadoop.proxyuser.itconrad.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.itconrad.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>itconrad</value>
    </property>
</configuration>

(2)HDFS配置文件
配置hdfs-site.xml
vim hdfs-site.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
            <name>dfs.namenode.name.dir</name>
            <value>file://${hadoop.data.dir}/name</value>
    </property>
    <property>
            <name>dfs.datanode.data.dir</name>
            <value>file://${hadoop.data.dir}/data</value>
    </property>
    <property>
            <name>dfs.namenode.checkpoint.dir</name>
            <value>file://${hadoop.data.dir}/namesecondary</value>
     </property>
    <property>
            <name>dfs.client.datanode-restart.timeout</name>
            <value>30</value>
     </property>
     <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop104:9868</value>
     </property>
</configuration>

图片-1673247354401

(3)YARN配置文件
配置yarn-site.xml
vim yarn-site.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <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>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

图片-1673247381175
(4)MapReduce配置文件
配置mapred-site.xml
vim mapred-site.xml
文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

图片-1673247404402
(5) 配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

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

(6)分发
xsync hadoop/

2.5 启动和关闭集群

2.5.1、在节点(hadoop102)格式化hadoop
hdfs namenode -format

2.5.2、在hadoop002启动\关闭hdfs
start-dfs.sh
stop-dfs.sh

2.5.3、在hadoop103启动\关闭yarn
start-yarn.sh
stop-yarn.sh

2.5.4、Web端查看SecondaryNameNode
(a)浏览器中输入:http://hadoop104:9868/status.html
(b)查看SecondaryNameNode信息

2.6、配置历史服务器

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

2.6.1、配置mapred-site.xml

vi mapred-site.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>

图片-1673247768016

2.6.2、分发配置

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

2.6.3、在hadoop102启动历史服务器

mapred --daemon start historyserver

2.6.4、查看历史服务器是否启动

jps

2.6.5、查看JobHistory

http://hadoop102:19888/jobhistory

2.7 配置日志聚集

配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:
1)配置yarn-site.xml
vim yarn-site.xml
在该文件里面增加如下配置。

<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value>
</property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
<property>
    <name>yarn.timeline-service.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.timeline-service.hostname</name>
    <value>${yarn.resourcemanager.hostname}</value>
</property>
<property>
    <name>yarn.timeline-service.http-cross-origin.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>true</value>
</property>

目前的配置情况,并未配置yarn.timeline-service:
图片-1673247861425
2)分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

3)关闭NodeManager 、ResourceManager和HistoryServer
在103上执行: stop-yarn.sh
在102上执行: mapred --daemon stop historyserver

4)启动NodeManager 、ResourceManage、Timelineserver和HistoryServer
在103上执行:start-yarn.sh
在103上执行:yarn --daemon start timelineserver
在102上执行:mapred --daemon start historyserver

5)删除HDFS上已经存在的输出文件
hdfs dfs -rm -R /user/atguigu/output

6)执行WordCount程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /user/atguigu/input /user/atguigu/output

7)查看日志,
http://hadoop102:19888/jobhistory

2.8、jpsall脚本

jpsall主要是用于查看各个服务器的java进程,方便运维检查,包括磁盘,网络,内存等等,可以直接替换jps命令,或者将命令作为参数带入即可

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "============ $i  ============"
        ssh $i "jps" | grep -v Jps
done

写好后发到 /bin/ 目录下就可以随处执行了。
总结:到此位置hadoop的安装篇就已经完成了。

3、声明:

(1)可忽略用户名,因为有多套集群,截图可能存在用户名不一致的情况,用户可选用root,这样可以确保权限,如果是甲方有要求使用其他用户,可以创建一个有sudo权限的用户
(2)环境:Centos7,java1.8,hadoop3.1.3,内存4G,硬盘50G,安装必要环境(可见第一篇)
(3)小编是尚硅谷学生,文章可能会多次引用尚硅谷的教材。