前言


Hadoop是一个由Apache基金会所开发的开源分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储。简单来说,Hadoop就是一个能够对大量数据进行分布式处理的软件框架。以一种可靠、高效、可伸缩的方式进行数据处理,主要包括三部分内容:HDFS,MapReduce 和 Yarn。


提示:以下是一篇满满的干货哦,喜欢就赞一下吧!

一、不可不知的基础知识

  • HDFS读写流程
    一. HDFS读数据流程
  • hadoop 实现可视化 hadoop数据展示_hadoop 实现可视化

  • 1.客户端给Namenode发起文件下载请求
    2.NameNode返回文件存储所在的DataNode block块信息。
    3.客户端根据拿到的block信息与距离最近的切片所在DataNode建立通信通道,获取文件切片。
    4.DataNode将该节点上的切片信息传输给客户端。
    5.如果没有获取到所有的切片信息,再与距离最近其他切片副本所在的DataNode建立通信通道,获取该节点的切片。如此重复,直到获取到所有的切片信息。
    6.客户端拿到所有切片后,将切片组装为完整的文件。
    二. HDFS写数据流程
  • hadoop 实现可视化 hadoop数据展示_hadoop_02

  • 1.客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在;
    2.NameNode 返回是否可以上传;
    3.客户端请求NameNode,获取第一个 Block 上传到哪几个 DataNode 服务器上;
    4.NameNode 返回3个 DataNode 节点, 分别为 dn1, dn2, dn3;
    5.客户端通过 FSDataOutputStream 模块请求 dn1 上传数据, dn1 收到请求会继续调用 dn2, 然后 dn2 调用 dn3,将这个通信管道建立完成;
    6.dn1, dn2, dn3 逐级应答客户端;
    7.客户端开始往 dn1 上传第一个 Block (先从磁盘读取数据放到一个本地内存缓存), 以 Packet 为单位, dn1 收到一个 Packet 就会传给 dn2, dn2 传给 dn3;dn1 每传一个 packet 会放入一个应答队列等待应答;
    8.当一个 Block 传输完成之后,客户端再次请求 NameNode 上传第二个 Block 的服务器(重复执行 3-7 步)

二、关于常见Hadoop集群,MapReduce,Pig,Hive,HDFS的问题和答案

1.关于Hadoop的HDFS的问题

  1. 列出Hadoop集群的Hadoop守护进程和相关的角色
    Namenode:它运行上Master节点上,负责存储的文件和目录所有元数据。它管理文件的块信息,以及块在集群中分布的信息。
    Datanode:它是一个存储实际数据的Slave节点。它定时向Namenode发送本节点上块的信息。
    Secondary Namenode:它会定期通过Editlog合并NameNode的变化,从而它r的日志不会过大。它可以在NameNode的故障的情况下做为副本使用。
    JobTracker:这是运行在Namenode上,负责提交和跟踪MapReduce Job的守护程序。它会向Tasktracker分配的任务。
    TaskTracker:这是Datanode上运行的守护进程。它在Slave节点上负责具体任务的运行。
    ResourceManager的(Hadoop的2.X):它负责YARN上运行的资源和调度。
    NodeManager(Hadoop的2.X):它可以运行在Slave节点,并负责启动应用程序的容器,监测他们的资源使用情况(CPU,内存,磁盘,网络),并报告这些到ResourceManager。
    JobHistoryServer(Hadoop的2.X):它维护有关的MapReduce工作中的应用终止后的信息。
  2. 项目所需要的大数据工作的一些Hadoop的工具
    Hive,HBase,Ambari等等。有很多的Hadoop工具的大数据。要了解更多关于这些工具,请访问大数据对基本的Hadoop工具的Edureka博客:http://www.edureka.co/blog/essential-hadoop-tools-for-big-data
  3. 列出的Hadoop 1和Hadoop 2之间的差异
    在Hadoop的1.x中,“Namenode”有单点问题。在Hadoop的2.x中,我们有主动和被动“Namenodes”。如果主动“的Namenode”失败,则被动“的Namenode”负责。正因为如此,高可用性可以Hadoop中2.x中来实现。
    此外,在Hadoop的2.X,YARN提供了一个中央资源管理器。通过YARN,你现在可以在Hadoop中运行多个应用程序,共享公共资源。 MR2是一种特殊类型的运行于YARN MapReduce框架之上的分布式应用。其他工具也可以通过YARN执行数据处理。
  4. 什么是主动和被动的“Namenodes”?
    在Hadoop的2.x中,我们有两个Namenodes-主动“Namenode” 被动“Namenode”。主动“Namenode”是在集群中运行的Namenode。被动“的Namenode”是一个备用“的Namenode”,里面有主动“的Namenode”的数据。当主动“Namenode”失败,则被动“Namenode”集群中替换主动“Namenode”。因此,集群是从来不会没有“Namenode”,所以它永远不会失败。
  5. 怎样才能删除或Hadoop集群添加节点?
    其中一个Hadoop框架的最吸引人的特点是硬件的利用率。然而,这导致了Hadoop集群频繁“DataNode”崩溃。 Hadoop框架的另一个显着特点是,根据对数据量的快速增长便于进行规模扩展。由于这两个原因,在Hadoop管理员最常见的任务之一是在Hadoop集群,委托(添加)和停用(删除)“数据节点”。
    阅读这篇博客Edureka获得在调试和退役节点详细了解在Hadoop集群:http://www.edureka.co/blog/commissioning-and-decommissioning-nodes-in-a-hadoop-cluster/
  6. HDFS只支持独占写入
    当第一个客户端连接“Namenode”打开文件进行写入时,“Namenode”授予租约的客户端创建这个文件。当第二个客户端试图打开同一个文件写入时,“Namenode”会注意到该文件的租约已经授予给另一个客户端,并拒绝第二个客户端打开请求
  7. 如何在HDFS定义“block”?Hadoop1和2中Hadoop块大小是多少?是否可以改变?
    “块”是可被读取或写入的数据的最小量。 HDFS中的文件被分解成块大小的块,它们被存储作为独立的单元。
    Hadoop的1默认块大小:64 MB
    Hadoop的2默认块大小:128 MB
    是,块可以被配置。该dfs.block.size参数可在HDFS-site.xml文件被用来设置一个块的大小。
  8. 为什么Hadoop适用于大型数据集的应用程序,而不是具有大量的小文件的应用程序?
    相较于在多个分布数据量小的文件 ,HDFS更适合在一个文件中具有大量的数据集。这是因为“Namenode”是非常昂贵的,高性能的系统中,它是不慎重的占据“Namenode”通过了为多个小文件生成的元数据的不必要量的空间。因此,当在一个单独文件中的大量的数据,“Namenode”将占据更少的空间。因此,为获得最佳的性能,HDFS支持大数据集,而不是多个小文件。
  9. 什么是传统的关系型数据库和Hadoop之间的基本区别?
    传统的RDBMS是用于交易系统报告和存档数据,而Hadoop是存储和处理的分布式文件系统的海量数据的方法。当你想寻求大数据的一个记录RDBMS将是有益的。因此,当你在一次存储很大的文件并随后进行分析,Hadoop将是有益的。
  10. HDFS索引过程。
    Hadoop的有它自己的索引数据的方式。取决于块大小,HDFS将继续存储数据的最后部分。它还会告诉你数据的下一部分的位置。
  11. 什么是“speculative running”在Hadoop中?
    如果一个节点出现运行一个任务较慢,主节点可以冗余另一个节点上执行同一任务的另一实例。这里,它第一个完成任务的将被接受,而另一个被杀死。这个过程被称为“speculative running”。
  12. 为什么在HDFS,“读”是并行的,但“写”不是?
    使用的MapReduce程序,该文件可以通过分割成块被读取。不过,写入时MapReduce并行 不能适用。
  13. 什么是“全分布式”模式的特点是什么?
    “全分布式”模式,在生产环境中使用,在那里我们有形成Hadoop集群的机器’N’号。 Hadoop守护进程在计算机集群上运行。有一些“的Namenode”运行一台主机,另一台主机上“Datanode”运行,然后有一些“TaskTracker /NodeManager”运行的机器。我们有独立的主机和从机在这种分布的。
  14. Hadoop可以运行在三种模式
    在其中的Hadoop可以运行三种模式为:
    1.独立(本地)模式
    2.伪分布式模式
    3.完全分布式模式

