hadoop 集群架构


1.启动3个linux服务器

IP
    192.168.108.135            192.168.108.136            192.168.108.137

主机名
    www.hadoop1.org            www.hadoop2.org            www.hadoop3.org

硬件信息
    2G 内存 1CPU            1G 内存 1CPU            1G 内存 1CPU

HDFS:
    NameNode
    

    DataNode                    DataNode            DataNode

                                                    SecondaryNameNode

YARN:
    
                            ResourceManager

    NodeManager                    NodeManager            NodeManager

MapReduce:
    
    JobHistoryServer



    

2.配置映射(假设修改IP不用全部改变 只需修改映射)

/etc/hosts
192.168.108.135        www.hadoop1.org          www.hadoop1
192.168.108.136        www.hadoop2.org          www.hadoop2
192.168.108.137        www.hadoop3.org          www.hadoop3


测试能否ping通
ping www.hadoop1.org



3.配置JAVA环境

可以参考
http://12275610.blog.51cto.com/12265610/1917942


4. 配置hadoop
    
    hdfs
        hadoop-env.sh
            
            
            修改文件的JAVA_HOME环境变量           
            export JAVA_HOME=/opt/app/jdk1.7.0_79
        
        
        core-site.xml
                
                <configuration>
                        <!--指定NameNode地址 -->
                        <property>
                             <name>fs.defaultFS</name>
                             <value>hdfs://www.hadoop1.org:8020</value>
                        </property>
                        <!-- 指定临时数据目录-->
                        <property>
                             <name>hadoop.tmp.dir</name>
                             <value>/opt/app/hadoop-2.5.2/data/tmp</value>
                       </property>
                       <!-- 指定垃圾回收-->
                        <property>
                             <name>fs.trash.interval</name>
                             <value>420</value>
                       </property>

                </configuration>

            
        
        hdfs-site.xml
                
                <configuration>
                      <!-- 指定保存的副本数 这里三台机器所以保存3份 -->
                       <property>
                           <name>dfs.replication</name>
                           <value>3</value>
                      </property>

                      <!-- 指定SecondaryNameNode -->
                      <property>
                           <name>dfs.namenode.secondary.http-address</name>
                           <value>www.hadoop3.org:50090</value>
                      </property>

                </configuration>



        slaves
                
                <!-- 配置dataNode 和 NodeManager机器  -->
                
                www.hadoop1.org
                www.hadoop2.org
                www.hadoop3.org
                    
    
    yarn    
        yarn-env.sh
                
                修改文件的JAVA_HOME环境变量           
                export JAVA_HOME=/opt/app/jdk1.7.0_79
                
        yarn-site.xml
                
                <configuration>
                     <!-- 配置yarn中可以运行MapReduce程序-->
                    <property>
                              <name>yarn.nodemanager.aux-services</name>
                              <value>mapreduce_shuffle</value>
                    </property>

                    <!-- 配置ResourceManager节点的地址-->
                    <property>
                             <name>yarn.resourcemanager.hostname</name>
                             <value>www.hadoop2.org</value>
                     </property>

                    <!-- 配置每个NodeManager节点 为4G内存 -->
                    <property>
                            <name>yarn.nodemanager.resource.memory-mb</name>
                            <value>4096</value>
                    </property>
                    <!-- 配置每个NodeManager节点 CPU为4核 -->
                    <property>
                            <name>yarn.nodemanager.resource.cpu-vcores</name>
                            <value>4</value>
                    </property>

                    <!-- 配置开启日志 -->
                    <property>
                            <name>yarn.log-aggregation-enable</name>
                            <value>true</value>
                    </property>

                    <!-- 日志保留时间-->
                    <property>
                            <name>yarn.log-aggregation.retain-seconds</name>
                            <value>640080</value>
                    </property>

            </configuration>

                
        slaves
        
                
            <!-- 配置dataNode 和 NodeManager机器  -->
                
                www.hadoop1.org
                www.hadoop2.org
                www.hadoop3.org
    
    mapduce
        mapred-env.sh
        mapred-site.xml
                
                <configuration>
                        
                        <!-- 配置mapreduce在yarn上运行-->
                        <property>
                                <name>mapreduce.framework.name</name>
                                <value>yarn</value>
                        </property>
                        <!-- 配置JobHistory历史服务监控 rpc地址-->
                        <property>
                                <name>mapreduce.jobhistory.address</name>
                                <value>www.hadoop1.org:10020</value>
                        </property>
                        <!-- 配置JobHistory历史服务监控 web地址-->
                        <property>
                               <name>mapreduce.jobhistory.webapp.address</name>
                               <value>www.hadoop1.org:19888</value>
                        </property>
                                                                                                                                                        
                </configuration>
                
