暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop集群搭建

畅谈Fintech 2021-06-25
759
手把手教你搭建Hadoop最小集群,3台CentOS服务器包含Zookeeper注册中心集群搭建





01



环境准备



软件以及版本

软件
版本
VMware
14.0
Linux镜像CentOS
CentOS7,64位
javajdk1.8.0_141
Hadoophadoop-2.6.0-cdh5.14.2
Zookeeperzookeeper-3.4.5-cdh5.14.2



02




单台CentOS搭建



一、VMware安装

    安装虚拟机,比较简单不再讲解。

二、单台Linux安装配置

    VMware虚拟机中安装1台CentOS7,比较简单不再讲解。

  • 不过要注意几个问题:

  1. CentOS7虚拟机配置要求


    主机
    内存(G)
    处理器(P)
    内核数量(C)
    node1
    4
    2
    2
    node22
    1
    1
    node3
    2
    11
  2. 修改IP地址、配置DNS

      vim etc/sysconfig/network-scripts/ifcfg-ens3
      ONBOOT="yes"
      IPADDR=192.168.8.101
      NETMASK=255.255.255.0
      GATEWAY=192.168.8.1
      DNS1=8.8.8.8


    • 检查并修改MAC地址

      如果用虚拟机克隆第2、3台linux,则要修改linux的MAC地址,避免3台服务器MAC地址重复。这里修改MAC地址有两种方法:


      • 虚拟机里面随机生成



      • 进入Linux系统后,修改网卡的UUID信息


        vim etc/sysconfig/network-scripts/ifcfg-ens33

      • 关闭防火墙


          systemctl stop firewalld
          systemctl disable firewalld
        • 关系selinux

            vim /etc/selinux/config 
            SELINUX=disabled
          • 更改主机名

            第一台

              vim /etc/hostname
              node01.wqs.com

              第二台

                vim etc/hostname
                node02.wqs.com

                第三台

                  vim /etc/hostname
                  node03.wqs.com
                • 修改hosts

                  每台都要修改,对IP和主机名做映射

                  • vim /etc/hosts
                    192.168.8.101 node01.wqs.com node01
                    192.168.8.102 node02.wqs.com node02
                    192.168.8.103 node03.wqs.com node03

                    03


                    三台CentOS搭建



                  检查上述单台linux的7个注意要点。然后开始配置3台Linux集群。

                  1. 同步3台服务器集群时间

                  这里通过网络连接外网进行时钟同步的方法。前提是必须保证虚拟机连上外网。检测方法可以是ping通百度。三台机器都安装ntpdate阿里云时钟同步服务器。

                    yum -y install ntpdate
                    ntpdate ntp4.aliyun.com

                    三台机器定制任务,添加如下内容:

                      crontab -e
                      */1 * * * * usr/sbin/ntpdate ntp4.aliyun.com;

                      2. 添加普通用户并且赋予权限

                      三台linux服务器统一添加普通用户hadoop,并给以sudo权限,用于以后

                      所有的地方的大数据软件的安装。


                        visudo
                        添加内容
                        hadoop ALL=(ALL)    ALL

                        3. 设置统一目录

                        定义三台linux服务器软件压缩包存放目录,以及解压后安装目录,三台机    器执行以下命令,创建两个文件夹,一个用于存放软件压缩包目录,一个用于存放解压后目录。

                          mkdir -p wqs/soft   # 软件压缩包存放目录
                          mkdir -p wqs/install # 软件解压后存放目录
                          chown -R hadoop:hadoop wqs # 将文件夹权限更改为hadoop用户

                          创建hadoop用户之后,我们三台机器都通过hadoop用户来进行操作,以后再也不需要使用root用户来操作了三台机器通过 su hadoop命令来切换到hadoop用户。

                          4.安装JDK

                          • 解压缩包

                            cd /wqs/soft/
                            tar -xzvf jdk-8u141-linux-x64.tar.gz -C kkb/install/
                            sudo vim etc/profile
                            • 添加环境变量


                              #添加以下配置内容,配置jdk环境变量
                              export JAVA_HOME=/kkb/install/jdk1.8.0_141
                              export PATH=$PATH:$JAVA_HOME/bin
                              • 使其生效


                                source etc/profile

                                5.做公钥与私钥实现用户免密码登录

                                • 三台机器在hadoop用户下执行以下命令生成公钥与私钥

                                node02

                                  ssh-keygen -t rsa

                                  执行上述命令之后,按三次Enter键即可生成了

                                  • 三台机器在hadoop用户下,执行命令拷贝公钥到node01服务器


                                    ssh-copy-id node01
                                    • node01服务器将公钥拷贝给node02与node03,node01在hadoop用户下,执行以下命令,将authorized_keys拷贝到node02与node03服务器。

                                      cd home/hadoop/.ssh/
                                      scp authorized_keys node02:$PWD
                                      scp authorized_keys node03:$PWD
                                      • 验证,从任意节点是否能免秘钥登陆其他节点。

                                            如node01免密登陆node02。

                                      • 重启3台服务器


                                        sudo reboot -h now



                                        04


                                        zookeeper注册中心集群搭建



                                        注意:安装ZooKeeper前要保证三台linux服务器时钟同步。


                                        1. 下载上传解压缩包

                                          zookeeeper的压缩包到Node1服务器/wqs/soft路径下


                                            cd /wqs/soft
                                            tar -zxvf zookeeper-3.4.5-cdh5.14.2.tar.gz -C wqs/install/


                                          • 修改配置文件zoo.cfg


                                              cd /wqs/install/zookeeper-3.4.5-cdh5.14.2/conf
                                              cp zoo_sample.cfg zoo.cfg
                                              mkdir -p /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas
                                              vim zoo.cfg
                                              dataDir=/wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas
                                              autopurge.snapRetainCount=3
                                              autopurge.purgeInterval=1
                                              server.1=node01:2888:3888
                                              server.2=node02:2888:3888
                                              server.3=node03:2888:3888
                                            • 添加myid配置

                                              节点node1添加myid文本文件

                                                echo 1 > /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid

                                                分发到其他2台机器上,并且修改myid的值为2和3


                                                  第一台机器上面执行以下两个命令
                                                  scp -r /wqs/install/zookeeper-3.4.5-cdh5.14.2/ node02:/wqs/install/
                                                  scp -r wqs/install/zookeeper-3.4.5-cdh5.14.2/ node03:/wqs/install/


                                                  第二台机器上修改myid的值为2
                                                  直接在第二台机器任意路径执行以下命令
                                                  echo 2 > /wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid


                                                  第三台机器上修改myid的值为3
                                                  直接在第三台机器任意路径执行以下命令
                                                  echo 3 > wqs/install/zookeeper-3.4.5-cdh5.14.2/zkdatas/myid




                                                • 3台CentOS启动zookeeper服务

                                                  三台机器都需要启动服务


                                                    /wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh start
                                                    查看启动状态
                                                    /wqslsls/install/zookeeper-3.4.5-cdh5.14.2/bin/zkServer.sh status
                                                    • 搭建过程中发现问题

                                                    node01节点一直无法链接,而node02和03是正常的,node03显示是leader,node02是follower。

                                                      [hadoop@node01 bin]$ zkServer.sh start
                                                      JMX enabled by default
                                                      Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                      Starting zookeeper ... STARTED
                                                      [hadoop@node01 bin]$ jps
                                                      10625 Jps
                                                      10601 QuorumPeerMain
                                                      [hadoop@node01 bin]$ zkServer.sh status
                                                      JMX enabled by default
                                                      Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                      Error contacting service. It is probably not running.


                                                      2020-09-26 13:07:04,095 [myid:3] - INFO [node03/192.168.8.103:3888:QuorumCnxManager$Listener@712] - Received connection request 192.168.8.101:60830
                                                      2020-09-26 13:07:04,096 [myid:3] - WARN [node03/192.168.8.103:3888:QuorumCnxManager@573] - Cannot open channel to 1 at election address node01/192.168.8.101:3888
                                                      java.net.NoRouteToHostException: No route to host (Host unreachable)
                                                      at java.net.PlainSocketImpl.socketConnect(Native Method)
                                                      at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
                                                      at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
                                                      at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
                                                      at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
                                                      at java.net.Socket.connect(Socket.java:589)
                                                      at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:552)
                                                      at org.apache.zookeeper.server.quorum.QuorumCnxManager.handleConnection(QuorumCnxManager.java:468)
                                                      at org.apache.zookeeper.server.quorum.QuorumCnxManager.receiveConnection(QuorumCnxManager.java:387)


                                                      • 解决方法思路

                                                      1)是否是公约私密问题?

                                                      在node1-3主机可以随意切换链接到其他节点,应该问题不在这边!

                                                      (2)是否是防火墙问题?

                                                      查看是防火墙问题,node1的防火墙开着!!!

                                                        [hadoop@node01 bin]$ systemctl status firewalld
                                                        firewalld.service - firewalld - dynamic firewall daemon
                                                        Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
                                                        Active: active (running) since Sat 2020-09-26 19:22:13 CST; 5h 43min left
                                                        Docs: man:firewalld(1)
                                                        Main PID: 8657 (firewalld)
                                                        CGroup: system.slice/firewalld.service
                                                        └─8657 usr/bin/python -Es usr/sbin/firewalld --nofork --nopid
                                                        [hadoop@node01 bin]$ systemctl stop firewalld
                                                        ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
                                                        Authentication is required to manage system services or units.
                                                        Authenticating as: root
                                                        Password:
                                                        ==== AUTHENTICATION COMPLETE ===

                                                        关闭防火墙

                                                          [hadoop@node01 bin]$ systemctl stop firewalld
                                                          ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
                                                          Authentication is required to manage system services or units.
                                                          Authenticating as: root
                                                          Password:
                                                          ==== AUTHENTICATION COMPLETE ===
                                                          [hadoop@node01 bin]$ systemctl disable firewalld
                                                          ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===
                                                          Authentication is required to manage system service or unit files.
                                                          Authenticating as: root
                                                          Password:
                                                          ==== AUTHENTICATION COMPLETE ===
                                                          Removed symlink etc/systemd/system/multi-user.target.wants/firewalld.service.
                                                          Removed symlink etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
                                                          ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
                                                          Authentication is required to reload the systemd state.
                                                          Authenticating as: root
                                                          Password:
                                                          ==== AUTHENTICATION COMPLETE ===
                                                          [hadoop@node01 bin]$ systemctl status firewalld
                                                          firewalld.service - firewalld - dynamic firewall daemon
                                                          Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
                                                          Active: inactive (dead)
                                                          Docs: man:firewalld(1)
                                                          [hadoop@node01 bin]$ ll

                                                          测试连接,三台机器重启zookeeper服务。

                                                            [root@node01 bin]# zkServer.sh start
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Starting zookeeper ... STARTED
                                                            [root@node01 bin]
                                                            [hadoop@node02 bin]$ zkServer.sh start
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Starting zookeeper ... STARTED
                                                            [hadoop@node02 bin]$ 
                                                            [hadoop@node03 bin]$ zkServer.sh start
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Starting zookeeper ... STARTED
                                                            [hadoop@node03 bin]

                                                                 查看三台机器zookeeper的状态显示正常

                                                            [root@node01 bin]# zkServer.sh status
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Mode: leader
                                                            [root@node01 bin]#


                                                            [hadoop@node02 bin]$ zkServer.sh status
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Mode: follower
                                                            [hadoop@node02 bin]$


                                                            [hadoop@node03 bin]$ zkServer.sh status
                                                            JMX enabled by default
                                                            Using config: wqs/install/zookeeper-3.4.5-cdh5.14.2/bin/../conf/zoo.cfg
                                                            Mode: follower
                                                            [hadoop@node03 bin]$


                                                              05


                                                              Hadoop集群搭建



                                                            一、集群规划部署

                                                            服务器IP192.168.8.101192.168.8.102192.168.8.103
                                                            HDFSNameNode

                                                            HDFSSecondaryNameNode

                                                            HDFSDataNodeDataNodeDataNode
                                                            YARNResourceManager

                                                            YARNNodeManagerNodeManagerNodeManager
                                                            历史日志服务器JobHistoryServer

                                                            二、安装部署

                                                            1.把hadoop包上传到第一台服务器并解压

                                                            第一台机器执行以下命令

                                                              cd /wqs/install/hadoop-2.6.0-cdh5.14.2
                                                              bin/hadoop ls
                                                              [hadoop@node01 bin]$ hadoop checknative
                                                              20/09/26 23:32:32 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
                                                              20/09/26 23:32:32 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
                                                              Native library checking:
                                                              hadoop: true wqs/install/hadoop-2.6.0-cdh5.14.2/lib/native/libhadoop.so.1.0.0
                                                              zlib: true lib64/libz.so.1
                                                              snappy: true lib64/libsnappy.so.1
                                                              lz4: true revision:10301
                                                              bzip2: true lib64/libbz2.so.1
                                                              openssl: false Cannot load libcrypto.so (libcrypto.so: cannot open shared object file: No such file or directory)!
                                                              • 如果出现openssl为false,那么所有机器在线安装openssl即可,执行以下命令,虚拟机联网之后就可以在线进行安装了

                                                                yum -y install openssl-devel

                                                                2.修改core-site.xml

                                                                  cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
                                                                  vim core-site.xml
                                                                  <configuration>
                                                                  <property>
                                                                  <name>fs.defaultFS</name>
                                                                  <value>hdfs://node01:8020</value>
                                                                  </property>
                                                                  <property>
                                                                  <name>hadoop.tmp.dir</name>
                                                                  <value>/wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas</value>
                                                                  </property>
                                                                  <!-- 缓冲区大小,实际工作中根据服务器性能动态调整 -->
                                                                  <property>
                                                                  <name>io.file.buffer.size</name>
                                                                  <value>4096</value>
                                                                  </property>
                                                                  <!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 -->
                                                                  <property>
                                                                  <name>fs.trash.interval</name>
                                                                  <value>10080</value>
                                                                  </property>
                                                                  </configuration>
                                                                      
                                                                  3.修改hdfs-site.xml
                                                                  • 配置dfs.hosts



                                                                  • 配置NameNode、dataNode



                                                                  • 配置NameNode的edits、checkpoint      


                                                                   4.修改hadoop-env.sh

                                                                    cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
                                                                    vim hadoop-env.sh
                                                                    export JAVA_HOME=/kkb/install/jdk1.8.0_141

                                                                    5.修改mapred-site.xml

                                                                      cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
                                                                      [root@node01 hadoop]# cat mapred-site.xml
                                                                      <configuration>
                                                                      <property>
                                                                      <name>mapreduce.framework.name</name>
                                                                      <value>yarn</value>
                                                                      </property>
                                                                      <property>
                                                                      <name>mapreduce.job.ubertask.enable</name>
                                                                      <value>true</value>
                                                                      </property>
                                                                      <property>
                                                                      <name>mapreduce.jobhistory.address</name>
                                                                      <value>node01:10020</value>
                                                                      </property>
                                                                      <property>
                                                                      <name>mapreduce.jobhistory.webapp.address</name>
                                                                      <value>node01:19888</value>
                                                                      </property>
                                                                      </configuration>

                                                                      6.修改yarn-site.xml
                                                                        cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
                                                                        [root@node01 hadoop]# cat yarn-site.xml
                                                                        <!-- Site specific YARN configuration properties -->
                                                                        <property>
                                                                        <name>yarn.resourcemanager.hostname</name>
                                                                        <value>node01</value>
                                                                        </property>
                                                                        <property>
                                                                        <name>yarn.nodemanager.aux-services</name>
                                                                        <value>mapreduce_shuffle</value>
                                                                        </property>
                                                                        </configuration>

                                                                        7.修改slaves文件

                                                                          cd /wqs/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
                                                                          vim slaves
                                                                          node01
                                                                          node02
                                                                          node03

                                                                          8.创建文件存放目录

                                                                               在第一台节点上,执行多个文件夹创建。

                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/tempDatas
                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/namenodeDatas
                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/datanodeDatas
                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/edits
                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/snn/name
                                                                            mkdir -p /wqs/install/hadoop-2.6.0-cdh5.14.2/hadoopDatas/dfs/nn/snn/edits



                                                                            9.安装包的分发

                                                                              cd /wqs/install/
                                                                              scp -r hadoop-2.6.0-cdh5.14.2/ node02:$PWD
                                                                              scp -r hadoop-2.6.0-cdh5.14.2/ node03:$PWD

                                                                              10.Hadoop环境变量

                                                                                vim  /etc/profile
                                                                                export HADOOP_HOME=/kkb/install/hadoop-2.6.0-cdh5.14.2
                                                                                export PATH=:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH


                                                                                配置完成之后生效
                                                                                source /etc/profile

                                                                                三、集群启动

                                                                                1.格式化NameNode

                                                                                要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。

                                                                                  bin/hdfs namenode  -format
                                                                                  或者
                                                                                  bin/hadoop namenode –format

                                                                                  2.单个节点逐一启动

                                                                                    在主节点上使用以下命令启动 HDFS NameNode:
                                                                                    hadoop-daemon.sh start namenode


                                                                                    在每个从节点上使用以下命令启动 HDFS DataNode:
                                                                                    hadoop-daemon.sh start datanode


                                                                                    在主节点上使用以下命令启动 YARN ResourceManager:
                                                                                    yarn-daemon.sh start resourcemanager


                                                                                    在每个从节点上使用以下命令启动 YARN nodemanager:
                                                                                    yarn-daemon.sh start nodemanager


                                                                                    以上脚本位于$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start 改为stop 即可。

                                                                                    • sbin/start-dfs.sh

                                                                                    • sbin/start-yarn.sh

                                                                                    • sbin/mr-jobhistory-daemon.sh start historyserver




                                                                                    3.脚本一键启动集群

                                                                                    前提配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。

                                                                                      node01执行以下命令
                                                                                      cd /wqs/install/hadoop-2.6.0-cdh5.14.2/
                                                                                      sbin/start-dfs.sh
                                                                                      sbin/start-yarn.sh
                                                                                      sbin/mr-jobhistory-daemon.sh start historyserver


                                                                                      停止集群:
                                                                                      sbin/stop-dfs.sh
                                                                                      sbin/stop-yarn.sh


                                                                                      //editby wqs 需要启动jobhistoryserver
                                                                                      mr-jobhistory-daemon.sh start historyserver
                                                                                      //jps
                                                                                      [hadoop@node01 sbin]$ jps
                                                                                      35904 ResourceManager
                                                                                      36481 Jps
                                                                                      12178 QuorumPeerMain
                                                                                      35749 SecondaryNameNode
                                                                                      36005 NodeManager
                                                                                      35590 DataNode
                                                                                      36390 JobHistoryServer
                                                                                      35454 NameNode
                                                                                      [hadoop@node01 sbin]$


                                                                                      四、浏览器查看启动页面

                                                                                      1. hdfs集群访问地址,端口50070;

                                                                                        http://192.168.8.101:50070/dfshealth.html#tab-overview  



                                                                                      2. yarn集群访问地址,端口8088;

                                                                                        http://192.168.8.101:8088/cluster

                                                                                      3. 日志信息



                                                                                      4. jobhistory访问地址:



                                                                                      至此,Hadoop集群搭建完毕,可以在上面运行自带的WordCount程序了。





                                                                                      文章转载自畅谈Fintech,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                                      评论