JDK与Hadoop的安装


前言

此作为记录大三下的十五天企业实训。本文主要包括以下内容:

  1. JDK的安装配置
  2. Hadoop集群分布式的安装配置(三台虚拟机)

整个过程记录详细,每个步骤亲历亲为实测可用,对可能出现的问题都有记录和讲解。同时,包含多个脚本文件的编写,便捷集群环境的搭建配置。

本文系统的虚拟机版本为:CentOS-7.5-x86_64-DVD-1804.iso,

相关系统工具:VMWareFinalShell


一、JDK和Hadoop的安装

  1. 在/opt目录下,创建/module与/soft目录
    :soft目录用于存放压缩包文件;module目录用于存放已解压的文件。

    在这里插入图片描述

  2. 通过FinalShell 将文件上传到soft中
    :JDK选择1.8版本;Hadoop选择3.1.3 版本。

    在这里插入图片描述

  3. 解压文件: tar -zxvf xxx.tar.gz -C /opt/module/
    -C 参数:重定义解压的目的目录。

    在这里插入图片描述

  4. 修改环境变量: vim /etc/profile

    在这里插入图片描述

  5. 刷新环境配置: source /etc/.profile

  6. 查看是否安装成功:
    a) 查看java版本:java -version

    在这里插入图片描述
    b) 查看Hadoop版本:hadoop version

    在这里插入图片描述

  7. 修改主机名称(方便后面使用):vim /etc/hostname

    在这里插入图片描述

  8. 完整克隆其他两台虚拟机,分别改名为:hadoop102hadoop103

    在这里插入图片描述

    !!!选择创建完整克隆:

    在这里插入图片描述

    此时,我们一共有了三台虚拟机。可以进行集群的分布式管理了。(分布式最少需要三台主机)

    在这里插入图片描述

  9. 给每台主机添加 主机名 -> IP地址的映射,以便三台主机能够通信。

    vim /etc/hosts
    在这里插入图片描述
    此内容,三台主机都要添加。 此外,虚拟机的网络适配器采用 NAT模式 。修改完hosts文件后,再确保三台主机的网络连接打开的情况下,此时,三台虚拟机两两之间是能够ping通的

    在这里插入图片描述
    在这里插入图片描述

    如果无法ping 通,可选择关闭防火墙之后再尝试。(后面的步骤也需要关闭防火墙,故在此关闭也行)

    # 查看防火墙状况
    systemctl status firewalld
    
    # 关闭防火墙
    systemctl stop firewalld
    
    # 永久关闭防火墙(关闭防火墙开机自启动)
    # 需先stop 再 disable
    systemctl disable firewalld 
    

    如果还是无法ping通,请检查/etc/hosts/etc/hostname文件,确保正确的映射关系


此时,JDK安装已经完成,下面是Hadoop的分布式相关配置

二、Hadoop相关配置

1. 相关配置文件

Hadoop相关配置的路径在:/opt/module/hadoop-3.1.3/etc/hadoop 此目录下。此处我们需要修改:
注意配置文件的缩进。按理来说,应该不会存在由于缩进导致的问题,但是可以方便后面出错以后的纠错。

a) core-site.xml 文件:

	<configuration>
		<!-- 决定hdfs运行模式 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop101:8020</value>
        </property>
        <!-- 配置hadoop临时目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.1.3/data</value>
        </property>
        <!-- 配置web端页面的静态用户 -->
        <property>
                <name>hadoop.http.staticuser.user</name>
                <value>root</value>
        </property>
        <!--定义HDFS所开放的代理服务  -->
        <property>
                <name>hadoop.proxyuser.tedu.hosts</name>
                <value>*</value>
        </property>
        <property>
                <name>hadoop.proxyuser.tedu.groups</name>
                <value>*</value>
        </property>
    </configuration>

b) hdfs-site.xml 文件:

	<configuration>
		<property>
	        <name>dfs.namenode.http-address</name>
	        <value>hadoop101:9870</value>
	    </property>
	        <!-- 2nn web端访问地址-->
	    <property>
	        <name>dfs.namenode.secondary.http-address</name>
	        <value>hadoop103:9868</value>
	    </property>
	</configuration>

c) mapred-site.xml 文件:

	<configuration>
		<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>

d) yarn-site.xml 文件:

注意此处指定yarn容器允许分配的最大最小内存时,需要按照给虚拟机实际分配的内存相对应。一般来说,4GB(4096)足够。由于笔者的电脑实在一般,故每台虚拟机只分配了3GB的内存,也就是需要把此处的4396 修改为 3072。

	<configuration>
		<!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop102</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>
		<!-- yarn容器允许分配的最大最小内存 -->
	    <property>
	        <name>yarn.scheduler.minimum-allocation-mb</name>
	        <value>1024</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>
        <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>
	</configuration>

2. Hadoop其他配置完善

