文章目录
- 1.服务器配置
- 2.Java环境
- 3. 安装Hadoop
- 4. 集群配置
- 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版本 java --version-   若存在java环境不统一,或者没有1.8版本的jdk -  无1.8版本的java yum install -y java-1.8.0-openjdk*
-  环境不统一 #查看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 [gaochuchu@s1 hadoop-3.1.3]$ sbin/start-dfs.sh
-  启动YARN [gaochuchu@s1 hadoop-3.1.3]$ sbin/start-yarn.sh-  问题:  
-  解决: - 这里的hadoop配置的是root用户创建的hadoop环境,本地用户无权限
- 修改环境变量/etc/profile,注释配置的HADOOP_HOME,重新source
 
 
-  
 
-  
-  运行hadoop自带的wordcount示例程序报错,并且一直卡在Running Job位置,报错信息如下: 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是否有防火墙设置:iptables -L INPUT --line-numbers发现:  命令删除这条记录: iptables -D INPUT 28
 
-  
 
- 如何解决这种问题? 
    
5. 编写集群的启动脚本
-  因为每次集群启动需要在NameNode节点的HADOOPHOME目录下使用命令启动HDFS sbin/start-dfs.sh
-  在Yarn节点上通过命令启动Yarn(ResourceManager) sbin/start-yarn.sh
-  配置了历史服务器,还需要在历史服务器的节点上使用命令启动历史服务器 mapred --daemon start historyserver
-  相应的停止集群也需要通过以下三个命令来停止集群 sbin/stop-dfs.sh sbin/stop-yarn.sh mapred --daemon stop historyserver
-  因此,可以编写相关的脚本启停(HDFS Yarn Historyserver) -  在 /home/gaochuchu/bin目录下编写myhadoop.sh脚本启停Hadoop集群#启动Hadoop集群 myhadoop.sh start #停止Hadoop集群 myhadoop.sh stop
 
-  
-  服务器各节点的状态都需要通过在笔不同服务器上通过 jps命令查看,比较麻烦- 在/home/gaochuchu/bin目录下编写jpsall脚本,可以查看所有服务器上的节点状态
 
- 在




















