hadoop面试题20道

原创
2016/03/02 11:27
阅读数 317

  1.简要的描述一下如何安装一个apache开原版的hadoop,无需列出完整步骤。

  1.创建hadoop用户.

  2.setup修改IP.

  3.安装javaJdk,并且修改etc/profile文件,配置java的环境变量.

  4.修改host的文件域名

  5.安装SSH免密码通信。

  6.解压hadoop包.

  7配置conf文件下的hadoop-env.sh.core-site.sh.mapre-site.sh.hdfs-site.sh

  8配置hadoop环境变量

  9.hadoop格式化hadoopnamenode-format

  10.启动hadoopstart-all

  2.请列出正常工作的hadoop集群中hadoop都分别需要启动那些进程,他们分别是什么,作用是什么?

  hadoop1.X

  namenode:管理集群,并记录datanode文件的信息.

  Secnodnamenode:可以做冷备,对一定范围的数据做快照备份。

  Datenode:存储数据

  :管理任务,并将任务分配给tasktracker。

  Tasktracker:任务执行方.

 

  Hadoop2.x

  NameNode:

  ResourceManager:资源调度器,它按照一定的约束条件(比如队列容量限制等)将集群中的资源分配给各个应用程序

  DataNode:

  NodeManager:是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务

  SecondaryNameNode

  3.请写出一下执行的命令

  (1)杀死一个job

  (2)删除hdfs上/tmp/aaa目录

  (3)加入一个新的存储节点和删除一个计算节点需要刷新到集群的状态命令

  答案:(1)haoopjob-list拿到job-idhadoopjob-killjob-id

  (2)hadoopfs-rmr/tmp/aaa

  (3)加新节点时:hadoop-deamon.shstartdatenode

  Hadoop-deamon.shstarttasktracker

  删除节点时:hadoopmradmin-refreshnodes

  Hadoopdfsadmin-refreshnodes

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

  答案:Fifoschedular:默认,先进先出原则。

  Capacityschedular:计算能力调度器,选择占用最小、优先高级的先执行,以此类推。

  Fairschedular: 公平调度,所有job具有相同的资源。

  5.Hive有那些方式保存元数据的,各有说明特点。

  答案:三种:内存数据库derby挺小不常用

  本地mysql常用

  远程端mysql。不常用

  6.简述hadoop怎么去实现二级排序的?

  答案:常用方法是value放进key中,实现一个key组合,然后自定义key排序(为key实现一个WritetableCompabla)

  7.简述mapreduce中combiner,partition的作用.

  答案:combiner:实现的功能跟reduce差不多,接受map的值,经过计算后给reduce,他的key,value类型跟redice完全一样,当reduce业务复杂时可以用,不过他貌似是操作本机的数据

  Partition:将输出的结果分别保存在不同的文件中。。

  8.Hive内部表与外部表的区别?

  答案:1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;

   2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!

  9.Hbase的rowkey怎么创建比较好,列簇怎么创建比较好?

  答案1.rowkey,我们知道rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以rowkey的设计是至关重要的,关系到你应用层的查询效率。我们知道,rowkey是以字典顺序排序的。而存储的字节码,字典排序,我们知道,如果是字母,那就是字母的顺序,比如,有两个rowkey,rowkey1:aaa222,rowkey2:bbb111,那么rowkey1是排在rowkey2前面的,因为按字典,a排在b前面,如果rowkey2的第一位也是a,那么就根据第二位来比较,如果还相同,则比较第三为,后面同样。这个理解了,我们在根据rowkey范围查询的时候,我们一般是知道startRowkey,如果我们通过scan只传startRowKey:d开头的,那么查询的是所有比d大的都查了,而我们只需要d开头的数据,那就要通过endRowKey来限制。我们可以通过设定endRowKey为:d开头,后面的根据你的rowkey组合来设定,一般是加比startKey大一位。比如说rowkey设计为:用户ID-日期,那么查某个用户某天的数据,startKEY为3231-20121212,endKey为:3231+201213,那么你查到的就是用户为3231在20121212这一天的数据。

  2.columnkey

  columnkey是第二维,数据按rowkey字典排序后,如果rowkey相同,则是根据columnkey来排序的,也是按字典排序。

  我们在设计table的时候要学会利用这一点。比如我们的收件箱。我们有时候需要按主题排序,那我们就可以把主题这设置为我们的columnkey,即设计为columnFamily+主题.,这样的设计。

  3.timestamp

  timestamp时间戳,是第三维,这是个按降序排序的,即最新的数据排在最前面。这个就没有什么说的了。网上其他的博客也提到比较多。

  10.用mapreduce怎么处理数据倾斜的问题?

  1.增加reduce的jvm内存

  2.增加reduce个数

  3.customerpartition

  4.其他优化的讨论.

  5.reducesortmerge排序算法的讨论

  6.正在实现中的hiveskewedjoin.

  7.pipeline

  8.distinct

  9.index尤其是bitmapindex

  11.Hbase的内部机制是什么?

  在HMaster、RegionServer内部,创建了RpcServer实例,并与Client三者之间实现了Rpc调用,HBase0.95内部引入了Google-Protobuf作为中间数据组织方式,并在Protobuf提供的Rpc接口之上,实现了基于服务的Rpc实现,本文详细阐述了HBase-Rpc实现细节。

  HBase的RPCProtocol

  在HMaster、RegionServer内部,实现了rpc多个protocol来完成管理和应用逻辑,具体如下protocol如下:

  HMaster支持的Rpc协议:

  MasterMonitorProtocol,Client与Master之间的通信,Master是RpcServer端,主要实现HBase集群监控的目的。

  MasterAdminProtocol,Client与Master之间的通信,Master是RpcServer端,主要实现HBase表格的管理。例如TableSchema的更改,Table-Region的迁移、合并、下线(Offline)、上线(Online)以及负载平衡,以及Table的删除、快照等相关功能。

  RegionServerStatusProtoco,RegionServer与Master之间的通信,Master是RpcServer端,负责提供RegionServer向HMaster状态汇报的服务。

  RegionServer支持的Rpc协议:

  ClientProtocol,Client与RegionServer之间的通信,RegionServer是RpcServer端,主要实现用户的读写请求。例如get、multiGet、mutate、scan、bulkLoadHFile、执行Coprocessor等。

  AdminProtocols,Client与RegionServer之间的通信,RegionServer是RpcServer端,主要实现Region、服务、文件的管理。例如storefile信息、Region的操作、WAL操作、Server的开关等。

  12.HDFS的数据压缩算法?

  Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持

  13.Mapreduce的调度模式?

  MapReduce的作业调度并没有很高的实时性的要求,本着最大吞吐的原则去设计的,所以MapReduce默认采用的调度策略是FIFO(基于优先级队列实现的FIFO,不是纯粹的FIFO,这样每次h),这种策略显然不是可抢占式的调度,所以带来的问题就是高优先级的任务会被先前已经在运行并且还要运行很久的低优先级的作业给堵塞住。

     别的选择:FairScheduler和CapacityScheduler

  14.Hbase过滤器的实现原则?

  客户端创建包含过滤器Filter的Scan。

  Scan通过RPC被发送给RegionServer,在服务器端执行过滤操作。

  Scan的作用域是region,所以一个RegionServer有多个region的话,Scan将被发送到每个region

     你必须知道的是,HBase里的一行数据对应一或者多个KeyValue。再来看看流程。

  booleanfiterRowKey(byte[]buffer,intoffset,intlength):检查rowkey。返回true代表被过滤掉,false进入下个方法。

  ReturnCodefiterKeyValue(KeyValuev):检查rowkey下特定的某一个KeyValue。它有五种返回值,常见的ReturnCode.INCLUDE代表结果中包含这个KeyValue,Skip代表不包含,继续下处理一个KeyValue。

  voidfilterRow(List<KeyValue>ignored):ignored是2里面被过滤掉的KeyValue集合。

  booleanfilterRow():返回true代表过滤掉当前行。

  voidreset():迭代每一个新的RowKey(步骤1)前调用此方法。

  booleanfilterAllRemaining():返回true时代表终止整个扫描操作。如用户找到了需要的所有数据,就在这里可以返回true。

  15.Combine发生在那个过程中?以及作用是什么?

  map->combine->partition->shuffle->reduce

   减少Mapper任务输出数据量,减少网络传输时间,减少整体Job运行时间。

    Combiner仅作用于单个Mapper任务,每个Map任务可能会产生大量的输出,Combiner的作用就是在Map端对输出先做一次合并,以减少传输到Reducer的数据量。

          Combiner最基本是实现本地Key的递归,Combiner具有类似本地的Reduce功能。如果不用Combiner,那么所有的结果都是Reduce完成,效率会相对低下,使用Combiner先完成的Map会在本地聚合,提升速度

  16.Hadoop的缓存机制?

  分布式缓存一个最重要的应用就是在进行join操作的时候,如果一个表很大,另一个表很小很小,我们就可以将这个小表进行广播处理,即每个计算节点上都存一份,然后进行map端的连接操作,经过我的实验验证,这种情况下处理效率大大高于一般的reduce端join,广播处理就运用到了分布式缓存的技术。

  DistributedCache将拷贝缓存的文件到Slave节点在任何Job在节点上执行之前,文件在每个Job中只会被拷贝一次,缓存的归档文件会被在Slave节点中解压缩。将本地文件复制到HDFS中去,接着J哦不Client会通过addCacheFile()和addCacheArchive()方法告诉DistributedCache在HDFS中的位置。当文件存放到文地时,JobClient同样获得DistributedCache来创建符号链接,其形式为文件的URI加fragment标识。当用户需要获得缓存中所有有效文件的列表时,JobConf的方法getLocalCacheFiles()和getLocalArchives()都返回一个指向本地文件路径对象数组。

  17.对zookeeper的了解?

  基本上ZooKeeper提供了一个简化并支持特定功能的分布式文件系统接口,加上数据同步,变更通知,客户端Cache等辅助机制。基于这样的接口,用户可以自己在此之上构建逻辑,来实现各种分布式系统系统工作所需的各种功能,如配置管理,名称服务,Master选举,同步,锁等,类似于google的Chubby

  18.Shell如何判断文件是否存在?

  #!/bin/sh

   echo"请输入你要判断的文件的完整路径:"

   readfilepath

   if[-f$filepath];

   then

   echo"文件存在!"

   echo"文件在$filepath"

   else

   echo"文件不存在或者您输入的路径有误"

   fi

  19.Mapreduce中排序发生在哪几个阶段,这些排序是否可以避免?为什么?

  一个mapreduce作业有map阶段和reduce阶段二部分组成,这两个阶段会对数据排序,从这个意义来说。Mapreduce框架本质就是一个DistributedSort。在map阶段,mapTask会在本地磁盘输出一个按照key排序的文件,在reduce阶段,每个reduceTask会对收到的数据进行排序,这样数据便按照key分成了若干组,之后以组为单位交给reduce处理。如果不适用combiner,还是可以排序的,只是为了减轻reduce端排序的负载。

  20.hive中Orderby,Sortby,Dristributeby,ClusterBy的作用和用法

  orderby

  orderby会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)

  只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。

  sortby

  sortby不是全局排序,其在数据进入reducer前完成排序.

  因此,如果用sortby进行排序,并且设置mapred.reduce.tasks>1,则sortby只保证每个reducer的输出有序,不保证全局有序

  distributeby

   按照指定的字段对数据进行划分到不同的输出reduce /文件中。

  ClusterBy

   clusterby除了具有distributeby的功能外还兼具sortby的功能。

  

展开阅读全文
打赏
2
15 收藏
分享
加载中
797979
2016/03/02 19:30
回复
举报
更多评论
打赏
1 评论
15 收藏
2
分享
返回顶部
顶部