Hive和Hbase区别(Hadoop面试题)

1、Hadoop架构

Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件。

Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据)。包括这些模块:

 

  1. Hadoop Common:支持其他Hadoop模块的基础工具。
  2. Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
  3. Hadoop YARN:作业调度和集群资源管理的框架。
  4. Hadoop MapReduce:一种用于并行处理大型数据集的基于YARN的系统。
  5. Hadoop Ozone:使用Hadoop分布式数据存储(HDDS)来存储层。HDDS是Apache Hadoop的另一个新分支。

HDFS最初的设计是存储相对大的文件,文件一次写入,多次读取。Vavilappalli说。“随着时间的推进,我们发现新的任务需要存储小的对象,它可能是一个照片或者视频。如何能够以一种更加高效,方便的方式去存储用户想要保存的数据,这些不是典型的Hadoop任务,因此需要存储大量的小对象,并且人们只能使用HDFS去存储它们。 OZone将更适合存储这类对象。

 

Ozone参考:http://lib.csdn.net/article/hadoop/6301

 

 

  1. Hive和hbase的区别

 

 

Hive

Hbase

数据仓库工具

Hadoop DataBase

结构化的数据文件映射为一张数据库表

Nosql,可处理非结构化数据

提供简单的sql查询功能,写操作仅限append 

支持增删改查

对数据进行离线分析查询

 

对数据继续实时分析

延迟

 

延迟

sql语句换成mapreduce

内带一个数据库,也可以跑MR

 

3、Spark-sql和hadoop哪个快,为什么?

Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘

 

1. 消除了冗余的HDFS读写

Hadoop的每次shuffle都必须写到磁盘中,而Spark的shuffle不一定写到磁盘中,而是可以缓存到内存中,以便后续的其他迭代操作时直接使用。

2. 消除了冗余的MapReduce阶段

Hadoop的每次shuffle必将连接着一次完成MapReduce操作,而Spark基于RDD提供了丰富的算子操作,而且Spark的shuffle产生的数据可以缓存到内存中。

3.Spark对于JVM的优化

JVM启动需要花费时间

Hadoop的每次MapReduce操作,启动一个Task便会启动一次JVM

而Spark只在启动Executor时启动一次JVM。但是每次执行一个Task,都是复用Executor中的线程(Executor中维护着一个线程池)。

Spark快不是绝对的,但是绝大多数,Spark都比Hadoop计算要快。这主要得益于其对mapreduce操作的优化以及对JVM使用的优化。

 

 

 

nHDFS优点

(1)高容错性:数据自动保存多个副本,副本丢失后,会自动恢复。

(2)适合批处理:a:移动计算而非移动数据、b:数据位置暴露给计算框架。

(3)适合大数据处理:GB、TB、甚至PB级数据、百万规模以上的文件数量,1000以上节点规模。

(4)流式文件访问:一次性写入,多次读取;保证数据一致性。

(5)可构建在廉价机器上:通过多副本提高可靠性,提供了容错和恢复机制。

nHDFS缺点

(1)不适合低延迟数据访问:比如毫秒级、低延迟与高吞吐率。

(2)不适合小文件存取:占用NameNode大量内存,寻道时间超过读取时间。

(3)不适合并发写入、文件随机修改:一个文件只能有一个写者,仅支持append

YRAN:

job提交流程

1.客户端提交作业给resourcemanager

2.resourcemanager将信息加入到等待队列中并返回给客户端jobid,存储路径(HDFS上的路径)信息

3.客户端将job.jar、job.xml、job.split、job.splitinfo包括切片信息等信息上传到存储路径(HDFS上的路径/)

4.客户端通知resourcemanager可以启动job

5.resourcemanager将job加入到job队列当中,等待nodemanager领取job,将客户端发出命令启动AppMaster,然后nodemanager启动container,job.jar、job.xml、job.split、job.splitinfo等信息下载到container内

6.AppMaster计算资源,向resourcemanager请求maptask的资源(container启动maptask)

7.resourcemanager根据心跳信息分配资源(container),下载job.jar到container内,AppMaster启动maptask(yarnchild)

8.maptask执行完成,通知AppMaster,然后释放maptask资源,AppMaster向resourcemanager申请reducetask的资源

9.resourcemanager分配资源(container),下载job.jar到container内,AppMaster启动reducetask(yarnchild)

10.reducetask执行完成,通知AppMaster,然后释放reducetask资源。AppMaster通知resourcemanager。AppMaster释放资源。

MR:job

1.MapTask调用Inputformat方法创建一个RecordReader

RecordReader以此调用nextkeyvalue getcurrentkey getcurrentvalue方法

获取<K,V>传递给Mapper类,每读取一行数据就会调用一次map方法,然后将

通过逻辑处理后的<K,V>输出到OutputCollector

2.Collector将数据缓存到环形缓冲区中,存满80%的数据后会溢出到溢出器

spiller中,然后再溢出器中进行分区和快速排序,将分区后的数据生成

几个文件(多次溢出生成多个文件)

3.在Merge中将这几个文件进行归并排序后生成一个(局部有序-->分区内有序)文件(一个MapTask对应一个大文件)

4.一个Reduce去所有MapTask的输出文件中拉去相同分区的数据然后通过Merger进行归并排序

(ReduceTask数量可以通过手动设置) 第二个再去相应分区拉取

5.ReduceTask从合并后的文件中读取 一个key传递给reduce方法,同时传递一个value迭代器

value迭代器的hasnext方法会判断文件中的下一个key

是否还是已经传入的key,如果是,则next可以返回下一个value 否则,hasnext直接返回false,本次reduce结束

6.Reducer中的reduce方法将输出的结果导入到外部文件系统

HBase:路由机制

1:到zookeeper上查找root表的位置

2:跟root表交互,查找meta表所在的位置

3:查找meta,确定rowkey所在的region以及regionserver的位置

4:跟数据所在的regionserver进行交互

5:regionserver转发io请求给region

6:查找memstore,如果有则返回,若无到hdfs上找

7:与hdfs进行交互读取数据

8:返回结果,首先会写memstore

9:返回结果到客户端

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值