2.关于Hadoop的MapReduce的问题

  1. 什么是“MapReduce”?
    它是一个框架或用于通过使用分布式编程的计算机的集群处理大型数据集的编程模型。
  2. 如何调试Hadoop的代码?
    有许多方法来调试Hadoop的代码,但最普遍的方法是:
    使用计数器。
    利用Hadoop框架所提供的Web界面。
  3. “MapReduce的”计划的主要配置参数?
    在“MapReduce的”架构,用户需要指定这些参数:
    在分布式文件系统作业的输入位置
    在分布式文件系统作业的输出位置
    输入格式
    输出格式
    包含“map”功能类
    包含“reduce”功能类
  4. 什么是“MapReduce的”默认的输入类型/格式?
    默认情况下,MapReduce的类型输入类型是“文本”。
  5. Hadoop中“RecordReader”的目的是什么?
    在“InputSplit”定义工作片,但并没有描述如何访问它的“RecordReader”级从其源加载数据,并将其转换成适合于“mapper”读的(键,值)对。“RecordReader”实例是由“输入格式”中定义。
  6. 在“MapReduce框架”解释“分布式缓存”
    “分布式缓存”,是由“MapReduce框架”提供了一个重要特征。当你想在Hadoop集群共享跨多个节点的文件,“分布式缓存”便会被用到。这些文件可以以可执行的“jar”文件或简单的“属性”文件驻留。
  7. “Hadoop框架”提供应用程序的运行时同步在“分配缓存”所做的更改时采取什么样的策略?
    这是一个棘手的问题。不存在这样的机制。 “分布式缓存”的设计是在作业执行时间“只读”。
  8. “reducer”之间如何互相沟通?
    在“MapReduce的”编程模型不允许“reducer”相互沟通。加入数据是Hadoop的最有吸引力的方面之一。
  9. 什么是一个“MapReduce的分区”?
    “MapReduce的分区”可以确保同一个key的所有值去到同一个“reducer”,从而允许“reducer”对应的map输出的平均分布。它通过确定哪个“reducer”是负责该特定键从而把map输出重定向给reducer。
  10. 什么是“combiner”?
    “combiner”是一个小型的“reducer”,执行本地的“reduce”任务。它接收从一个特定的“节点”上的map输入并把输出发送到“reducer”。通过减少所需发送到reducer的数据量增强“MapReduce的”效率。
  11. 关于“SequenceFileInputFormat”
    “SequenceFileInputFormat”是序列文件内读取输入格式。键和值是用户定义的。它是被一个“MapReduce的”作业的输出之间传递数据到一些其他的“MapReduce的”作业的输入优化的特定压缩二进制文件格式。