1、hive和hbase的区别
Hive: hive是hadoop数据仓库管理工具,严格来说,不是数据库,本身是不存储数据和处理数据的,其依赖于HDFS存储数据,依赖于MapReducer进行数据处理 既可以计算又可以储存 hive中的计算是由mapreduce任务运行的,执行较慢,不适合做实时
HBase:
1.HBase是一种分布式、可扩展、支持海量数据存储的NOSQL数据库
2.HBase主要适用于海量数据的实时数据处理(随机读写)
3.由于HDFS不支持随机读写,而HBase正是为此而诞生的,弥补了HDFS的不可随机读写。
区别:
1.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。总的来说,hive是适用于离线数据的批处理,hbase是适用于实时数据的处理。
2.Hive本身不存储和计算数据,它完全依赖于HDFS存储数据和MapReduce处理数据,Hive中的表纯逻辑。
3.hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
4.由于HDFS的不可随机读写,hive是不支持随机写操作,而hbase支持随机写入操作。 5.HBase只支持简单的键查询,不支持复杂的条件查询
2、正常工作的hadoop集群中hadoop都需要启动哪些进程,作用分别是什么
HDFS : Namenode Datanode SecondaryNamenode(单机模式中有 集群模式中是在 从机器中)
namenode:负责hdfs集群的管理,管理其他的datanode节点,记录各个块的信息,处理客户端的请求,数据存放在内存中
datanode: 数据存储,数据节点,真正存储数据的地方
secondaryNamenode:小秘,执行fsimage和edtis的合成操作
Yarn: ResourceManager NodeManager JobHistoryServer
resourceManager:负责管理集群资源和调度作业,分配计算资源给各个任务。 nodeManager: 在每个工作节点上运行,监控节点的健康状况,执行任务,并报告资源使用情况给resourceManager
Zookeeper : 管理resourceManager和 nameNode的选举,确保 resourceManager和 active nameNode的高可用性。
补充:zookeeper的选举机制:
https://blog.csdn.net/qq_62984376/article/details/142335874?spm=1001.2014.3001.5501
3、hadoop数据倾斜以及解决办法
(hadoop数据倾斜其实就是mapreduce 和 hive 的数据倾斜)
数据倾斜最直观的表现就是任务长时间维持在 99%等 大量的key被分配到了同一个任务上,导致一些人累死一些人闲死的情况
要注意: 一些sql本身就带有数据倾斜 表中有大量的空值 (Null) 也可能会造成数据倾斜
解决办法:
1) 开启负载均衡 set hive.map.aggr=true set hive.groupby.skewindata=true
2) 自定义分区
3) 使用 Combine 聚合并精简数据
4) 尽可能的在 map 端就进行 join数据关联
5) 少使用 count distinct ,而用 union all 替代
6) 处理一些不可拆分的大文件时也会数据倾斜,可以先在hdfs上进行解压后再操作
4、简单说一下yarn的几种调度器
1、FIFO Scheduler(FIFO调度器) 先进先出 先执行好 job1 再去执行 job2
2、Capacity Scheduler(容量调度器,apache版本默认使用的调度器) 专门留了一部分资源给小任务,可以在执行job1的同时,不会阻塞job2的执行
3、Fair Scheduler(公平调度器,CDH版本的hadoop默认使用的调度器) 公平调度器 所有运行的应用公平分配资源
补充:
Yarn的工作原理: YARN的工作原理可以简单概括为资源管理和作业调度。 当一个应用程序提交到YARN集群时,ResourceManager会为该应用程序分配一个唯一的应用程序ID,并为其启动一个对应的ApplicationMaster。ApplicationMaster负责与ResourceManager协商资源,并与NodeManager协调容器的启动、监控和状态报告