a) 格式化 Namenode 节点:在/opt/module/hadoop-3.1.3 目录下,执行hadoop namenode -format。执行成功后,会自动生成data 目录。

注意,以后每次修改Hadoop 配置文件的内容。比如:修改yarn-site.xml 文件中的内存大小后,都需要删除此data 目录后,重新格式化节点。

在这里插入图片描述

b) 将hadoop101 的Hadoop 相关配置文件,通过一个群发脚本,同步到另外两台主机:hadoop102hadoop103

!主机间的消息群发是基于三台主机能够互相ping 通实现的,请务必先让三台主机能够互相ping 通。

在系统环境变量的某个bin目录下(如:/opt/module/hadoop-3.1.3/bin),创建xsync 文件,文件内容如下:

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
  echo Not Enough Arguement!
  exit;
fi
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103
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

完成创建 xsync 文件后,需要为此文件添加执行权限chmod +x ./xsync。此时,我们已经可以开始群发文件。xsync的使用语法:xsync 源文件目录 目的文件目录

如此处的群发Hadoop配置文件xsync /opt/module/hadoop-3.1.3/etc /opt/module/hadoop-3.1.3/etc

!!!:此外,群发文件时,需要一直输入远程登录的密码,此时使用ssh实现免密登录hadoop102、hadoop103。

# 在hadoop101 创建密钥
ssh-keygon -t rsa

# 添加免密登录(本机也需要添加)
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103

此时,我们可以通过ssh hadoop102 实现免密登录啦。

3. Hadoop分布式集群的启动

a) 在hadoop101中

  • 启动namenode :hadoop-daemon.sh start namenode
  • 启动datanode :hadoop-daemon.sh start datanode
  • 启动nodemanager :yarn-daemon.sh start nodemanager

b) 在hadoop102中

  • 启动resourcemanager(资源调度器) :yarn-daemon.sh start resourcemanager
  • 启动nodemanager :yarn-daemon.sh start nodemanager
  • 启动datanode :hadoop-daemon.sh start datanode

c) 在hadoop103中

  • 启动secondarynamenode :hadoop-daemon.sh start secondarynamenode
  • 启动datanode :hadoop-daemon.sh start datanode
  • 启动nodemanager :yarn-daemon.sh start nodemanager

一个一个执行命令实在是太麻烦啦。因此这里提供了Hadoop分布式集群的群起脚本,将脚本文件放在 /opt/module/hadoop-3.1.3/bin 目录下,起名为hadoopall

在这里插入图片描述

脚本内容如下:

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="
        ssh hadoop101 hadoop-daemon.sh start namenode
        ssh hadoop101 hadoop-daemon.sh start datanode
        ssh hadoop101 yarn-daemon.sh start nodemanager

        ssh hadoop102 yarn-daemon.sh start resourcemanager
        ssh hadoop102 hadoop-daemon.sh start datanode
        ssh hadoop102 yarn-daemon.sh start nodemanager

        ssh hadoop103 hadoop-daemon.sh start secondarynamenode
        ssh hadoop103 hadoop-daemon.sh start datanode
        ssh hadoop103 yarn-daemon.sh start nodemanager
;;
"stop")

同样需要为该文件添加执行权限:chmod +x ./hadoopall

4. Hadoop分布式集群的运行

这里使用 hadoopall start ,启动整个hadoop集群。(hadoopall stop 则为关闭整个集群)

在这里插入图片描述

启动成功后,可以打开每台主机执行jps,查看进程启动情况。(jps:JVM Process Status Tool,用于查看Java进程的启动情况)。三台主机,每次切换主机执行jps 命令,实在麻烦。所以,这里再设置一个myjps脚本,即在一台虚拟机上执行,即可查看整个集群的运行情况

同样,在/opt/module/hadoop-3.1.3/bin 目录下创建 myjps 文件。脚本内容如下:

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

老套路, 执行chmod +x ./myjps 为myjps 添加执行权限。

此时,我们即可直接执行myjps 查看整个集群的运行情况:

在这里插入图片描述

如图,整个集群正常启动!芜湖~~~~

启动成功后,即可在浏览器查看Hadoop 集群信息:

(不过按理来说,此处的DataNode 数量应该为3,但是一直为1。没关系,后面Active Nodes为3 即可正常运行)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


以上,则完成了Hadoop的分布式集群安装和配置。接下来稍微记录一下在整个过程中可能出现的问题:

三、问题记录

  1. 运行ssh hadoop102 jps,提示jps命令未找到。(先ssh 登录后,才可以执行 jps 命令)
    解决步骤:
    a) vim ~/.bashrc
    b) 在文件末尾添加一行 source /etc/profile
    在这里插入图片描述
  2. 此外,如果读者遇到其他相关的问题,可以咨询笔者。笔者会尽力协助你解决问题的!!!

以上就为本篇文章的全部内容啦!

如果本篇内容对您有帮助的话,请多多点赞支持一下呗!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值