• Hadoop3.x - 本地安装 & 完全分布式安装 & 集群配置 & xsync分发脚本 (解决root用户启动Hadoop集群的报错问题)


    目录

    注意注意注意!

    一、准备条件

    1.安装JDK

    2.下载Hadoop安装包

    二、开始本地安装 

    三、Hadoop运行模式

    四、完全分布式安装

    1.准备3台客户机

    2.安装JDK并分发 scp  rsync xsync

    方法一:scp(secure copy)安全拷贝

    方法二:rsync远程同步工具

    方法三:xsync

    ssh免密登录

    3.集群配置

    集群规划

    配置文件说明

    集群配置-核心文件-core-site.xml

    集群配置-配置HDFS文件-hdfs-site.xml

    集群配置-YARN配置文件-yarn-site.xml

    集群配置-MapReduce配置文件-mapred-site.xml

    集群配置-分发

    4.群起集群并测试

    配置workers

    启动集群

    五、报错问题

    1.修复报错

    2.Web访问HDFS & YARN


    注意注意注意!

    这里自己给自己买了坑,使用了root用户来进行配置和启动。建议还是使用自己创建的用户(不要使用root),当然如果你就是想用root或者已经用root配完了发现报错,请直接看文章结尾的报错解决部分。

    一、准备条件

    1.安装JDK

    若没有安装JDK可以查看之前zk的博客,前半段有讲解如何安装JDK:Zookeeper - 本地安装与参数配置


    2.下载Hadoop安装

    下载地址,这里咱们用的是3.1.3版本:Index of /dist/hadoop/common/hadoop-3.1.3

    4541eb6b3f52416d83eccbf6f094fc50.png

    下载完成后传进Linux中即可:

    d50f2f4daf364a2485b0819d61de5da9.png


    二、开始本地安装 

    开始解压:

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

    然后咱们进去修改配置,这里咱们把 pwd 的目录路径复制一下:

    e2b491ecb6224e758124c2f01c278cf2.png

    进入修改配置文件,这里每个人的文件名可能不会相同,如果JDK是按照我之前的博客配置的话直接复制即可,不然要找到自己的文件,然后写进去:

    sudo vim /etc/profile.d/java.sh

    把以下内容追加进去: 

    1. #HADOOP_HOME
    2. export HADOOP_HOME=/opt/module/hadoop-3.1.3
    3. export PATH=$PATH:$HADOOP_HOME/bin
    4. export PATH=$PATH:$HADOOP_HOME/sbin

    fc540f89b3ae40728a5359eb5cbf0636.png

    上面的是之前配置 JDK 时的环境变量,下面是现在配置的 Hadoop 环境变量。

    保存退出后别忘了 source 一下:

    source /etc/profile
    

    这时候咱们输入 hadoop 看下效果,这里在输入的时候已经可以使用 tab 键来自动补全了:

    hadoop

    成功效果如下,只截取了一部分:  

    48f330f853754b299a2b8e617ab71a65.png

    安装完成。


    三、Hadoop运行模式

    Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

    本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。

    伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模拟一个分布式的环境。个别缺钱的公司用来测试,生产环境不用。

    完全分布式模式:多台服务器组成分布式环境。生产环境使用。 


    四、完全分布式安装

    1.准备3台客户机

    这一步就不多说了,记得关闭防火墙、使用静态IP、和主机名称。这里我三台的名字分别为 hadoop102  hadoop103  hadoop104 


    2.安装JDK并分发 scp  rsync xsync

    没安装的话可以看之前的博客(zk的安装中有JDK的安装流程):Zookeeper - 本地安装与参数配置

    这里只需要在咱们的 hadoop102 上面安装完成即可,103和104咱们可以用点手段拷贝过去(这里是推荐使用方法三的xsync)。 

    方法一:scp(secure copy)安全拷贝

    scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2),其基本语法如下:

    1. scp -r $pdir/$fname $user@$host:$pdir/$fname
    2. 命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

     需要注意的是我这里在hadoop102、hadoop103、hadoop104都已经创建好的/opt/module、           /opt/software两个目录,而且都是 root:root :

    293fb3034ab649318e1e8d37e79efcc4.png

    在 hadoop102 上,将hadoop102中/opt/module/jdk1.8.0_212目录拷贝到hadoop103上:

    scp -r /opt/module/jdk1.8.0_212  root@hadoop103:/opt/module

    在 hadoop103 上,将hadoop102中/opt/module/hadoop-3.1.3目录拷贝到hadoop103上:

    scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

    在 hadoop103 上,将hadoop102中/opt/module目录下所有目录拷贝到hadoop104上:

    scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module

    方法二:rsync远程同步工具

    rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。基本语法如下:

    1. rsync -av $pdir/$fname $user@$host:$pdir/$fname
    2. 命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
    选项功能
    -a归档拷贝
    -v显示过程

    同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103:

    rsync -av hadoop-3.1.3/ rooe@hadoop103:/opt/module/hadoop-3.1.3/

    方法三:xsync

    在写脚本之前咱们肯定希望这个脚本,无论我们在哪个目录都可以直接使用他,所以我们需要把这个脚本所在的路径配置到环境变量中去,先看一眼:

    echo $PATH

    咱们准备把这个脚本放在 root 目录下,接着输入:

    export PATH=/root:$PATH

    之后你也可以再echo一下看看。这样的话咱们在root目录下写得脚本在任何目录下都可以直接使用,不用再去写繁琐的绝对路径了。 效果如下:

    3b5863d846784c50b5918c3186ccacaa.png

    接着咱们在root目录下开始创建脚本:

    vim xsync

     把以下内容放进去即可:

    1. #!/bin/bash
    2. #1. 判断参数个数
    3. if [ $# -lt 1 ]
    4. then
    5. echo Not Enough Arguement!
    6. exit;
    7. fi
    8. #2. 遍历集群所有机器
    9. for host in hadoop102 hadoop103 hadoop104
    10. do
    11. echo ==================== $host ====================
    12. #3. 遍历所有目录,挨个发送
    13. for file in $@
    14. do
    15. #4. 判断文件是否存在
    16. if [ -e $file ]
    17. then
    18. #5. 获取父目录
    19. pdir=$(cd -P $(dirname $file); pwd)
    20. #6. 获取当前文件的名称
    21. fname=$(basename $file)
    22. ssh $host "mkdir -p $pdir"
    23. rsync -av $pdir/$fname $host:$pdir
    24. else
    25. echo $file does not exists!
    26. fi
    27. done
    28. done

    保存退出后给他加个权限:

    chmod +x xsync

    这里咱们就可以来做个测试了,但是首先得去配置一下 hosts 文件,把咱们 hadoop103 和   hadoop104 的ip配置进去:

    vim /etc/hosts

    4f010650c6b74963906945ee1b526f86.png

    然后咱们去根目录下面随便创建点东西,当然要保证103和104机器中没有你所创建的对象:

    1. cd /
    2. mkdir test

    开始测试,直接在根目录下运行,顺便看看环境变量配置的是否正常:

    xsync test/
    

    c334c59407854ca8a8062325dbe6c75c.png

    这里依次输入自己的密码,然后咱们去103和104里面看看成果没有:

    7a65b38b1d8041baa63395a20e279234.png

    测试成功! 然后咱们再把刚刚的配置文件传一下看看:

    xsync /etc/profile.d/java.sh

    依次输入密码后去看一眼结果:

    85eaa5ff97f84807a66ecd3303ebde41.png

    同样也是成功了。若在这里没有使用 root 用户则会因为权限问题报错(因为我们把它放在了 /root 目录下面),这里是无法通过直接添加 sudo 来解决问题的。咱们需要把 xsync 的路径也加上才行,代码如下:

    sudo /root/xsync /etc/profile.d/java.sh 
    

    是时候开始 103 104 机器的Hadoop安装了,那要怎么装呢,直接在 102 上面执行以下步骤:

    1. xsync /opt
    2. xsync /etc/profile.d/java.sh

    当然回头记得去 103 104 上面分别 source 一下:

    source /etc/profile.d/java.sh

    分发安装成功!

    ssh免密登录

    在 102 机器下 进入到 root 目录下,然后ll -a:

    ll -a

    可以看到一个 .ssh 的隐藏目录,咱们进去:

    ssh-keygen -t rsa
    

    连续回车三次,然后ll查看一下会发现多出来了两个新的文件,这俩文件就是公钥和私钥。接下来咱们需要把公钥拷贝到 103 和 104 机器上:

    ssh-copy-id hadoop103
    

    因为是首次连接, 所以需要输入一次 103 的密码,当然之后就不需要了:

    8ca0c214e71045a69db78a7dc334364e.png

    接着我们再试试看ssh到103,看看是否需要密码:

    39988d36ff324ee8ba3b00c303fcb379.png

    可以看到不需要密码直接就连上了,咱们用 exit 退出,然后继续操作:

    exit
    ssh-copy-id hadoop104
    

    同样的,中间输入一密码然后回车。操作完成后咱们可以到 103 和 104 机器上去看一眼:

    ad9c0db77eaa4befbb54656a35a6eae4.png

    可以看到多了一个 authorized_keys 文件,这个用来标识有哪些主机可以访问自己,可以看到文件的结尾是 root@hadoop102 ,没有问题。

    当然你也可以在 102 机器上配置 102 自己的ssh连接,这样以后再运行xsync的时候就不需要再输入密码了:

    ssh-copy-id hadoop102
    

    效果如下:

    96545e0781a944b1bcaa1e88b07cba6c.png


    3.集群配置

    集群规划

    有两点得提前说一下:

    NameNodeSecondaryNameNode不要安装在同一台服务器
    ResourceManager也很消耗内存,不要和NameNodeSecondaryNameNode配置在同一台机器上。

    hadoop102hadoop103hadoop104
    HDFS分布式文件系统NameNode
    DataNode

    DataNode
    SecondaryNameNode
    DataNode

    HDFS资源协调者


    NodeManager
    ResourceManager
    NodeManager

    NodeManager

    配置文件说明

    Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

    默认的配置文件如下:

    默认文件文件存放在Hadoop的jar包中的位置
    [core-default.xml]hadoop-common-3.1.3.jar/core-default.xml
    [hdfs-default.xml]hadoop-hdfs-3.1.3.jar/hdfs-default.xml
    [yarn-default.xml]hadoop-yarn-common-3.1.3.jar/yarn-default.xml
    [mapred-default.xml]hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

    自定义配置文件:

    core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上(咱们的安装路劲在这里:/opt/module/hadoop-3.1.3/etc/hadoop/),用户可以根据项目需求重新进行修改配置。

     注:以下配置均在 hadoop102 中进行配置。

    集群配置-核心文件-core-site.xml

    cd $HADOOP_HOME/etc/hadoop
    vim core-site.xml

    复制一下内容然后根据图片位置粘贴:

    1. <!-- 指定NameNode的地址 -->
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://hadoop102:8020</value>
    5. </property>
    6. <!-- 指定hadoop数据的存储目录 -->
    7. <property>
    8. <name>hadoop.tmp.dir</name>
    9. <value>/opt/module/hadoop-3.1.3/data</value>
    10. </property>
    11. <!-- 配置HDFS网页登录使用的静态用户为atguigu -->
    12. <property>
    13. <name>hadoop.http.staticuser.user</name>
    14. <value>van</value>
    15. </property>

    注意位置,粘贴到 标签中:

    wq保存退出

    集群配置-配置HDFS文件-hdfs-site.xml

    vim hdfs-site.xml

    复制以下内容:

    1. <!-- nn web端访问地址-->
    2. <property>
    3. <name>dfs.namenode.http-address</name>
    4. <value>hadoop102:9870</value>
    5. </property>
    6. <!-- 2nn web端访问地址-->
    7. <property>
    8. <name>dfs.namenode.secondary.http-address</name>
    9. <value>hadoop104:9868</value>
    10. </property>

    注意位置,粘贴到 标签中:

    wq保存退出

    集群配置-YARN配置文件-yarn-site.xml

    vim yarn-site.xml

    继续复制粘贴:

    1. <!-- 指定MR走shuffle -->
    2. <property>
    3. <name>yarn.nodemanager.aux-services</name>
    4. <value>mapreduce_shuffle</value>
    5. </property>
    6. <!-- 指定ResourceManager的地址-->
    7. <property>
    8. <name>yarn.resourcemanager.hostname</name>
    9. <value>hadoop103</value>
    10. </property>
    11. <!-- 环境变量的继承 -->
    12. <property>
    13. <name>yarn.nodemanager.env-whitelist</name>
    14. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    15. </property>

    注意位置:  

    集群配置-MapReduce配置文件-mapred-site.xml

    vim mapred-site.xml
    1. <!-- 指定MapReduce程序运行在Yarn上 -->
    2. <property>
    3. <name>mapreduce.framework.name</name>
    4. <value>yarn</value>
    5. </property>

    集群配置-分发

    最爽的时候到了,使用 xsync 进行分发:

    xsync /opt/module/hadoop-3.1.3/etc/hadoop/

    可以分别去 103 和 104 上查看分发情况:

    cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

    4.群起集群并测试

    配置workers

    在102机器上进行操作:

    vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

    添加以下内容:

    1. hadoop102
    2. hadoop103
    3. hadoop104

    再分发一下:

    xsync /opt/module/hadoop-3.1.3/etc

    启动集群

    如果集群是第一次启动,需要在 hadoop102 节点格式化NameNode:

    hdfs namenode -format

    启动HDFS( 这里报错的的话看最后 ):

    cd /opt/module/hadoop-3.1.3/sbin
    
    ./start-dfs.sh

    在配置了ResourceManager的节点 hadoop103 启动YARN:

    cd /opt/module/hadoop-3.1.3/sbin
    ./start-yarn.sh


    五、报错问题

    1.修复报错

    我这里踩到了一个大坑啊,这玩意儿不能用 root 用户启动。所以跟着做的话到了启动那一步会出问题,咱们来加点东西,让 root 也能启动它,首先咱们先去格式化以下,但是在格式化之前必须先删除目录下的 data 和 logs 目录:

    1. 切记,三台机器都要操作
    2. cd /opt/module/hadoop-3.1.3
    3. rm -rf data/ logs/
    4. hdfs namenode -format

    接着去修改配置文件: 

    1. vim /etc/ssh/sshd_config
    2. 修改以下内容:
    3. PasswordAuthentication yes
    4. 找到以下内容并解除注释:
    5. PermitRootLogin yes
    6. 保存退出后
    7. systemctl restart sshd
    8. xsync /etc/ssh/sshd_config
    cd /opt/module/hadoop-3.1.3/sbin
    

    分别进入这两个文件,对进行下面的添加操作:

    1. vim start-dfs.sh
    2. vim stop-dfs.sh

    把以下内容加进去:

    1. HDFS_DATANODE_USER=root
    2. HADOOP_SECURE_DN_USER=hdfs
    3. HDFS_NAMENODE_USER=root
    4. HDFS_SECONDARYNAMENODE_USER=root

    还有另外两个文件也需要在顶部分别添加以下内容:

    1. vim start-yarn.sh
    2. vim stop-yarn.sh
    1. YARN_RESOURCEMANAGER_USER=root
    2. HADOOP_SECURE_DN_USER=yarn
    3. YARN_NODEMANAGER_USER=root

    再次启动 102 :

    cd /opt/module/hadoop-3.1.3/sbin
    
    ./start-dfs.sh

    103 :

    cd /opt/module/hadoop-3.1.3/sbin
    ./start-yarn.sh 
    

    效果如下:


    2.Web访问HDFS & YARN

    访问测试,在Linux浏览器中输入:

    http://hadoop102:9870

    https://www.centos.org/

    页面访问成功。 

  • 相关阅读:
    综合布线工程测试技术
    webUI自动化之基本框架搭建(python + selenium + unittest)
    Mybatis
    公钥密码学中的公钥和私钥
    redis未授权访问漏洞利用
    Flutter循序渐进==>封装、继承、多态、抽象类以及属性修改
    基于Hadoop+协同过滤算法+可视化大屏的岗位推荐系统设计与实现(可二开任何招聘系统,校园招聘,公司招聘,计算机岗位招聘)
    MATLAB初学者入门(10)—— 粒子群算法
    【二】2D测量 Metrology——clear_metrology_model()/clear_metrology_object()算子
    QtService实现Qt后台服务程序其二_启动外部exe无窗口异常的解决
  • 原文地址:https://blog.csdn.net/Trollz/article/details/126662788