zoukankan      html  css  js  c++  java
  • hadoop(学习)

                                                                                hadoop

    Hadoop是一个用于海量数据统计分析的分布式计算框架,封装了分布式计算中比较困难的进程间通信、负载均衡,任务调度等模块,降低了学习门槛。在最简单的程序实现中,仅仅需要重写mapreduce方法,并实现任务提交逻辑。接下来,就让我们一起推开Hadoop的大门,走进大数据的神奇世界。

    Hadoop的组成

    Hadoop目前主要包括Hadoop1.xhadoop2.x,两种版本差距较大,目前常用的是Hadoop2.x版本,所以主要基于Hadoop2.x进行讲解

    主要组成模块

    Hadoop Distributed File SystemHDFS):分布式文件存储系统。

    MapReduce:并行计算框架(可以自定义计算逻辑的部分)

    Yet Another Resource NegotiatorYARN):另一种资源协调者(顾名思义,Hadoop1.x采用的不是这一个资源管理器)

    MapReduce的工作机制

    上图是MapReduce的工作原理,首先解释一下各个组成模块的作用。

    Job:由客户端向集群提交的一次计算任务。

    Task:集群的最小可执行单位(一个Job将会分为多个Task执行)

    ResourceManager(以下简称RM):管理整个集群的计算资源,主要用于为每一个Job分配计算资源(整个集群只有一个RM

    Container:资源分配单位,一个Container包括一些CPU和存储资源

    NodeManager(以下简称NM):管理单台服务器的计算资源,类似RM的更细粒度实现(集群中每台服务器有一个NM)。

    ApplicationMaster(以下简称AM):监控每一个Job的执行情况,包括资源申请、Task调度等。

    为了便于理解,下面有一个并不是太恰当的比喻。类似一个学生宿舍的构成,RM相当于宿舍管理处的大BOSS,而Task则相当于一个学生,大BOSSRM)负责分配一片区域给某个班(Job)的学生(Task)住,而具体每个学生(Task)住哪儿,则由班主任(AM)和楼管(NM)商量(当然一个班级的学生还是可以住在多个楼里边的)。

    接下来具体解释图中每一步的作用:

    client调用Job提交接口,Job被提交到集群上

    为了便于标识Job,会首先向RM请求一个唯一ID,并同时检查Job中的输入/输出路径是否存在,如果输入路径不存在,则报错;如果输出路径存在,也会报错(注意别看错了)

    获得唯一ID之后,就把Job所需资源(包括Jar包和输入路径信息)上传到HDFS中(因为分布式环境的原因,需要将这些资源上传到所有节点都能访问到的目录,即这里的HDFS

    在完成以上步骤之后,则可以真正提交Job到集群中。

    启动一个Job的时候,首先需要启动该JobAM,所以RM会主动分配NM上的一个Container(一个Container就是一个JVM),用于运行AM守护进程。

    初始化Job,包括启动一些Job运行状态跟踪对象。

    HDFS中读取第3步上传的输入路径信息(包括输入文件所在的服务器节点信息,一份输入文件可能存储在多台服务器上)。

    根据上一步的文件路径信息,向RM申请所需资源(Container),尽量保证Container和输入文件在同一台服务器上边,能够减小网络IO(即数据本地化)

    AM根据RM分配的Container,向Container所属的NM申请启动Task

    Container在收到启动命令之后,会首先从HDFS下载Task所需Jar包和缓存文件等

    最后就是Task的正式运行阶段了。

    one

    1)安装java

    [root@redhat 脚本]# yum -y install java-1.8.0-openjdk-devel

    [root@hadoop ~]# java -version

    1)解压hadoop

    [root@hadoop ~]# tar xf  hadoop-2.7.6.tar.gz

    [root@hadoop ~]#mv hadoop-2.7.6  /usr/local/hadoop

    [root@hadoop ~]#vim  /usr/local/hadoop/etc/hadoop/

    1)免密码登入

    Ssh-keygen -t rsa -b 2048 -N ‘’

    for i in nn01 node{1..3}:do

      Ssh-copy-id -i id_rsa $i

    none

    2)禁止远程输入yes

    [root@node31 .ssh]# vim  /etc/ssh/ssh_config

    .....

    Host *

            GSSAPIAuthentication no

            StrictHostKeyChecking no

    [root@node31 .ssh]# systemctl restart sshd

    mv hadoop-2.7.6 /usr/local/hadoop

    [root@hadoop ~]#cd /usr/local/hadoop/

    [root@hadoop ~]#cd etc/hadoop/

    [root@node31 hadoop]# vim hadoop-env.sh

    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre

    ......

     export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

    [root@node31 hadoop]# vim core-site.xml

    <configuration>

      <property>

       <name>fs.defaultFS</name>

       <value>hdfs://node31:9000</value>

     </property>

      <property>

       <name>hadoop.tmp.dir</name>

       <value>/var/hadoop</value>

      </property>

    </configuration>

    [root@node31 hadoop]#vim slaves

    node32

    node33

    node34

    [root@node31 hadoop]#vim /etc/hosts

    192.168.1.31 node31

    192.168.1.32 node32

    192.168.1.33 node33

    192.168.1.34 node34

    [root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp /etc/hosts

    ${i}:/etc/hosts;done

    [root@node31 hadoop]#mkdir input

    [root@node31 hadoop]#cp *.txt input/

    [root@node31 hadoop]#bin/hadoop  jar

    share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount

    input output

    [root@node31 hadoop]#cd output/

    [root@node31 hadoop]#cat part-r-00000

    [root@node31 hadoop]# wait

    [root@node31 hadoop]#cd ..

    [root@node31 hadoop]#vim hdfs-site.xml

    <configuration>

      <property>

       <name>dfs.namenode.http-address</name>

       <value>node31:50070</value>

       <description> ml </description>

     </property>

      <property>

       <name>dfs.namenode.secondary.http-address</name>

       <value>node31:50090</value>

     </property>

      <property>

       <name>dfs.replication</name>

       <value>2</value>

     </property>

    </configuration>

    [root@node31hadoop]# for i in node{31..34};do mkdir /var/hadoop/;done  [root@node31 hadoop]# cd /usr/local/hadoop/etc/hadoop/

    [root@node31 hadoop]# for i in node{31..34};do rsync -aSH --delete

    /usr/local/hadoop ${i}:/usr/local/ -e 'ssh' & done

    [root@node31 hadoop]# vim core-site.xml

    [root@node31 hadoop]# cd etc/hadoop/

    [root@node31 hadoop]# vim core-site.xml

    [root@node31 hadoop]# vim hdfs-site.xml

     [root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r

    /usr/local/hadoop/  $i:/usr/local/; done

    [root@node31 hadoop]#./bin/hdfs namenode -format

    [root@node31 hadoop]# ./sbin/start-dfs.sh

    [root@node31 hadoop]# jps

    [root@node31 hadoop]# ./bin/hdfs dfsadmin -report

    two

    [root@node31 hadoop]# vim yarn-site.xml

    <configuration>

    <property>

    <name>yarn.resourcemanager.hostname</name>

    <value>node31</value>

    </property>

    <!-- Site specific YARN configuration properties -->

    <property>

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

    <value>mapreduce_shuffle</value>

    </property>

    </configuration>

    [root@node31 hadoop]# vim mapred-site.xml

    <configuration>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    </configuration>

    [root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r mapred-site.xml  $i:/usr/local/hadoop/etc/hadoop/; done

    [root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r yarn-site.xml  $i:/usr/local/hadoop/etc/hadoop/; done

    [root@node31 hadoop]# ./sbin/start-yarn.sh

    [root@node31 hadoop]# ./bin/yarn node -list

    18/07/09 11:24:18 INFO client.RMProxy: Connecting to ResourceManager at node31/192.168.1.31:8032

    Total Nodes:3

             Node-Id      Node-State Node-Http-Address Number-of-Running-Containers

    node32:46048         RUNNING       node32:8042     0                

        node34:42782         RUNNING       node34:8042     0                    

        node33:35031         RUNNING       node33:8042     0               

    http://192.168.1.31:50070/       http://192.168.1.31:50090/

    http://192.168.1.32:8042/        http://192.168.1.32:50075

    http://192.168.1.31:8088/

    Hadoop 验证

    • 创建文件夹

    ./bin/hadoop fs mkdir /input

    • 导入要分析的文件

    ./bin/hadoop fs put *.txt /input

    Hadoop 验证

    • 提交分析作业

    ./bin/hadoop

    jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar

    wordcount /input

    /output

    • 查看结果

    ./bin/hadoop fs cat output/*

  • 相关阅读:
    HDOJ 1207 汉诺塔II
    [转]写代码的小女孩
    POJ Subway tree systems
    HDOJ 3555 Bomb (数位DP)
    POJ 1636 Prison rearrangement (DP)
    POJ 1015 Jury Compromise (DP)
    UVA 10003
    UVA 103 Stacking Boxes
    HDOJ 3530 Subsequence
    第三百六十二、三天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/qingbai/p/11958443.html
Copyright © 2011-2022 走看看