




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Hadoop面试题目及答案(附目录)选择题1.下面哪个程序负责 HDFS 数据存储。a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker答案 C datanode2. HDfS 中的 block 默认保存几份?a)3 份 b)2 份 c)1 份 d)不确定答案 A 默认 3 份3.下列哪个程序通常与 NameNode 在一个节点启动?a)SecondaryNameNode b)DataNode c)TaskTracker d)Jobtracker答案 D分析:hadoop 的集群是基于 master/slave 模式,namenode 和 jobtracker 属于 master,datanode 和tasktracker 属于 slave,master 只有一个,而 slave 有多个SecondaryNameNode 内存需求和 NameNode 在一个数量级上,所以通常 secondaryNameNode(运行在单独的物理机器上)和 NameNode 运行在不同的机器上。JobTracker 和 TaskTrackerJobTracker 对应于 NameNode,TaskTracker 对应于 DataNode,DataNode 和 NameNode 是针对数据存放来而言的,JobTracker 和 TaskTracker 是对于 MapReduce 执行而言的。mapreduce 中几个主要概念,mapreduce 整体上可以分为这么几条执行线索:jobclient,JobTracker 与 TaskTracker。1、JobClient 会在用户端通过 JobClient 类将应用已经配置参数打包成 jar 文件存储到 hdfs,并把路径提交到 Jobtracker,然后由 JobTracker 创建每一个 Task(即 MapTask 和ReduceTask)并将它们分发到各个 TaskTracker 服务中去执行。2、JobTracker 是一个 master 服务,软件启动之后 JobTracker 接收 Job,负责调度 Job 的每一个子任务 task 运行于 TaskTracker 上,并监控它们,如果发现有失败的 task 就重新运行它。一般情况应该把 JobTracker 部署在单独的机器上。3、TaskTracker 是运行在多个节点上的 slaver 服务。TaskTracker 主动与 JobTracker 通信,接收作业,并负责直接执行每一个任务。TaskTracker 都需要运行在 HDFS 的 DataNode 上。4. Hadoop 作者a)Martin Fowler b)Kent Beck c)Doug cutting答案 C Doug cutting5. HDFS 默认 Block Sizea)32MB b)64MB c)128MB答案:B6. 下列哪项通常是集群的最主要瓶颈a)CPU b)网络 c)磁盘 IO d)内存答案:C 磁盘首先集群的目的是为了节省成本,用廉价的 pc 机,取代小型机及大型机。小型机和大型机有什么特点?1.cpu 处理能力强2.内存够大,所以集群的瓶颈不可能是 a 和 d3.如果是互联网有瓶颈,可以让集群搭建内网。每次写入数据都要通过网络(集群是内网),然后还要写入 3 份数据,所以 IO 就会打折扣。7.关于 SecondaryNameNode 哪项是正确的?a)它是 NameNode 的热备 b)它对内存没有要求c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间d)SecondaryNameNode 应与 NameNode 部署到一个节点答案 C。多选题:8. 下列哪项可以作为集群的管理?a)Puppet b)Pdsh c)Cloudera Manager d)Zookeeper答案 ABD具体可查看什么是 Zookeeper,Zookeeper 的作用是什么,在 Hadoop 及 hbase 中具体作用是什么。9. 配置机架感知的下面哪项正确a)如果一个机架出问题,不会影响数据读写b)写入数据的时候会写到不同机架的 DataNode 中c)MapReduce 会根据机架获取离自己比较近的网络数据答案 ABC具体可以参考hadoop 机架感知-加强集群稳固性,该如何配置 hadoop 机架感知10. Client 端上传文件的时候下列哪项正确a)数据经过 NameNode 传递给 DataNodeb)Client 端将文件切分为 Block,依次上传c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作答案 B分析:Client 向 NameNode 发起文件写入的请求。NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。Client 将文件划分为多个 Block,根据 DataNode 的地址信息,按顺序写入到每一个DataNode 块中。具体查看HDFS 体系结构简介及优缺点。11. 下列哪个是 Hadoop 运行的模式a)单机版 b)伪分布式 c)分布式答案 ABC 单机版,伪分布式只是学习用的。12. Cloudera 提供哪几种安装 CDH 的方法a)Cloudera manager b)Tarball c)Yum d)Rpm答案:ABCD 具体可以参考Hadoop CDH 四种安装方式总结及实例指导。简答题1. Hadoop集群可以运行的3个模式?单机(本地)模式伪分布式模式全分布式模式2. 单机(本地)模式中的注意点?在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。这里同样没有DFS,使用的是本地文件系统。单机模式适用于开发过程中运行MapReduce程序,这也是最少使用的一个模式。3. 伪分布模式中的注意点?伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。4. VM是否可以称为Pseudo?不是,两个事物,同时Pseudo只针对Hadoop。5. 全分布模式又有什么注意点?全分布模式通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode运行的主机,以及task tracker运行的主机。在分布式环境下,主节点和从节点会分开。6. Hadoop是否遵循UNIX模式?是的,在UNIX用例下,Hadoop还拥有“conf”目录。7.Hadoop安装在什么目录下?Cloudera和Apache使用相同的目录结构,Hadoop被安装在cd/usr/lib/hadoop-0.20/。8. Namenode、Job tracker和task tracker的端口号是?Namenode,70;Job tracker,30;Task tracker,60。9. Hadoop的核心配置是什么?Hadoop的核心配置通过两个xml文件来完成:1,hadoop-default.xml;2,hadoop-site.xml。这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。10. 那当下又该如何配置?Hadoop现在拥有3个配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。这些文件都保存在conf/子目录下。11. RAM的溢出因子是?溢出因子(Spill factor)是临时文件中储存文件的大小,也就是Hadoop-temp目录。12. fs.mapr.working.dir只是单一的目录?fs.mapr.working.dir只是一个目录。13. hdfs-site.xml的3个主要属性?.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端)dfs.data.dir决定的是数据存储的路径fs.checkpoint.dir用于第二Namenode14. 如何退出输入模式?退出输入的方式有:1,按ESC;2,键入:q(如果你没有输入任何当下)或者键入:wq(如果你已经输入当下),并且按下Enter。15. 当你输入hadoopfsck /造成“connection refused java exception”时,系统究竟发生了什么?这意味着Namenode没有运行在你的VM之上。16. 我们使用Ubuntu及Cloudera,那么我们该去哪里下载Hadoop,或者是默认就与Ubuntu一起安装?这个属于Hadoop的默认配置,你必须从Cloudera或者Edureka的dropbox下载,然后在你的系统上运行。当然,你也可以自己配置,但是你需要一个Linux box,Ubuntu或者是Red Hat。在Cloudera网站或者是Edureka的Dropbox中有安装步骤。17. “jps”命令的用处?这个命令可以检查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工作。18. 如何重启Namenode?点击stop-all.sh,再点击start-all.sh。键入sudo hdfs(Enter),su-hdfs (Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenode start(Enter)。19. Fsck的全名?全名是:File System Check。20. 如何检查Namenode是否正常运行?如果要检查Namenode是否正常工作,使用命令/etc/init.d/hadoop-0.20-namenode status或者就是简单的jps。21. mapred.job.tracker命令的作用?可以让你知道哪个节点是Job Tracker。22. /etc /init.d命令的作用是?/etc /init.d说明了守护进程(服务)的位置或状态,其实是LINUX特性,和Hadoop关系不大。23. 如何在浏览器中查找Namenode?如果你确实需要在浏览器中查找Namenode,你不再需要localhost:8021,Namenode的端口号是50070。24. 如何从SU转到Cloudera?从SU转到Cloudera只需要键入exit。25. 启动和关闭命令会用到哪些文件?Slaves及Masters。26. Slaves由什么组成?Slaves由主机的列表组成,每台1行,用于说明数据节点。27. Masters由什么组成?Masters同样是主机的列表组成,每台一行,用于说明第二Namenode服务器。28. hadoop-env.sh是用于做什么的?hadoop-env.sh提供了Hadoop中. JAVA_HOME的运行环境。29. Master文件是否提供了多个入口?是的你可以拥有多个Master文件接口。30.Hadoop-env.sh文件当下的位置?hadoop-env.sh现在位于conf。31. 在Hadoop_PID_DIR中,PID代表了什么?PID代表了“Process ID”。32. /var/hadoop/pids用于做什么?/var/hadoop/pids用来存储PID。33.perties文件的作用是?perties被用做“Reporting”,控制Hadoop报告,初始状态是“not to report”。34. Hadoop需求什么样的网络?Hadoop核心使用Shell(SSH)来驱动从节点上的服务器进程,并在主节点和从节点之间使用password-less SSH连接。35. 全分布式环境下为什么需求password-less SSH?这主要因为集群中通信过于频繁,Job Tracker需要尽可能快的给Task Tracker发布任务。36. 这会导致安全问题吗?完全不用担心。Hadoop集群是完全隔离的,通常情况下无法从互联网进行操作。与众不同的配置,因此我们完全不需要在意这种级别的安全漏洞,比如说通过互联网侵入等等。Hadoop为机器之间的连接提供了一个相对安全的方式。37. SSH工作的端口号是?SSH工作的端口号是NO.22,当然可以通过它来配置,22是默认的端口号。38. SSH中的注意点还包括?SSH只是个安全的shell通信,可以把它当做NO.22上的一种协议,只需要配置一个密码就可以安全的访问。39. 为什么SSH本地主机需要密码?在SSH中使用密码主要是增加安全性,在某些情况下也根本不会设置密码通信。40. 如果在SSH中添加key,是否还需要设置密码?是的,即使在SSH中添加了key,还是需要设置密码。41.假如Namenode中没有数据会怎么样?没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据。42.当Job Tracker宕掉时,Namenode会发生什么?当Job Tracker失败时,集群仍然可以正常工作,只要Namenode没问题。43.是客户端还是Namenode决定输入的分片?这并不是客户端决定的,在配置文件中以及决定分片细则。44.是否可以自行搭建Hadoop集群?是的,只要对Hadoop环境足够熟悉,你完全可以这么做。45.是否可以在Windows上运行Hadoop?你最好不要这么做,Red Hat Linux或者是Ubuntu才是Hadoop的最佳操作系统。在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。因此,Windows绝对不是Hadoop的推荐系统。1 请列出你所知道的 hadoop 调度器 并简要说明其工作方法随着MapReduce的流行,其开源实现Hadoop也变得越来越受推崇。在Hadoop系统中,有一个组件非常重要,那就是调度器,它的作用是将系统中空闲的资源按一定策略分配给作业。在Hadoop中,调度器是一个可插拔的模块,用户可以根据自己的实际应用要求设计调度器。Hadoop中常见的调度器有三种,分别为:(注:本文介绍的Hadoop调度器不够系统化,如果想了解更系统化的Hadoop调度器,可阅读我的最新书籍Hadoop技术内幕:深入解析MapReduce架构设计与实现原理(购买说明)第10章 “Hadoop多用户作业调度器分析”,分析了当前比较流行的FIFO、Capacity个Fair三种调度器的配置方法、实现机制和优缺点对比,当然,也介绍了其他类型的几种调度器。)(1)默认的调度器FIFOHadoop中默认的调度器,它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业。(2) 计算能力调度器Capacity Scheduler支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制。(3)公平调度器Fair Scheduler同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置,同一队列中的作业公平共享队列中所有资源,具体算法参见我的博文Hadoop公平调度器算法解析实际上,Hadoop的调度器远不止以上三种,最近,出现了很多针对新型应用的Hadoop调度器。2 MapReduce 中的两表 join 几种方案1. 概述在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的。而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的技巧。本文首先介绍了Hadoop上通常的JOIN实现方法,然后给出了几种针对不同输入数据集的优化方法。2. 常见的join方法介绍假设要进行join的数据分别来自File1和File2.2.1 reduce side joinreduce 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阶段进行实际的连接操作。REF:hadoop join之reduce side join/huashetianzu/article/details/78192442.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读取相应的文件。REF:hadoop join之map side join/huashetianzu/article/details/78216742.3 Semi JoinSemi Join,也叫半连接,是从分布式数据库中借鉴过来的方法。它的产生动机是:对于reduce side join,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。实现方法很简单:选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同。更多关于半连接的介绍,可参考:半连接介绍:/view/ae7442db7f1922791688e877.htmlREF:hadoop join之semi join/huashetianzu/article/details/78233262.4 reduce side join + BloomFilter在某些情况下,SemiJoin抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。BloomFilter最常见的作用是:判断某个元素是否在一个集合里面。它最重要的两个方法是:add() 和contains()。最大的特点是不会存在 false negative,即:如果contains()返回false,则该元素一定不在集合中,但会存在一定的 false positive,即:如果contains()返回true,则该元素一定可能在集合中。因而可将小表中的key保存到BloomFilter中,在map阶段过滤大表,可能有一些不在小表中的记录没有过滤掉(但是在小表中的记录一定不会过滤掉),这没关系,只不过增加了少量的网络IO而已。更多关于BloomFilter的介绍,可参考:/jiaomeng/article/details/14955003. 二次排序在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?即:对于同一个key,reduce函数接收到的value list是按照value排序的。这种应用需求在join操作中很常见,比如,希望相同的key中,小表对应的value排在前面。有两种方法进行二次排序,分别为:buffer and in memory sort和 value-to-key conversion。对于buffer and in memory sort,主要思想是:在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。 这种方法最大的缺点是:可能会造成out of memory。对于value-to-key conversion,主要思想是:将key和部分value拼接成一个组合key(实现WritableComparable接口或者调用setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现Paritioner,以便只按照key进行数据划分。Hadoop显式的支持二次排序,在Configuration类中有个setGroupingComparatorClass()方法,可用于设置排序group的key值,具体参考:/xuxm2007/archive/2011/09/03/2165805.html4. 后记最近一直在找工作,由于简历上写了熟悉Hadoop,所以几乎每个面试官都会问一些Hadoop相关的东西,而 Hadoop上Join的实现就成了一道必问的问题,而极个别公司还会涉及到DistributedCache原理以及怎样利用DistributedCache进行Join操作。为了更好地应对这些面试官,特整理此文章。4 介绍一下hbase 过滤器一、过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter。Filter可以根据簇、列、版本等更多的条件来对数据进行过滤,基于Hbase本身提供的三维有序(主键有序、列有序、版本有序),这些Filter可以高效的完成查询过滤的任务。带有Filter条件的RPC查询请求会把Filter分发到各个RegionServer,是一个服务器端(Server-side)的过滤器,这样也可以降低网络传输的压力。 要完成一个过滤的操作,至少需要两个参数。一个是抽象的操作符,Hbase提供了枚举类型的变量来表示这些抽象的操作符:LESS/LESS_OR_EQUAL/EQUAL/NOT_EUQAL等;另外一个就是具体的比较器(Comparator),代表具体的比较逻辑,如果可以提高字节级的比较、字符串级的比较等。有了这两个参数,我们就可以清晰的定义筛选的条件,过滤数据。 Java代码 收藏代码CompareFilter(CompareOp compareOp, WritableByteArrayComparable valueComparator) CompareFilter是高层的抽象类,下面我们将看到它的实现类和实现类代表的各种过滤条件。这里实现类实际上代表的是参数中的过滤器过滤的内容,可以使主键、簇名、列值等,这就是由CompareFilter决定了。 行过滤器(RowFilter) 行过滤器的比较对象是行主键 Java代码 收藏代码Scan scan = new Scan(); Filter filter1 = new RowFilter(CompareFIlter.CompareOp.LESS_OR_EUQAL, new BinaryComparator(Bytes.toBytes(hello); scan.setFilter(filter1); scan.close(); 例中的Filter会将所有的小于等于“Hello”的主键过滤出来。 簇过滤器(FamilyFilter) 簇过滤器过滤的是簇的名字。 列过滤器(QualifierFilter) 列过滤器过滤的是列的名字。 值过滤器(ValueFilter) 值过滤器过滤的是扫描对象的值。 单值过滤器(SingleColumnValueFilter) 单值过滤器是以特定列的值为过滤内容,与值过滤器不同的是,这里是特定的列,而值过滤器比较的是行内的所有列。所有在使用单值过滤器的时候要指定比较的列的坐标。 Java代码 收藏代码SingleColumnValueFilter(byte family, byte qualifier, CompareOp compareOp, WritableByteArrayComparable comparator) 对于找不到该列的行,可以有特殊的处理 Java代码 收藏代码void setFilterIfMissing(boolean filterIfMissing) 默认缺省行将被包含进过滤的结果集中。 前缀过滤器(PrefixFilter) 前缀过滤器将会过滤掉不匹配的记录,过滤的对象是主键的值。 Java代码 收藏代码PrefixFilter(byte prefix) 页过滤器(PageFilter) 页过滤器可以根据主键有序返回固定数量的记录,这需要客户端在遍历的时候记住页开始的地方,配合scan的startkey一起使用。 Java代码 收藏代码PageFilter(int size) 键过滤器(KeyOnlyFilter) 键过滤器可以简单的设置过滤的结果集中只包含键而忽略值,这里有一个选项可以把结果集的值保存为值的长度。 FirstKeyOnlyFi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年网络文学国际传播策略研究:出海与跨文化传播实践报告
- 2025年老年教育课程改革与案例教学模式研究
- 深度解读2025年养老产业智能穿戴设备研发及推广可行性研究报告
- 转卖婚纱订金合同范本
- 网络竞价竞买合同范本
- 退工程保证金合同范本
- 软件租赁服务合同范本
- 项目方案模板合同范本
- 电脑采购指定合同范本
- 配音兼职协议合同范本
- 第8课《网络新世界》第一课时-统编版《道德与法治》四年级上册教学课件
- 2025年审计部招聘考试模拟题及答案详解
- 2025年招聘市场年中洞察报告-瀚纳仕
- Bowtie安全分析培训课件
- 退役军人优抚政策课件
- 财务遴选笔试题及答案
- (2025秋新版)人教版二年级数学上册全册教案(教学设计)
- 六年级上册音乐课教案
- 肿瘤病人疼痛评估与干预策略
- 外科颅内和椎管内血管性疾病 课件
- DL∕T 1867-2018 电力需求响应信息交换规范
评论
0/150
提交评论