hadoop面试整理

1.简要描述一个apache如何安装配置hadoop.
   
   1.创建hadoop 帐户。
   2.setup.改IP。
   3.安装java,并修改/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 namenode -format
  10.Start-all

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

   NameNode:    管理集群,并记录datanode 文件信息。
   SecondName:可以做冷备,对一定范围内数据做快照性备份。
   DataNode:       存储数据
  JobTracker :     管理任务,并将任务分配给tasktracker。
  TaskTracker:    任务执行方。

3.写出以下执行命令.
   
   3.1 杀死一个job
          hadoop job -list  拿到job-id ,hadoop job -kill job-id

   3.2  加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令
           加新节点时:
           Hadoop-daemon.sh start datanode          
           Hadoop-daemon.sh start tasktracker

          删除时:
          Hadoop mradmin -refreshnodes
          Hadoop dfsadmin -refreshnodes

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

   Fifo schedular :默认,先进先出的原则。
   Capacity schedular :计算能力调度器,选择占用最小、优先级高的先执行,依此类推。 
   Fair schedular:公平调度,所有的job 具有相同的资源。
    异构集群的调度器 LATE
   实时作业的调度器 Deadline Scheduler Constraint-based Scheduler


5.Hive有哪些方式保存元数据的,各有那些特点。
   有三种
   1.内存数据库derby,挺小,不常用。
   2.本地mysql,常用。
   3.远程端mysql,不常用。
     
6.简述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相同。


7.请简述hadoop中的shuffle,combiner,partition的作用。

   shuffle: 
  是描述着数据从map端传输到reduce端的过程,而且我们知道的是hadoop的集群环境中,大部分map task和reduce task是在不同的node上执行,主要的开销是网络开销和磁盘IO开销,因此shuffle的主要作用相当于是 
  1.完整的从map task端传输到reduce task端。 
  2.跨节点传输数据时,尽可能减少对带宽的消耗.(注意是reduce执行的时候去拉取map端的结果) 
  3.减少磁盘IO开销对task的影响。 

  Partition: 
    Partition主要作用就是将map的结果发送到相应的reduce。这就对partition有两个要求: 
    1)均衡负载,尽量的将工作均匀的分配给不同的reduce。 
    2)效率,分配速度一定要快。 
    重定向mapper的输出,根据key来决定mapper应该讲k,v对输出给谁,默认采用的hash key来实现,也可以根据自己的需要来实现。 

  combiner:

       实现的功能跟reduce 差不多,接收map 的值,经过计算后给reduce,它的key,value 类型要跟reduce 完全一样,

       当reduce 业务复杂时可以用,不过它只是操作本机的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值