hadoop

作者: felix521 | 来源:发表于2018-11-20 12:28 被阅读0次

    hadoop

    特性有点:扩容能力强、成本低、高效率、可靠性

    1. 集群搭建

    HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群
    1.1 服务器准备
    1.2 网络环境准备(采用net方式)
    1.3 服务器系统设置
    - 同步时间
    date -s "2018.01.01"或者ntpdate cn.pool.ntp.org
    - 设置主机名
    vi /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=node-1
    - 配置ip.主机名映射
    vi /etc/hosts
    192.168.35.121 node-1
    ..........
    ..........
    - 配置ssh免密登录
    ssh-keygen -t rsa (四个回车)
    拷贝公钥到要免密登录的机器
    ssh-copy-id node-2
    - 配置防火墙
    #查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off
    1.4 JDK环境安装
    1.5 上传Hadoop安装包
    1.6 修改配置文件
    1.6.1 hadoop-env.sh 指定jdk安装目录
    1.6.2 core-site.xml指定文件系统,临时目录
    1.6.3 hdfs-site.xml指定hdfs副本数,namenode所在主机IP和端口
    1.6.4 mapred-site.xml是MapReduce核心,指定mr运行时框架,一般指定yarn上。默认是local
    1.6.5 yarn-site.xml 指定yarn的resourcemanage的地址
    1.6.6 slaves文件,集群主机名
    1.7 hadoop环境变量
    编辑环境变量的配置文件:
    vi /etc/profile
    export JAVA_HOME= /root/apps/jdk1.8.0_65
    export HADOOP_HOME= /root/apps/hadoop-2.7.4
    export PATH=PATH:JAVA_HOME/bin:HADOOP_HOME/bin:HADOOP_HOME/sbin
    保存配置文件,刷新配置文件:
    source /etc/profile

    2. 启动集群

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

    3、 MapReduce执行过程

    2.MapReduce的处理流程解析
    2.1.Mapper任务执行过程详解
    第一阶段是把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认情况下,Split size = Block size。每一个切片由一个MapTask处理。(getSplits)
    第二阶段是对切片中的数据按照一定的规则解析成<key,value>对。默认规则是把每一行文本内容解析成键值对。key是每一行的起始位置(单位是字节),value是本行的文本内容。(TextInputFormat)
    第三阶段是调用Mapper类中的map方法。上阶段中每解析出来的一个<k,v>,调用一次map方法。每次调用map方法会输出零个或多个键值对。
    第四阶段是按照一定的规则对第三阶段输出的键值对进行分区。默认是只有一个区。分区的数量就是Reducer任务运行的数量。默认只有一个Reducer任务。
    第五阶段是对每个分区中的键值对进行排序。首先,按照键进行排序,对于键相同的键值对,按照值进行排序。比如三个键值对<2,2>、<1,3>、<2,1>,键和值分别是整数。那么排序后的结果是<1,3>、<2,1>、<2,2>。如果有第六阶段,那么进入第六阶段;如果没有,直接输出到文件中。
    第六阶段是对数据进行局部聚合处理,也就是combiner处理。键相等的键值对会调用一次reduce方法。经过这一阶段,数据量会减少。本阶段默认是没有的。

    2.2.Reducer任务执行过程详解
    第一阶段是Reducer任务会主动从Mapper任务复制其输出的键值对。Mapper任务可能会有很多,因此Reducer会复制多个Mapper的输出。
    第二阶段是把复制到Reducer本地数据,全部进行合并,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
    第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对。最后把这些输出的键值对写入到HDFS文件中。
    在整个MapReduce程序的开发过程中,我们最大的工作量是覆盖map函数和覆盖reduce函数。

    workcount

    public class WordCountMapper extendsn Mapper<LongWritable,Text,Text,IntWritable>{
    @Override
    protected void map (LongWritable key,Text value, Context context) throws exception{
    String line = value.toString();
    String[] words = line.split(" ");
    for (String word : words){
    context.write(new Text(word),new IntWritable(1));
    }
    }
    }```
    Reduce阶段
    @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            //定义一个计数器
            int count = 0;
            //遍历这一组kv的所有v,累加到count中
            for(IntWritable value:values){
                count += value.get();
            }
            context.write(key, new IntWritable(count));
        }
    }

    相关文章

      网友评论

          本文标题:hadoop

          本文链接:https://www.haomeiwen.com/subject/cdqtfqtx.html