云服务器搭建Hadoop分布式

文章目录

    • 1.服务器配置
    • 2.Java环境
    • [3. 安装Hadoop](#3. 安装Hadoop)
    • [4. 集群配置](#4. 集群配置)
    • [5. 编写集群的启动脚本](#5. 编写集群的启动脚本)

1.服务器配置

服务器 主机名 配置
115.157.197.82 s1 10核
115.157.197.84 s2 10核
115.157.197.109 s3 10核
115.157.197.31 s4 10核
115.157.197.60 gracal 10核

所有的软件安装在/opt/module下,软件安装包在/opt/softs下

2.Java环境

  • 所有的服务器的java统一1.8版本,查看java版本

    shell 复制代码
    java --version
    • ​ 若存在java环境不统一,或者没有1.8版本的jdk

      • 无1.8版本的java

        shell 复制代码
         yum install -y java-1.8.0-openjdk*
      • 环境不统一

        shell 复制代码
        #查看java版本
        alternates --config java
        #选择1.8版本的数字

相关的JAVA_HOME、Hadoop_HOME环境变量都保存在/etc/profile.d/my_env.sh

3. 安装Hadoop

  • 确保Hadoop统一版本:hadoop3.1.3
  • 编写文件分发脚本,可以在一台服务器分发到其他服务器:xsync脚本,在/home/gaochuchu/bin目录下

4. 集群配置

  • 各个组件的分布情况

    s1 s2 s3 s4 gracal
    HDFS NameNode DataNameNode DataNameNode SecondaryNameNode DataNameNode DataNameNode DataNameNode
    YARN NodeManager ResourceManager NodeManager NodeManager NodeManager NodeManager
  • 常用端口配置 (分Hadoop2.x和Hadoop3.x的区别)

    端口名称 Hadoop2.x Hadoop3.x
    NameNode内部通信端口 8020/9000 8020/
    NameNode HTTP UI 50070 9870
    MapReduce查看执行任务端口 8088 8088(容易和框架端口冲突,本文配置的7666)
    历史服务器通信端口 19888 19888
  • 在客户端机器(笔记本)配置ip和服务器主机名的映射,希望能通过主机名+端口号在浏览器访问各个Web页面

    • 问题:通过s2:7666无法访问ResourceManger的web UI,而通过直接的ip:7666又可以访问其webUI

      • 遇到这个问题我无法理解为什么会出问题
      • 漫长的排错过程:
        • 1.检查了服务器之间的ip和主机名的映射,各个服务器主机之间通过主机名可以ping通,说明映射没有问题

        • 2.检查客户端mac本机的hosts文件映射未发现问题,并且在客户端的终端也能ping通各个主机名,说明映射没有问题

        • 3.且查看各个服务器的防火墙也处于关闭状态

        • 4.通过netstat -nltp|grep 7666查看端口的监听情况,也是正常监听状态

        • 5.在网上搜索很多相关解决方案:关闭防火墙,设置etc/sysconfig/selinux的级别为disable,都没有结果

        • 因此,我认为应该在客户端本机出现问题,验证问题过程

          6.1 发现在本地主机telnet s2 7666可以成功访问,但是curl s2:7666没有输出页面的任何信息

          6.2 使用cur -v s2:7666查看相关信息

          • 发生地址的重定位,然后使用命令curl -v http://s2:7666/cluser

            成功返回了相关的html信息,说明页面其实是可以访问的

          6.3 但是浏览器端还是无法访问:后查询到浏览器可能配置了代理服务器,而'curl'命令未配置代理。代理服务器会烦扰浏览器的访问。

          因此我关闭了VPN代理,成功访问到s2:7666页面!!
          以后VPN代理一定要慎用!!!排查了这么久发现最后居然是代理问题

  • 启动集群测试

    • 启动HDFS

      shell 复制代码
      [gaochuchu@s1 hadoop-3.1.3]$ sbin/start-dfs.sh
    • 启动YARN

      shell 复制代码
      [gaochuchu@s1 hadoop-3.1.3]$ sbin/start-yarn.sh
      • 问题:

      • 解决:

        • 这里的hadoop配置的是root用户创建的hadoop环境,本地用户无权限
        • 修改环境变量/etc/profile,注释配置的HADOOP_HOME,重新source
  • 运行hadoop自带的wordcount示例程序报错,并且一直卡在Running Job位置,报错信息如下:

    java 复制代码
    java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as [某ip]:9866
    	at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:134)
    	at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:110)
    	at org.apache.hadoop.hdfs.DataStreamer.createBlockOutputStream(DataStreamer.java:1778)
    	at org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1679)
    	at org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:716)
      
      ......
      
      Caused by: java.net.NoRouteToHostException: No route to host
    	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716)
    	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
    	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
    	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:700)
    	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:804)
    	at org.apache.hadoop.ipc.Client$Connection.access$3800(Client.java:421)
    	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1606)
    	at org.apache.hadoop.ipc.Client.call(Client.java:1435)
    	... 19 more
    • 如何解决这种问题?
      • 注意报错信息:No route to host ,说明没有到host的路由,排查思路,确定与对应服务器端口是否联通

      • 首先测试某ip自身9866端口是否联通,说明联通

        说明s1服务器和...31:9866可能是不连通的

      • 经查找相关资料说明是...31服务器的icmp(Internet Control Message Protocol)被禁用导致。

        命令查看iptable是否有防火墙设置:

        shell 复制代码
        iptables -L INPUT --line-numbers

        发现:

        命令删除这条记录:

        shell 复制代码
        iptables -D INPUT 28