5. 准备分发到各个服务器上

使用Scp命令

    
    1.事先要做ssh无秘钥登录 (三台服务器都要做)
    会在当前用户家目录下.ssh目录生成几个文件
        
    2.    ssh-keygen -t rsa (生成秘钥)
        ssh-copy-id www.hadoop1.org
        ssh-copy-id www.hadoop2.org
        ssh-copy-id www.hadoop3.org
    3.测试远程无秘钥登录    
        ssh www.hadoop1.org
         ssh www.hadoop1.org
        ssh www.hadoop1.org
        
    4.分发到另外两台服务器
        scp -r ./hadoop-2.5.2/ root@www.hadoop2.org:/opt/app
        scp -r ./hadoop-2.5.2/ root@www.hadoop3.org:/opt/app

        
6.启动整个hadoop集群

    1.格式化hdfs
        bin/hdfs namenode -format
    
    2.启动hdfs
        sbin/start-dfs.sh
        
            root@www hadoop-2.5.2]# sbin/start-dfs.sh
            17/06/23 23:38:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
            Starting namenodes on [www.hadoop1.org]
             www.hadoop1.org: starting namenode, logging to /opt/app/hadoop-2.5.2/logs/hadoop-root-namenode-www.hadoop1.org.out
            www.hadoop3.org: starting datanode, logging to /opt/app/hadoop-2.5.2/logs/hadoop-root-datanode-www.hadoop3.org.out
            www.hadoop1.org: starting datanode, logging to /opt/app/hadoop-2.5.2/logs/hadoop-root-datanode-www.hadoop1.org.out
            www.hadoop2.org: starting datanode, logging to /opt/app/hadoop-2.5.2/logs/hadoop-root-datanode-www.hadoop2.org.out
            Starting secondary namenodes [www.hadoop3.org]
            www.hadoop3.org: starting secondarynamenode, logging to /opt/app/hadoop-2.5.2/logs/hadoop-root-secondarynamenode-www.hadoop3.org.out
            17/06/23 23:38:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

        
    3.使用jps命令查看进程
        jps
        
    4.关闭防火墙
        service iptables stop
        
    5.访问http://www.hadoop1.org:50070
    (查看hdfs)
    (记得在windows配置映射  可以使用switchHost这个工具 比较方便
    
    
    
    6 对hadoop hdfs的基本测试
      bin/hdfs dfs -mkdir -p /user/root/tmp
      bin/hdfs dfs -put ./etc/hadoop/core-site.xml ./etc/hadoop/hdfs-site.xml /user/root/tmp/
      bin/hdfs dfs -text /user/root/tmp/core*

        
    7.启动yarn
        sbin/start-yarn.sh
        sbin/mr-jobhistory-daemon.sh start historyserver

        
            [root@www hadoop-2.5.2]# sbin/start-yarn.sh
            starting yarn daemons
            starting resourcemanager, logging to /opt/app/hadoop-2.5.2/logs/yarn-root-resourcemanager-www.hadoop2.org.out
            www.hadoop3.org: starting nodemanager, logging to /opt/app/hadoop-2.5.2/logs/yarn-root-nodemanager-www.hadoop3.org.out
            www.hadoop1.org: starting nodemanager, logging to /opt/app/hadoop-2.5.2/logs/yarn-root-nodemanager-www.hadoop1.org.out
            www.hadoop2.org: starting nodemanager, logging to /opt/app/hadoop-2.5.2/logs/yarn-root-nodemanager-www.hadoop2.org.out

    
    8.使用jsp查看
        jps
    
    9.访问 http://www.hadoop2.org:8088/cluster
        (查看yarn)
    
    10.对yarn和mapreduce进行测试
        bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar wordcount /user/root/tmp/* /user/root/tmp-out
        
            17/06/24 00:04:02 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
            17/06/24 00:04:03 INFO client.RMProxy: Connecting to ResourceManager at www.hadoop2.org/192.168.108.136:8032
            17/06/24 00:04:04 INFO input.FileInputFormat: Total input paths to process : 2
            17/06/24 00:04:04 INFO mapreduce.JobSubmitter: number of splits:2
            17/06/24 00:04:05 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1498287508587_0001
            17/06/24 00:04:05 INFO impl.YarnClientImpl: Submitted application application_1498287508587_0001
            17/06/24 00:04:05 INFO mapreduce.Job: The url to track the job: http://www.hadoop2.org:8088/proxy/application_1498287508587_0001/
            17/06/24 00:04:05 INFO mapreduce.Job: Running job: job_1498287508587_0001
            17/06/24 00:04:19 INFO mapreduce.Job: Job job_1498287508587_0001 running in uber mode : false
            17/06/24 00:04:19 INFO mapreduce.Job:  map 0% reduce 0%
            17/06/24 00:04:46 INFO mapreduce.Job:  map 100% reduce 0%
            17/06/24 00:05:04 INFO mapreduce.Job:  map 100% reduce 100%
            17/06/24 00:05:04 INFO mapreduce.Job: Job job_1498287508587_0001 completed successfully
            17/06/24 00:05:04 INFO mapreduce.Job: Counters: 49
                File System Counters
                    FILE: Number of bytes read=2896
                    FILE: Number of bytes written=297217
                    FILE: Number of read operations=0
                    FILE: Number of large read operations=0
                    FILE: Number of write operations=0
                    HDFS: Number of bytes read=2671
                    HDFS: Number of bytes written=1344
                    HDFS: Number of read operations=9
                    HDFS: Number of large read operations=0
                    HDFS: Number of write operations=2
                Job Counters
                    Launched map tasks=2
                    Launched reduce tasks=1
                    Data-local map tasks=2
                    Total time spent by all maps in occupied slots (ms)=48458
                    Total time spent by all reduces in occupied slots (ms)=14830
                    Total time spent by all map tasks (ms)=48458
                    Total time spent by all reduce tasks (ms)=14830
                    Total vcore-seconds taken by all map tasks=48458
                    Total vcore-seconds taken by all reduce tasks=14830
                    Total megabyte-seconds taken by all map tasks=49620992
                    Total megabyte-seconds taken by all reduce tasks=15185920
                Map-Reduce Framework
                    Map input records=68
                    Map output records=235
                    Map output bytes=3071
                    Map output materialized bytes=2902
                    Input split bytes=240
                    Combine input records=235
                    Combine output records=180
                    Reduce input groups=98
                    Reduce shuffle bytes=2902
                    Reduce input records=180
                    Reduce output records=98
                    Spilled Records=360
                    Shuffled Maps =2
                    Failed Shuffles=0
                    Merged Map outputs=2
                    GC time elapsed (ms)=665
                    CPU time spent (ms)=2820
                    Physical memory (bytes) snapshot=487112704
                    Virtual memory (bytes) snapshot=2516992000
                    Total committed heap usage (bytes)=257171456
                Shuffle Errors
                    BAD_ID=0
                    CONNECTION=0
                    IO_ERROR=0
                    WRONG_LENGTH=0
                    WRONG_MAP=0
                    WRONG_REDUCE=0
                File Input Format Counters
                    Bytes Read=2431
                File Output Format Counters
                    Bytes Written=1344
    11.查看统计结果
        bin/hdfs dfs -text /user/root/tmp-out/part*
            "AS    2
            "License");    2
            (the    2
            -->    7
            2.0    2
            <!--    8
            <!--指定NameNode地址    1
            </configuration>    2
            </property>    5
            <?xml    2
            <?xml-stylesheet    2
            <configuration>    2
            <name>dfs.namenode.secondary.http-address</name>    1
            <name>dfs.replication</name>    1
            <name>fs.defaultFS</name>    1
            <name>fs.trash.interval</name>    1
            <name>hadoop.tmp.dir</name>    1
            <property>    5
            <value>/opt/app/hadoop-2.5.2/data/tmp</value>    1
            <value>3</value>    1
            <value>420</value>    1
            <value>hdfs://www.hadoop1.org:8020</value>    1
            <value>www.hadoop3.org:50090</value>    1
            ANY    2
            Apache    2
            BASIS,    2
            CONDITIONS    2
            IS"    2
            KIND,    2
            LICENSE    2
            License    6
            License,    2
            License.    4
            Licensed    2
            OF    2
            OR    2
            Put    2
            See    4
            Unless    2
            Version    2
            WARRANTIES    2
            WITHOUT    2
            You    2
            a    2
            accompanying    2
            agreed    2
            an    2
            and    2
            applicable    2
            at    2
            by    2
            compliance    2
            copy    2
            distributed    4
            either    2
            encoding="UTF-8"?>    2
            except    2
            express    2
            file    2
            file.    4
            for    2
            governing    2
            href="configuration.xsl"?>    2
            http://www.apache.org/licenses/LICENSE-2.0    2
            implied.    2
            in    6
            is    2
            language    2
            law    2
            limitations    2
            may    4
            not    2
            obtain    2
            of    2
            on    2
            or    4
            overrides    2
            permissions    2
            property    2
            required    2
            site-specific    2
            software    2
            specific    2
            the    14
            this    4
            to    2
            type="text/xsl"    2
            under    6
            use    2
            version="1.0"    2
            with    2
            writing,    2
            you    2
            指定SecondaryNameNode    1
            指定临时数据目录-->    1
            指定保存的副本数    1
            指定垃圾回收-->    1
            这里三台机器所以保存3份    1
            
            
7.集群的时间同步
    * 找一台机器
        时间服务器
    * 所有的机器与这台机器时间进行定时的同步
        比如,每日十分钟,同步一次时间
    
    以www.hadoop1.org为时间服务器
    
    修改/etc/ntp.conf
        
        打开注释
        restrict 192.168.108.0 mask 255.255.255.0 nomodify notrap
        
        注释掉
        #server 0.centos.pool.ntp.org iburst
        #server 1.centos.pool.ntp.org iburst
        #server 2.centos.pool.ntp.org iburst
        #server 3.centos.pool.ntp.org iburst
        
        增加
        server 127.127.1.0         #local clock
        fudge 127.127.1.0 stratum 10
        
    
    修改  /etc/sysconfig/ntpd
        
        SYNC_HWCLOCK=yes

    启动ntpd服务 开机自动启动ntpd服务    
    service ntpd start
    chkconfig ntpd on
    
    
    在另外两台服务器
    crontab -e (必须在root用户)
        0-59/10 * * * * /usr/sbin/ntpdate www.hadoop1.org
    
    /usr/sbin/ntpdate www.hadoop1.org(代表手动同步)
    
    
###############################################################################################################
HA QJM架构

配置QJM要点

    share edits
        JournalNode
        
    NameNode
        Active Standby
        
    Client
        Proxy
    
    Fence
        同一个时刻只能有一台NameNode起作用
        




IP
    192.168.108.135            192.168.108.136            192.168.108.137

主机名
    www.hadoop1.org            www.hadoop2.org            www.hadoop3.org
 
硬件信息
    2G 内存 1CPU            1G 内存 1CPU            1G 内存 1CPU

HDFS:
    NameNode                                        NameNode
    

    DataNode                    DataNode            DataNode

    JournalNode                 JournalNode         JournalNode
                                                   

    
    
配置文件

hdfs
        hadoop-env.sh
            
            
            修改文件的JAVA_HOME环境变量           
            export JAVA_HOME=/opt/app/jdk1.7.0_79
        
        
        core-site.xml
                
                <configuration>
                        <!-- 指定nameservice-->
                        <property>
                            <name>fs.defaultFS</name>
                            <value>hdfs://ns1</value>
                        </property>

                        <!-- 指定临时数据目录-->
                        <property>
                             <name>hadoop.tmp.dir</name>
                             <value>/opt/ha/hadoop-2.5.2/data/tmp</value>
                       </property>
                       <!-- 指定垃圾回收-->
                        <property>
                             <name>fs.trash.interval</name>
                             <value>420</value>
                       </property>


                </configuration>

            
        
        hdfs-site.xml
                
                <configuration>
                        <!-- 指定保存的副本数 这里三台机器所以保存3份 -->
                      <property>
                            <name>dfs.replication</name>
                            <value>3</value>
                      </property>

                      <!-- nameservice-->
                     <property>
                            <name>dfs.nameservices</name>
                            <value>ns1</value>
                     </property>

                    <!-- nameservice namenodes-->
                     <property>
                            <name>dfs.ha.namenodes.ns1</name>
                            <value>nn1,nn2</value>
                     </property>

                    <!-- NameNode rpc address-->
                     <property>
                            <name>dfs.namenode.rpc-address.ns1.nn1</name>
                            <value>www.hadoop1.org:8020</value>
                     </property>
                     <property>
                            <name>dfs.namenode.rpc-address.ns1.nn2</name>
                            <value>www.hadoop3.org:8020</value>
                     </property>

                    <!-- NameNode web address-->
                     <property>
                            <name>dfs.namenode.http-address.ns1.nn1</name>
                            <value>www.hadoop1.org:50070</value>
                     </property>

                     <property>
                            <name>dfs.namenode.http-address.ns1.nn2</name>
                            <value>www.hadoop3.org:50070</value>
                     </property>


                    <!-- share edits JournalNode address -->
                     <property>
                            <name>dfs.namenode.shared.edits.dir</name>
                            <value>qjournal://www.hadoop1.org:8485;www.hadoop2.org:8485;www.hadoop3.org:8485/ns1</value>
                     </property>


                    <!-- journalnode edits dir -->
                    <property>
                           <name>dfs.journalnode.edits.dir</name>
                           <value>/opt/ha/hadoop-2.5.2/data/jn_data</value>
                   </property>

                    <!-- client proxy -->
                    <property>
                          <name>dfs.client.failover.proxy.provider.ns1</name>
                          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                    </property>


                    <!-- namenode  fence method ssh -->
                    <property>
                         <name>dfs.ha.fencing.methods</name>
                         <value>sshfence</value>
                    </property>

                    <property>
                           <name>dfs.ha.fencing.ssh.private-key-files</name>
                           <value>/root/.ssh/id_rsa</value>
                    </property>

                </configuration>



        slaves
                
                <!-- 配置dataNode 和 NodeManager机器  -->
                
                www.hadoop1.org
                www.hadoop2.org
                www.hadoop3.org

                
启动
    1.各个节点启动journalnode
    sbin/hadoop-daemon.sh start journalnode
    
    2. 格式化NameNode
    bin/hdfs namenode -format

    3.启动一台NameNode
    sbin/hadoop-daemon.sh start namenode
    
    4.同步编辑日志文件
    bin/hdfs namenode -bootstrapStandby
    
    5.启动另外一台NameNode
    sbin/hadoop-daemon.sh start namenode
    
    6.启动所有dataNode
    sbin/hadoop-daemon.sh start datanode

    7.将nn1变成激活状态
    bin/hdfs haadmin -transitionToActive nn1

    8.查看nn1状态
    bin/hdfs haadmin -getServiceState nn1

    9 配置故障转移
        hdfs-site.xml 增加

         <property>
           <name>dfs.ha.automatic-failover.enabled</name>
           <value>true</value>
         </property>

        
        core-site.xml增加

         <property>
           <name>ha.zookeeper.quorum</name>
           <value>www.hadoop1.org:2181,www.hadoop2.org:2181,www.hadoop3.org:2181</value>
         </property>

    10
        sbin/stop-dfs.sh
        bin/zkServer.sh satrt
        bin/hdfs zkfc -formatZK
        sbin/start-dfs.sh (sbin/hadoop-daemon.sh start zkfc 这里不用启动)
        

    11.验证
        kill -9 (namenode pid)