• 张贝贝
    2018-11-15
    有个问题,为什么mapper计算完的结果要放到硬盘呢?那再发送到reducer不是还有个读取再发送的过程吗?这中间不就有一个重复的写和读的过程吗?

    作者回复: 是的,主要为了可靠性,spark就不写硬盘,所以快。

    
     46
  • 冬冬
    2018-11-16
    老师您好,有个问题,当某个key聚集了大量数据,shuffle到同一个reduce来汇总,考虑数据量很大的情况,这个会不会把reduce所在机器节点撑爆?这样任务是不是就失败了?

    作者回复: 会的,数据倾斜,会导致任务失败。严重的数据倾斜可能是数据本身的问题,需要做好预处理

    
     41
  • 格非
    2018-11-15
    MapReduce的思想有点类似分而治之,将一个大任务分割成小任务,分发给服务器去处理,然后汇总结果,这是MapReduce的优势,但是MapReduce也就限制在了只能处理这种可以分割的任务上,比如,统计文本中的不同单词的个数,不知道我这种想法是否正确,还想请老师指教,另外,能否分享一下MapReduce这种技术的局限性呢?

    作者回复: 是的,比如MapReduce没法计算斐波那契数列,因为不能分片计算。
    但是大数据场景几乎都是可以分片计算的。

    
     30
  • 清清
    2018-11-22
    老师讲得很好,同学问的问题也很好,有些疑问翻评论区就解决了
    
     15
  • gogo
    2018-11-17
    1.数据从PC/Mobile端发动给服务器端
    2.服务器端收到数据后在分布式集群下会进入到某个Server端,数据经过一系列的业务操作后可能会被记录下来
    3.这些记录下来的数据会以文件形式存放于某个固定位置
    4.数据推送工具可将这些固定位置的文件推送到大数据平台
    5.大数据平台的Map Reduce框架会根据程序应用主动读取数据作为Map/Reduce的数据输入
    6.大数据平台清晰完数据后以文件形式输出
    7.服务器端去大数据平台存放文件的位置获取文件,并进行解析入库。
    8.最终,数据以图形形式展示在报告上。
    展开
     1
     14
  • hunterlodge
    2018-11-19
    老师,您给出的Partitioner的代码所反映的算法不会影响集群的扩展性吗?为什么不是采用一致性哈希算法呢?

    作者回复: 不会,调用partitioner是一个job的任务分配,动态的,结束了就完成了,不存在扩展性问题。

    
     9
  • 桂浩晋
    2018-12-28
    请问JobTracker和之前讲到的NameNode是在同一个服务器上的吗?

    作者回复: 通常不会

    
     7
  • 细小软也会有梦想
    2019-02-15
    shuffle过程中的两次排序。这个很重要吧,需要提一下啊,我就被网易的面试官问过。
    
     6
  • still0007
    2018-11-15
    有一个疑问,之前讲到“移动计算而不是移动数据”,但是在shuffle的过程中,涉及到大量的移动数据,这又是为什么呢?

    作者回复: 移动计算主要是map阶段,reduce阶段数据还是要移动数据合并关联,不然很多计算无法完成

    
     6
  • hua168
    2018-11-15
    实际操作中是不是通过hive去完成MapReduce 的?
    如果有一台机子一直卡在那里,整个job就差它一个返回数据,是不是整个job在等待状态?这种怎么处理?

    作者回复: 如果是SQL操作,就用hive,不用自己编程MapReduce。

    如果机器故障导致某个任务很慢,MapReduce框架会启动多个任务进程在多个服务器同时计算同一个数据块,那个算完输出那个,不会一直等。
    需要一直等的是数据偏移,某个key聚集了太多数据,大量数据shuffle到一个reduce计算,job一直等这个任务。

    
     6
  • slam
    2018-11-15
    想问下,在Hadoop上跑计算任务,在极端异常的条件下(数据机器down,网络隔离,namenode切换),能保证计算要么返回失败要么给出可信的结果吗?背景是这样的,考量在大数据平台上做资金的清算,非程序的错误,计算结果不能有错有漏,在单机db上这个肯定ok,不考虑事务前提下,Hadoop计算是否也毫无问题?可能考量数据一致性、任务状态一致性等方面,我了解太浅,想请教下老师,这种要求绝对计算准确的场景,hadoop目前胜任吗?

    作者回复: 没有问题,一般宕机也能计算完成,MapReduce有容错能力。计算结果不会有问题。

    
     5
  • 三木子
    2018-11-15
    文中第一幅图,map输入 中 0 hello world 12 Byte world ,这里数字代表什么意思了?是map 输入顺序下标吗?

    作者回复: map输入数据在文件中的偏移量

    
     4
  • shawn
    2018-11-19
    JobTracker创建JobInProcess ,JobinPrcess根据分片数目和设置reduce数目创建TaskInprocess。 那么它是如何决定具体在哪些服务器创建 task tracker呢?我觉得需要了解这个过程,才能明白大数据如何分配和使用资源的。 请老师解答下,谢谢!

    作者回复: 所有服务器都启动tasktracker,等待jobtracker分配任务,跟NameNode一样

    
     3
  • hua168
    2018-11-15
    hadoop可以通过实验去练习吧?一般什么配置?官网的说明文档能当扩展阅读吗?选择那个版本?

    作者回复: 可以,普通笔记本就可以,能,最新版

    
     3
  • 老男孩
    2018-11-15
    这个思考题感觉问的很开放,我只能按照我的理解回答一下。不管是手机端还是pc端发起的请求都是http或者https的请求,协议下层(tcp/ip)会根据请求地址建立连接把请求的数据(字节流)传输到服务端对应处理方法中。当然服务端需要对请求的地址url和对应的响应方法做映射。响应方法从request中读取对应的请求数据然后处理,最后把结果通过response返回给用户。响应完成后,不会保留之前的状态数据,但连接不一定就会断开,下次请求的时候就不用再重新建立连接了。
    
     3
  • 星极
    2019-10-05
    请问一下,map和reduce有绝对的先后关系吗,还是说可以一边map一边reduce

    作者回复: 绝对先后关系,一个reduce必须要他前置的所有map执行完才能执行。

    MapReduce框架会在85%的map程序执行完成时,开始启动reduce程序,reduce程序一边shuffle已完成的map数据,一边等待未完成的map继续执行,直到全部map完成,reduce才开始执行计算。

    
     2
  • 落叶飞逝的恋
    2019-03-04
    java程序用于合并mapper和reducer的代码。
    public class WordCountApp {
        public static void main(String[] args) throws Exception {
            //创建配置信息
            Configuration configuration = new Configuration();

            //创建Job
            Job worldCountJob = Job.getInstance(configuration, "WorldCount");

            //设置Job的处理类
            worldCountJob.setJarByClass(WordCountApp.class);

            //设置作业的输入路径
            FileInputFormat.setInputPaths(worldCountJob, new Path(args[0]));

            //设置map相关参数
            worldCountJob.setMapperClass(MyMapper.class);
            worldCountJob.setMapOutputKeyClass(Text.class);
            worldCountJob.setMapOutputValueClass(LongWritable.class);

            //设置reduce相关参数
            worldCountJob.setReducerClass(MyReducer.class);
            worldCountJob.setOutputKeyClass(Text.class);
            worldCountJob.setOutputValueClass(LongWritable.class);

            //设置作业的输出路径
            FileOutputFormat.setOutputPath(worldCountJob, new Path(args[1]));

            System.out.println(worldCountJob.waitForCompletion(true) ? 0 : 1);
        }
    }
    展开
    
     2
  • 杰之7
    2019-02-08
    通过这一节的复习,这节内容主要解决MR的启动和运行,数据的合并和连接机制。在这一节中,涉及到了大数据技术的核心技术,调用JAR包,执行机制中会将HDFS中的数据块联系起来,通过HTTP通信发送给相对应的reduce。这些内容设计到了Java编程,网络通信,Linux多服务器的知识,对这些基础知识的掌握是做数据技术的前提。

    在MR的启动和连接步骤中,首先通过应用程序将JAR包存储在HDFS中供将来服务器执行MR计算。
    应用程序提交Job给JobTrack,JobTrack创建Jobinprocess,Jobinprocess根据数据快和设置reduce数目创建TaskInprocess,这部也就将HDFS和MR关联了起来。TaskTracker与JobTracker通信,分配任务,然后TaskTracker根据任务类型和参数启动相应的Maop或者redece,找到JAR包执行任务。

    上述就完成了作业的启动和运行,对于数据的联合和合并,用到的是Shuffle,通过调用partiton接口,对Map产生的<key,value>分区选择,通过HTTP通过发送给对应的reduce执行。

    通过复习,这一节的内容贯穿了整个大数据技术的核心,涉及到了计算机的JAR,HTTP,Linux, 数据库的joinw,HDFS和MR的主从架构模式,值得我多次重复复习。
    展开
    
     2
  • 落叶飞逝的恋
    2018-11-16
    思考题:以百度搜索关键词为例:
    1.用户端与服务端三次握手
    2.服务端返回相关网页
    3.用户浏览器接受响应结果
    
     2
  • 滴答
    2018-11-15
    map进程快要计算完成的时候将执行分区并发送给reduce进程进行排序和合并,那请问老师map完全计算完成的时候是会再次发送给reduce然后reduce再做排序合并计算吗?那这两部分的排序如何保证整体排序,如果是reduce之后再排序的话那之前排序会不会不需要?

    作者回复: 所谓的快完成是指很多个map进程已经完成,一小部分map进程还没完成,这个时候启动shuffle,将完成的map输出发送给reduce,直到所有map都完成

    
     2
我们在线,来聊聊吧