Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 472|回复: 0

hadoop 3.x 完全分布式集群搭建/异常处理/测试

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-9-2 11:29:44 | 显示全部楼层 |阅读模式

    共计三台虚拟机分别为hadoop002(master,存放namenode),hadoop003(workers,datanode以及resourcemanage),hadoop004(workers.datanode,secondarynamenode)

    1.搭建前的准备(三台虚拟机均已配置好java以及hadoop环境变量)

    可以进行同步及执行命令的分发脚本,关闭防火墙,选定启动的hadoop的账号要能够做到与其他两台虚拟主机免密登录

     

    2.配置hadoop002文件($HADOOP_HOME/etc/hadoop/)

    hadoopenv.sh

    1 export JAVA_HOME=/opt/module/jdk1.8.0_181 2 export HADOOP_PID_DIR=/opt/module/hadoop-3.1.1/data/tmp/pids

    core-site.xml

     1 <!-- 指定hadoop运行时产生文件的存储目录 -->    
     2 <property>
     3   <name>hadoop.tmp.dir</name>
     4       <value>/opt/module/hadoop-3.1.1/data/tmp</value>
     5       <!--需要手动创建并修改文件夹属主-->
     6   <!--<value>/hadoop/tmp</value>-->    
     7 </property>
     8 
     9 <!-- 指定hdfs namenode的缺省路径,可以是ip,也可以是主机名 -->    
    10 <property>
    11     <name>fs.defaultFS</name>
    12     <value>hdfs://hadoop002:9000</value>
    13 </property>

    hdfs-site.xml

     1 <!-- 指定HDFS副本的数量 -->
     2 <property>
     3       <name>dfs.replication</name>
     4       <value>3</value>
     5 </property>
     6 <!--配置namenode的web界面-->
     7 <property>
     8      <name>dfs.namenode.http-address</name>
     9      <value>hadoop002:50070</value>
    10 </property>
    11 <!--指定secondarynamenode地址-->
    12 <property>
    13      <name>dfs.namenode.secondary.http-address</name>
    14      <value>hadoop004:50090</value>
    15 </property>

    yarn-site.xml(hadoop003上运行ResourceManager)

     1 <!--resourcemanager address-->
     2 <property>
     3         <name>yarn.resourcemanager.hostname</name>
     4         <value>hadoop003</value>
     5 </property>
     6  
     7 <!--reduce-->
     8 <property>
     9         <name>yarn.nodemanager.aux-services</name>
    10         <value>mapreduce_shuffle</value>
    11 </property>

    mapred-site.xml

    1 <!--use yarn-->
    2 <property>
    3     <name>mapreduce.framework.name</name>
    4     <value>yarn</value>
    5 </property>

    workers

    1 hadoop002 2 hadoop003 3 hadoop004

     

    3.使用分发脚本同步$HADOOP_HOME/etc/hadoop下的配置文件

    分发脚本请参考https://www.cnblogs.com/tele-share/p/9502569.html

    在分发脚本同步前,要保证你的hadoop目录下没有存储临时文件的data目录(保险起见也删除logs文件夹),否则同步过去hadoop003与hadoop004的datanode会具有相同的storgeid与datanodeuuid.这样就会导致

    启动datanode失败

    执行同步命令

    xsync.sh /opt/module/hadoop-3.1.1/etc/hadoop/

    分发完毕后执行分发脚本进行查看

    xcall.sh cat /opt/module/hadoop-3.1.1/etc/hadoop/core-site.xml

     

    4.分步启动hadoop

    如果你的虚拟机之前没有启动过hadoop,那么第一次启动时还要先进行格式化namenode(hadoop002),格式化namenode时如果出现了yes/no说明你之前的临时存储目录没有清理干净去检查下默认的/tmp是否有残留,没有在执行格式化命令,否则即使成功启动namenode仍然会有问题

    hdfs namenode -format

    之后在master上即hadoop002启动hdfs

    start-dfs.sh

    执行这个命令如果出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).是因为没有配置好ssh免密登录,请参考https://www.cnblogs.com/tele-share/p/9503021.html

    启动成功后xcall.sh jps进行查看,确认三台虚拟机都有了datanode后在hadoop003上(可以在hadoop002上远程连接hadoop003然后启动)启动yarn

    start-yarn.sh,之后在hadoop002上再次查看jps,这里需要注意的是ResourceManager配置在哪台机器上就要在哪台机器上启动yarn

     

    此时已经启动完成,可以执行以下命令查看datanode是否配置正确,否则即使datanode启动了,也不是从属于我们配置的namenode

    hadoop fsck -locations(但这个命令并不是判断datanode是否启动的依据,还是要看jps)

    再次重申,一定要关闭防火墙如果你只是配置了开放防火墙的某些端口,后面测试文件上传的时候仍然会有问题

     

    5.文件上传测试

    创建文件夹

    hadoop fs -mkdir -p /usr/tele创建完成后可在hadoop002:50070观察到效果web页面无法打开请参考https://www.cnblogs.com/tele-share/p/9495848.html

     

    上传文件

    hadoop fs -put /opt/software/jdk-8u181-linux-x64.tar.gz  /usr/tele

    (如果上传失败,请检查文件夹权限,尽量使用普通账号启动hadoop)

    如果发现Replication与Availability不一致,请参考https://www.cnblogs.com/tele-share/p/9504745.html

    接下来进入hdfds实际在linux上的存储路径,一会要根据Block Pool ID寻找存储的文件,进入以下目录

    /opt/module/hadoop-3.1.1/data/tmp/dfs/data/current/BP-124647413-192.168.101.102-1534570931675/current/finalized/subdir0/subdir0

    可以看到上传的jdk1.8的压缩包被分成了两个block,接下来对文件进行合并

    解压这个jdk.file就会得到我们上传的jdk压缩包了tar -zxvf jdk.file

    当然也可以使用hadoop fs -get命令进行下载,接下来进入hadoop003与hadoop004分别查看是否有我们的备份

    hadoop004的图不再贴了,同样也有备份,到这搭建与测试全部完成了

     

    6.停止

    先在hadoop003停止yarn,jps后在hadoop002停止datanode,由于在开头配置hadoop-env.sh时指定了pid的存储目录,所以不用担心pid文件被清理掉

     

    7.总结

    ①尽量不要使用stop-all.start-all.sh来操作集群,停止与启动都要分步操作,请参考https://www.cnblogs.com/tele-share/p/9508225.html

    ②datanode与namenode的联系靠的是datanode的clusterID,从属于同一namenode的datanode具有相同的clusterID,当然不同的datanode其storgeid与datanodeuuid是不同的,如果你在启动的过程中发现总是只有一个datanode可以启动,那么你就要考虑datanode的id冲突问题了

    ③必须在配置ResourceManager的机器上启动yarn

    ④防火墙必须关闭,只开放部分端口会导致写入副本时报错java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as 192.168.101.103:9866查看datanode的日志会有java.net.NoRouteToHostException: No route to host等问题

    ⑤yarn-site.xml与mapred.xml中尽量不要使用中文注释否则启动的时候会有一个java.lang.RuntimeException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 start byte 0xb5 (at char #672, byte #20

    ⑥修改配置文件前要把hadoop停掉,然后才会生效(个别文件例外,但还是建议停掉hadoop再进行修改)

    ⑦workers文件对应2,x的slaves,从奴隶变成了工人

    ⑧3.x中yarn-env.sh与mapred-env.sh已经不再需要配置export JAVA_HOME

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-4 18:24 , Processed in 0.069717 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表