zoukankan      html  css  js  c++  java
  • 大数据面试题

    1、介绍一下Hadoop的框架

    存储hdfs,计算框架MapReduce,资源管理Yarn

    2、简单说下HDFS的读写流程

    a、客户端发送请求,调用DistributedFileSystem API的open方法发送请求到Namenode,获取block的位置信息,因为真正的block是存在Datanode节点上的,而

      namenode里存放block位置信息的元数据。

    b、Namenode返回所有block的位置信息,并将这些信息返回给客户端。

    c、客户端拿到block的位置信息后调用FSDataInputStream  API的read方法并行的读取block信息,block默认是3个副本,所以每个block只需要取一个副本就可以了。

    d、datanode返回给客户端。

    3、介绍下HDFS中实现数据容错的方式/机制

    a、每个数据块3个副本,分布在不同的机架上

    b、DataNode定期向NameNode发送心跳

    4、介绍一下Yarn的框架结构

    a、ResourceManager:负责整个集群的资源管理和调度

    b、ApplicationMaster:负责应用程序相关事务,比如任务调度、监控和容错等。

    5、介绍一下Yarn框架中的Job调度方式

    6、说明一下MapReduce的框架结构

    一个完整的mapreduce程序在分布式运行时有三类实例

    a、MRAppMaster:负责整个程序的过程调度及状态协调

    b、mapTask:负责map阶段的整个数据处理流程

    c、ReduceTask:负责reduce阶段的整个数据处理流程。

    7、简单说明一下MapReduce中的Shuffle过程

    8、MapReduce的容错机制是如何实现的

    9、MapReduce的二次排序机制是什么?

    10、HDFS启动流程

    第一步:启动namenode;

    第二步:启动datanode;

    11、MapReduce的生命周期/MapReduce的提交执行流程

    MapReduce的提交执行流程

    a、作业提交

    client调用Job.waitForCompletion方法,向整个集群提交MapReduce作业(第1步)。新的作业ID(应用ID)由资源管理分配(第2步)。作业的client核实作业的输出,计算输入的split,将作业的资源(包括Jar包,配置文件,split信息)拷贝给HDFS(第3步)。最后,通过调用资源管理器的YarnClient.submitApplication()提交作业(第4步)

    b、作业初始化

    当资源管理器收到submitApplication()的请求时,就将该请求发给调度器(scheduler),调度器分配container,然后资源管理器在该container内启动应用管理器进程,由节点管理器监控(第5a和5b步)

    MapReduce作业的应用管理器是一个主类为MRAppMaster的Java应用,其通过创造一些bookkeeping对象监控作业的进度,得到任务的进度和完成报告(第6步),然后其通过分布式文件系统得到由客户端计算好的输入split(第7步),然后为每个输入split创建一个map任务,根据mapreduce,job.reduces创建reduce任务对象。

    c、任务分配

    如果作业很小,应用管理器会选择在其自己的JVM中运行任务

    如果不是小作业,那么应用管理器向资源管理器请求container来运行所有的map和reduce任务(第8步)。这些请求时通过心跳来传输的,包括每个map任务的数据位置,比如存放输入split的主机名和机架(rask),

    d、任务运行

    当一个任务由资源管理器的调度器分配给一个container后,应用管理器通过联系节点管理器来启动container(第9a步和9b步)。任务由一个主类为YarnChild的Java应用执行,在运行任务之前首先本地化任务需要的资源,比如作业配置,JAR文件,以及分布式缓存的所有文件(第10步)。最后,运行map或reduce任务(第11步)

    YarnChild运行在一个专用的JVM中,但是YARN不支持JVM重用。

    e、进度和状态更新

    YARN中的任务将其进度和状态(包括counter)返回给应用管理器,客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。 

    f、作业完成

     除了向应用管理器请求作业进度外,客户端每5分钟都会通过调用waitForCompletion()方法来检查作业是否完成,时间间隔可以通过mapreduce.client.completion.pollinterval来设置. 作业完成之后, 应用管理器和container会清理工作状态, OutputCommiter的作业清理方法也会被调用. 作业的信息会被作业历史服务器存储以备之后用户核查。

  • 相关阅读:
    性能调优利器之strace
    如何写出优雅的Python(二)
    c# 模拟 网页实现12306登陆、自动刷票、自动抢票完全篇
    使用Javascript无限添加QQ好友原理解析
    微信公众账号开发之微信登陆Oauth授权-第一篇
    WPF下的仿QQ图片查看器
    不用写软件,纯JS 实现QQ空间自动点赞
    软件分层架构下的另类设计框架-工厂模式的使用
    Javascript实现Linq查询方式
    c# 使用正则表达式 提取章节小说正文全本篇
  • 原文地址:https://www.cnblogs.com/zk753159/p/9690668.html
Copyright © 2011-2022 走看看