5. 编写集群的启动脚本

  • 因为每次集群启动需要在NameNode节点的HADOOPHOME目录下使用命令启动HDFS

    shell 复制代码
    sbin/start-dfs.sh
  • 在Yarn节点上通过命令启动Yarn(ResourceManager)

    shell 复制代码
     sbin/start-yarn.sh
  • 配置了历史服务器,还需要在历史服务器的节点上使用命令启动历史服务器

    shell 复制代码
    mapred --daemon start historyserver
  • 相应的停止集群也需要通过以下三个命令来停止集群

    shell 复制代码
    sbin/stop-dfs.sh
    sbin/stop-yarn.sh
    mapred --daemon stop historyserver
  • 因此,可以编写相关的脚本启停(HDFS Yarn Historyserver)

    • /home/gaochuchu/bin 目录下编写myhadoop.sh脚本启停Hadoop集群

      shell 复制代码
      #启动Hadoop集群
      myhadoop.sh start
      #停止Hadoop集群
      myhadoop.sh stop
  • 服务器各节点的状态都需要通过在笔不同服务器上通过jps命令查看,比较麻烦

    • /home/gaochuchu/bin 目录下编写jpsall脚本,可以查看所有服务器上的节点状态
相关推荐
NiNg_1_23420 分钟前
Hadoop的MapReduce详解
大数据·hadoop·mapreduce
在下不上天24 分钟前
flume-将日志采集到hdfs
大数据·linux·运维·hadoop·hdfs·flume
zmd-zk26 分钟前
flink学习(1)——standalone模式的安装
大数据·hadoop·flink·实时
Mango0000001 小时前
香港站群服务器有助于提升网站在搜索引擎中的排名
运维·服务器·搜索引擎
嚯——哈哈1 小时前
筑起数字堡垒:解析AWS高防盾(Shield)的全面防护能力
服务器·微服务·云计算·aws
humors2211 小时前
阿里云ECS服务器监控报警配置
运维·服务器·安全·阿里云·云计算
杨江1 小时前
ThingsBoard安装测试
服务器·数据库
mit6.8241 小时前
[Redis#3] 通用命令 | 数据类型 | 内部编码 | 单线程 | 快的原因
linux·redis·分布式
小林熬夜学编程2 小时前
【Linux系统编程】第五十弹---构建高效单例模式线程池、详解线程安全与可重入性、解析死锁与避免策略,以及STL与智能指针的线程安全性探究
linux·运维·服务器·c语言·c++·安全·单例模式
Linux运维老纪2 小时前
交换机配置从IP(Switch Configuration from IP)
linux·服务器·网络·安全·运维开发·ip