ITPub博客

首页 > 应用开发 > IT综合 > 技术干货:Hadoop面试题及答案

技术干货:Hadoop面试题及答案

IT综合 作者:陕西优就业 时间:2020-01-20 09:51:58 0 删除 编辑

  推荐阅读:

【技术干货】 http://blog.itpub.net/69902581/viewspace-2672371/ 


       一、什么是Hadoop?

  Hadoop是一个开源软件框架,用于存储大量数据,并发处理/查询在具有多个商用硬件(即低成本硬件)节点的集群上的那些数据。总之,Hadoop包括以下内容:

  HDFS(Hadoop Distributed File System,Hadoop分布式文件系统):HDFS允许你以一种分布式和冗余的方式存储大量数据。例如,1 GB(即1024 MB)文本文件可以拆分为16 * 128MB文件,并存储在Hadoop集群中的8个不同节点上。每个分裂可以复制3次,以实现容错,以便如果1个节点故障的话,也有备份。HDFS适用于顺序的“一次写入、多次读取”的类型访问。

  MapReduce:一个计算框架。它以分布式和并行的方式处理大量的数据。当你对所有年龄> 18的用户在上述1 GB文件上执行查询时,将会有“8个映射”函数并行运行,以在其128 MB拆分文件中提取年龄> 18的用户,然后“reduce”函数将运行以将所有单独的输出组合成单个最终结果。

  YARN(Yet Another Resource Nagotiator,又一资源定位器):用于作业调度和集群资源管理的框架。

  Hadoop生态系统,拥有15多种框架和工具,如Sqoop,Flume,Kafka,Pig,Hive,Spark,Impala等,以便将数据摄入HDFS,在HDFS中转移数据(即变换,丰富,聚合等),并查询来自HDFS的数据用于商业智能和分析。

  某些工具(如Pig和Hive)是MapReduce上的抽象层,而Spark和Impala等其他工具则是来自MapReduce的改进架构/设计,用于显著提高的延迟以支持近实时(即NRT)和实时处理。


 

 二、基于Hadoop的数据中心的好处是什么?

  随着数据量和复杂性的增加,提高了整体SLA(即服务水平协议)。例如,“Shared Nothing”架构,并行处理,内存密集型处理框架,如Spark和Impala,以及YARN容量调度程序中的资源抢占。

  1、缩放数据仓库可能会很昂贵:添加额外的高端硬件容量以及获取数据仓库工具的许可证可能会显著增加成本。基于Hadoop的解决方案不仅在商品硬件节点和开源工具方面更便宜,而且还可以通过将数据转换卸载到Hadoop工具(如Spark和Impala)来补足数据仓库解决方案,从而更高效地并行处理大数据。这也将释放数据仓库资源。

  2、探索新的渠道和线索:Hadoop可以为数据科学家提供探索性的沙盒,以从社交媒体,日志文件,电子邮件等地方发现潜在的有价值的数据,这些数据通常在数据仓库中不可得。

  3、更好的灵活性:通常业务需求的改变,也需要对架构和报告进行更改。基于Hadoop的解决方案不仅可以灵活地处理不断发展的模式,还可以处理来自不同来源,如社交媒体,应用程序日志文件,image,PDF和文档文件的半结构化和非结构化数据。

  四、简单描述如何安装配置一个apache开源版hadoop,只描述即可,无需列出完整步骤,能列出步骤更好。

  1、安装JDK并配置环境变量(/etc/profile);

  2、关闭防火墙;

  3、配置hosts文件,方便hadoop通过主机名访问(/etc/hosts);

  4、设置ssh免密码登录;

  5、解压缩hadoop安装包,并配置环境变量;

  6、修改配置文件($HADOOP_HOME/conf);hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml;

  7、格式化hdfs文件系统(hadoop namenode -format);

  8、启动hadoop($HADOOP_HOME/bin/start-all.sh);

  9、使用jps查看进程。

  五、请列出正常工作的hadoop集群中hadoop都分别需要启动那些进程,他们的作用分别是什么,尽可能写的全面些。

  1、NameNode: HDFS的守护进程,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理。

  2、Secondary NameNode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。

  3、DataNode:负责把HDFS数据块读写到本地的文件系统。

  4、JobTracker:负责分配task,并监控所有运行的task。

  5、TaskTracker:负责执行具体的task,并与JobTracker进行交互。

  六、请列出你所知道的hadoop调度器,并简要说明其工作方法

  比较流行的三种调度器有:默认调度器FIFO,计算能力调度器Capacity Scheduler,公平调度器Fair Scheduler

  1、默认调度器FIFO:hadoop中默认的调度器,采用先进先出的原则。

  2、计算能力调度器Capacity Scheduler:选择占用资源小,优先级高的先执行。

  3、公平调度器Fair Scheduler:同一队列中的作业公平共享队列中所有资源。

  七、Hive有那些方式保存元数据的,各有那些特点。

  1、内存数据库derby,较小,不常用;

  2、本地mysql,较常用;

  3、远程mysql,不常用。

  八、简述hadoop实现Join的几种方法。

  1、reduce side join

  reduce side join是一种最简单的join方式,其主要思想如下:

  在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。

  在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。

  2、map side join

  之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。

  Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。

  为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:

  (1)用户使用静态方法

  DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:hdfs://namenode:9000/home/XXX/file,其中9000是自己配置的NameNode端口号)。

  JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。

  (2)用户使用

  DistributedCache.getLocalCacheFiles()方法获取文件目录,并使用标准的文件读写API读取相应的文件。

  3、SemiJoin

  SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。

  实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。

  4、reduce side join + BloomFilter

  在某些情况下,SemiJoin抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。

  BloomFilter最常见的作用是:判断某个元素是否在一个集合里面。它最重要的两个方法是:add() 和contains()。最大的特点是不会存在false negative,即:如果contains()返回false,则该元素一定不在集合中,但会存在一定的true negative,即:如果contains()返回true,则该元素可能在集合中。

  因而可将小表中的key保存到BloomFilter中,在map阶段过滤大表,可能有一些不在小表中的记录没有过滤掉(但是在小表中的记录一定不会过滤掉),这没关系,只不过增加了少量的网络IO而已。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69902581/viewspace-2674068/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
我要做IT大佬 请叫我大佬

注册时间:2018-12-13

  • 博文量
    157
  • 访问量
    172380