zoukankan      html  css  js  c++  java
  • Spark环境搭建(中)——Hadoop安装

    1. 下载Hadoop

    1.1 官网下载Hadoop

    http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz

    打开上述链接,进入到下图,可以随意下载一个完整的hadoop-2.9.0版本,如下图所示:

     

    2. 安装单机版Hadoop

    详情参考:https://blog.csdn.net/qazwsxpcm/article/details/78637874

    3. 安装集群版Hadoop

    把hadoop-2.9.0.tar.gz文件进行操作,分三大步骤:

    • 配置前的准备,包括上传到主节点,解压缩并迁移到/opt/app目录,在hadoop目录下创建tmp、name和data目录;
    • 配置,包括hadoop-env.sh、yarn-env.sh(前两者为启动文件的JAVA_HOME和PATH配置)、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、Slaves(后面5个文件为核心组件和集群配置),共7个文件需要配置。配置完成需要向另外的集群机器节点分发hadoop程序;
    • 启动部署,包括格式化NameNode、启动HDFS、启动YARN。

    3.1 准备

    3.1.1 上传并解压Hadoop安装包

    1. 把hadoop-2.9.0.tar.gz通过Xfpt工具上传到主节点的/opt/uploads目录下

     

    2. 在主节点上解压缩,如果解压缩出来的文件拥有者和用户组不是hadoop,则需要使用sudo chown -R hadoop:hadoop hadoop-2.9.0命令

     # cd /opt/uploads/

    # tar -zxvf  hadoop-2.9.0.tar.gz

    有时解压出来的文件夹,使用命令 ll 查看用户和用户组有可能不是hadoop时,即上图绿框显示,则需要使用如下命令更换为hadoop用户和用户组:

    # sudo chown hadoop:hadoop hadoop-2.9.0

     3. 把hadoop-2.9.0目录移到/opt/app目录下

    # mv hadoop-2.9.0 /opt/app/

    # ll /opt/hadoop

    3.1.2 在Hadoop目录下创建子目录

    以hadoop用户在/opt/app/hadoop-2.9.0目录下创建tmp、name和data目录。tmp为缓存文件,name用于NameNode存放文件,data用于DataNode存放文件

    # cd /opt/app/hadoop-2.9.0/

    # mkdir tmp && mkdir name && mkdir data

    # ll

    3.2 配置7大文件

    3.2.1 配置hadoop-env.sh

    1. 以hadoop用户打开配置文件hadoop-env.sh

    # cd /opt/app/hadoop-2.9.0/etc/hadoop

    # vi hadoop-env.sh

     

    2. 加入配置内容,设置JAVA_HOME和PATH路径

    export JAVA_HOME=/usr/lib/java/jdk1.8.0_151

    export PATH=$PATH:/opt/app/hadoop-2.9.0/bin

    3. 编译配置文件hadoop-env.sh,并确认生效

    # source hadoop-env.sh

    # hadoop version

     3.2.2 配置yarn-env.sh

    1. 以hadoop用户在/opt/app/hadoop-2.9.0/etc/hadoop打开配置文件yarn-env.sh

    # cd /opt/app/hadoop-2.9.0/etc/hadoop   如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # vi yarn-env.sh

    2. 加入配置内容,在如下位置设置JAVA_HOME路径

    export JAVA_HOME=/usr/lib/java/jdk1.8.0_151

     3. 编译配置文件yarn-env.sh,并确认生效

    source yarn-env.sh

    3.2.3 配置core-site.xml

    1. 以hadoop用户,使用如下命令打开core-site.xml配置文件

    # cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # vi core-site.xml

    2. 在配置文件中,按照如下内容进行配置

    配置的点有fs默认名字、默认FS、IO操作的文件缓冲区大小、tmp目录、代理用户hosts、代理用户组,共6点。

    <configuration>
        <property>
               <name>fs.default.name</name>
               <value>hdfs://hadoop1:9000</value>
       </property>
       <property>
            <name>fs:defaultFS</name>
            <value>hdfs://hadoop1:9000</value>
       </property>
       <property>
            <name>io.file.buffer.size</name>
            <value>131072</value>
       </property>
       <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/opt/app/hadoop-2.9.0/tmp</value>
       </property>
       <property>
            <name>hadoop.proxyuser.hduser.hosts</name>
            <value>*</value>
       </property>
       <property>
           <name>hadoop.proxyuser.hduser.groups</name>
           <value>*</value>
       </property>
    </configuration>

     

    3.2.4 配置hdfs-site.xml

    1. 使用如下命令打开hdfs-site.xml配置文件

    # cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # vi hdfs-site.xml

     

    2. 在配置文件中,按照如下内容进行配置

     hdfs-site.xml配置的点有namenode的secondary、name目录、data目录、备份数目、开启webhdfs,共5点

    <configuration>
       <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>hadoop1:9001</value>
       </property>
       <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/opt/app/hadoop-2.9.0/name</value>
       </property>
       <property>
           <name>dfs.datanode.data.dir</name>
           <value>file:/opt/app/hadoop-2.9.0/data</value>
       </property>
       <property>
           <name>dfs.replication</name>
           <value>2</value>
       </property>
       <property>
           <name>dfs.webhdfs.enabled</name>
           <value>true</value>
       </property>
    </configuration>

     

    【注意】:namenode的hdfs-site.xml是必须将dfs.webhdfs.enabled属性设置为true,否则就不能使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的。

    3.2.5 配置mapred-site.xml

     1.  默认情况下不存在mapred-site.xml文件,可以从模板拷贝一份。然后,使用vi命令打开mapred-site.xml配置文件

    # cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # cp mapred-site.xml.template mapred-site.xml

    # vi hdfs-site.xml

    2. 在配置文件中,按照如下内容进行配置

    mapred-site.xml配置的点有mapreduce的框架、jobhistory的地址、jobhistory的webapp地址,共3点。

    <configuration>
       <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
       </property>
       <property>
            <name>mapreduce.jobhistory.address</name>
            <value>hadoop1:10020</value>
       </property>
       <property>
           <name>mapreduce.jobhistory.webapp.address</name>
           <value>hadoop1:19888</value>
       </property>
    </configuration>

     

    3.2.6 配置yarn-site.xml

     1. 使用如下命令打开yarn-site.xml配置文件

    # cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # vi hdfs-site.xml

     

    2. 在配置文件中,按照如下内容进行配置

    yarn-site.xml配置的点有①nodemanager的aux-services及其类;②resourcemanager的地址、其sheduler地址、其resource-tracker地址、其admin地址以及webapp地址,共7点。

    <configuration>

         <property>

               <name>yarn.nodemanager.aux-services</name>

               <value>mapreduce_shuffle</value>

         </property>

         <property>

              <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

              <value>org.apache.hadoop.mapred.ShuffleHandler</value>

         </property>

         <property>

              <name>yarn.resourcemanager.address</name>

              <value>hadoop1:8032</value>

         </property>

         <property>

              <name>yarn.resourcemanager.scheduler.address</name>

              <value>hadoop1:8030</value>

         </property>

         <property>

              <name>yarn.resourcemanager.resource-tracker.address</name>

              <value>hadoop1:8031</value>

         </property>

         <property>

              <name>yarn.resourcemanager.admin.address</name>

              <value>hadoop1:8033</value>

         </property>

         <property>

              <name>yarn.resourcemanager.webapp.address</name>

              <value>hadoop1:8088</value>

          </property>

    </configuration>

    3.2.7 配置Slaves文件

    1. 使用# vi slaves打开从节点配置文件

    # cd /opt/app/hadoop-2.9.0/etc/hadoop/     如果不在/opt/app/hadoop-2.9.0/etc/hadoop目录下,则使用该命令

    # vi slaves

    2. 在配置文件中加入如下内容:

    hadoop1

    hadoop2

    hadoop3

     

    3.2.8 向各节点分发Hadoop程序

    1. 在hadoop1机器/opt/app/hadoop-2.9.0使用如下命令把hadoop文件夹复制到hadoop2和hadoop3机器

    # cd /opt/app

    # scp -r hadoop-2.9.0 hadoop@hadoop2:/opt/app/

    # scp -r hadoop-2.9.0 hadoop@hadoop3:/opt/app/

    2. 在从节点查看是否复制成功

    3.3 启动部署

    启动部署,包括格式化NameNode、启动HDFS、启动YARN。

    3.3.1 格式化NameNode

    # cd /opt/app/hadoop-2.9.0

    # ./bin/hdfs namenode -format

    3.3.2 启动HDFS

    1. 使用如下命令启动HDFS:

    # cd /opt/app/hadop-2.9.0/sbin   如果不在/opt/app/hadoop-2.9.0/sbin目录下,则使用该命令

    # ./start-dfs.sh

    2. 验证HDFS启动

     此时在hadoop1上面运行的进程有:NameNode、SecondaryNameNode和DataNode

    hadoop2和hadoop3上面运行的进程有:NameNode和DataNode

    【注意】:jps命令出现—— xxxx--process information unavailable解决方法(有可能出现)

    解决方法:根目录/tmp中找到hsperfdata_前缀的目录,并找出PID(即xxxx)对应的文件并且删除即可。如果/tmp文件不重要的话,全部删除也行。

    3.3.3 启动YARN

    1. 使用如下命令启动YARN

    # cd /opt/app/hadoop-2.9.0/sbin  如果不在/opt/app/hadoop-2.9.0/sbin目录下,则使用该命令

    # ./start-yarn.sh

    2. 验证YARN启动

    此时在hadoop1上运行的进程有:NameNode、SecondaryNameNode、DataNode、NodeManager和ResourceManager

    hadoop2和hadoop3上面运行的进程有:NameNode、DataNode和NodeManager

    4. HA配置及启动

      在HA集群中,Standby NameNode也起着命名空间状态的checkpoints作用,因此不需要在HA集群中运行Secondary NameNode、CheckpointNode、或者BackupNode;而且这样做会导致报错。

      两个NameNode为了数据同步,会通过一组称为JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。这就是JournalNode起到的作用。

      QuorumPeerMain用于两个NameNode以上的主备选举及切换。

      DFSZKFailoverController用于发生故障的主NameNode节点自动切换备用NameNode。

    4.1 节点服务分配

      

    4.2 搭建zookeeper集群

    具体操作详情请看:https://www.cnblogs.com/swordfall/p/8667409.html  “zookeeper安装使用及工作原理分析”的第6节

    4.3 配置HDFS HA(所有机器均需配置)

    4.3.1 创建name、data、journal目录

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# pwd
    /opt/app/hadoop-2.7.5-ha-multi
    
    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/name
    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/data
    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# mkdir -p tmp/journal
    
    (base) [root@bridge1 tmp]# ll
    total 0
    drwxr-xr-x 2 root root 6 Nov 17 22:06 data
    drwxr-xr-x 2 root root 6 Nov 17 22:06 journal
    drwxr-xr-x 2 root root 6 Nov 17 22:05 name

    4.3.2 slaves配置datanode

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# cat etc/hadoop/slaves 
    bridge1
    bridge2
    bridge3

     4.3.3 配置hdfs-site.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
      <property>  
            <name>dfs.nameservices</name>
            <value>bridge</value>
      </property>
    
       <property>  
            <name>dfs.ha.namenodes.bridge</name>  
            <value>nn1,nn2</value>  
        </property> 
       <!-- nn1的RPC通信地址,nn1所在地址  -->  
        <property>  
            <name>dfs.namenode.rpc-address.bridge.nn1</name>  
            <value>bridge1:8020</value>  
        </property>  
        <!-- nn2的RPC通信地址,nn2所在地址 -->  
        <property>  
            <name>dfs.namenode.rpc-address.bridge.nn2</name>  
            <value>bridge2:8020</value>  
        </property>
    
        <!-- nn1的http通信地址,外部访问地址 -->
        <property>
            <name>dfs.namenode.http-address.bridge.nn1</name>
            <value>bridge1:50070</value>
        </property>
        <!-- nn2的http通信地址,外部访问地址 -->  
        <property>  
            <name>dfs.namenode.http-address.bridge.nn2</name>  
            <value>bridge2:50070</value>  
        </property>  
        <!-- 指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->  
        <property>  
            <name>dfs.namenode.shared.edits.dir</name>  
            <value>qjournal://bridge1:8485;bridge2:8485;bridge3:8485/bridge</value>  
        </property>  
        <!-- 指定JournalNode在本地磁盘存放数据的位置 -->  
        <property>  
            <name>dfs.journalnode.edits.dir</name>  
            <value>/opt/app/hadoop-2.7.5-ha-multi/tmp/journal</value>  
        </property>  
        <!--客户端通过代理访问namenode,访问文件系统,HDFS 客户端与Active 节点通信的Java 类,使用其确定Active 节点是否活跃  -->  
        <property>  
            <name>dfs.client.failover.proxy.provider.bridge</name>  
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
        </property>  
        <!--这是配置自动切换的方法,有多种使用方法,具体可以:看官网,在文末会给地址,这里是远程登录杀死的方法  -->  
        <property>  
            <name>dfs.ha.fencing.methods</name>  
            <value>sshfence</value>     
        </property> 
       <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp/name</value>
       </property>
       <property>
           <name>dfs.datanode.data.dir</name>
           <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp/data</value>
       </property>
       <property>
           <name>dfs.replication</name>
           <value>1</value>
       </property>
       <property>
           <name>dfs.webhdfs.enabled</name>
           <value>true</value>
       </property>
       <property>
           <name>dfs.ha.automatic-failover.enabled</name>
           <value>true</value>
       </property>
       <property>
           <name>ha.zookeeper.quorum</name>
           <value>bridge1:2181,bridge2:2181,bridge3:2181</value>
       </property>
    </configuration>

     4.3.4 配置core-site.xml文件

      注意:这里的hduser为hadoop的用户,如root

    <configuration>
      
       <property>
            <name>fs.default.name</name>
            <value>hdfs://bridge</value>
       </property>
       <property>
            <name>fs.defaultFS</name>
            <value>hdfs://bridge</value>
       </property>
       <property>
            <name>io.file.buffer.size</name>
            <value>131072</value>
       </property>
       <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/opt/app/hadoop-2.7.5-ha-multi/tmp</value>
       </property>
       <property>
            <name>hadoop.proxyuser.hduser.hosts</name>
            <value>*</value>
       </property>
       <property>
           <name>hadoop.proxyuser.hduser.groups</name>
           <value>*</value>
       </property>
    </configuration>

     4.3.5 启动HDFS相关服务

      1. 在三台机器上分别启动zookeeper:

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start
    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start
    (base) [root@bridge3 hadoop-2.7.5-ha-multi]# /opt/app/zookeeper-3.4.5/bin/zkServer.sh start

      2. 在bridge1上格式化zk集群:

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/hdfs zkfc -formatZK

      3. 在三台机器上启动journalnode集群

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode
    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode
    (base) [root@bridge3 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start journalnode

      4. 格式化namenode,启动namenode,bridge1上执行如下:

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/hdfs namenode -format
    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start namenode

        bridge2执行如下:

    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./bin/hdfs namenode -bootstrapStandby
    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start namenode

      5. 在三台机器上分别启动datanode

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode
    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode
    (base) [root@bridge3 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start datanode

      6. ZKFC(FailoverController)必须在namenode上执行。让zk决定哪个namenode为active

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start zkfc
    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/hadoop-daemon.sh start zkfc

          7. 第5步和第6步可以替换为

    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# start-dfs.sh

    4.4 配置YARN HA(所有机器均需配置)

    4.4.1 配置mapred-site.xml文件

    <configuration>
       <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
       </property>
       <property>
            <name>mapreduce.jobhistory.address</name>
            <value>bridge1:10020</value>
       </property>
       <property>
           <name>mapreduce.jobhistory.webapp.address</name>
           <value>bridge1:19888</value>
       </property>
    </configuration>

    4.4.2 配置yarn-site.xml文件

    <configuration>
    <!-- Site specific YARN configuration properties -->
        <property>
               <name>yarn.resourcemanager.hostname</name>
               <value>bridge1</value>
        </property>
        <property>
               <name>yarn.nodemanager.aux-services</name>
               <value>mapreduce_shuffle</value>
         </property>
         <property>
              <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
              <value>org.apache.hadoop.mapred.ShuffleHandler</value>
         </property>
         <property>
               <name>yarn.resourcemanager.connect.retry-interval.ms</name>
               <value>2000</value>
         </property>
    
         <!-- HA -->
         <property>
               <name>yarn.resourcemanager.ha.enabled</name>
               <value>true</value>
         </property>
         <property>
               <name>yarn.resourcemanager.cluster-id</name>
               <value>bridge-yarn</value>
         </property>
         <property>
               <name>yarn.resourcemanager.ha.rm-ids</name>
               <value>rm1,rm2</value>
         </property>
         <property>
               <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
               <value>true</value>
         </property>
         <property>
               <name>yarn.resourcemanager.hostname.rm1</name>
               <value>bridge1</value>
         </property>
         <property>
               <name>yarn.resourcemanager.hostname.rm2</name>
               <value>bridge2</value>
         </property>
         <property>
               <name>yarn.resourcemanager.webapp.address.rm1</name>
               <value>bridge1:8088</value>
         </property>
         <property>
               <name>yarn.resourcemanager.webapp.address.rm2</name>
               <value>bridge2:8088</value>
         </property>
         <property>
               <name>yarn.resourcemanager.zk-address</name>
               <value>bridge1:2181,bridge2:2181,bridge3:2181</value>
         </property>
    </configuration>

    4.4.3 启动yarn相关服务

      在bridge1执行如下命令:

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./sbin/start-yarn.sh

      在bridge2启动resourcemanager

    (base) [root@bridge2 hadoop-2.7.5-ha-multi]# ./sbin/yarn-daemon.sh start resourcemanager

      验证:

    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/yarn rmadmin -getServiceState rm1
    active
    (base) [root@bridge1 hadoop-2.7.5-ha-multi]# ./bin/yarn rmadmin -getServiceState rm2
    standby

    5. 总结

    【参考资料】

    http://www.ttlsa.com/linux/jps-process-information-unavailable/  jps命令出现xxxx--process information unavailable解决方法

    http://www.cnblogs.com/shishanyuan/p/4701646.html 石山园大神的讲解

    https://www.cnblogs.com/zhichaoma/p/9956277.html hadoop单节点部署

    https://my.oschina.net/u/204498/blog/639986 hadoop ha部署

  • 相关阅读:
    python day 09 文件操作
    day python calss08 深浅copy
    python.day05
    pytonn04day
    python开发day03
    python开发day02
    python 变量名的规范
    设备描述表
    GDI基础
    windows编程-窗口
  • 原文地址:https://www.cnblogs.com/swordfall/p/7895989.html
Copyright © 2011-2022 走看看