论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
大数据
›
数据仓库与分析
›
Hadoop生态简介,Hive、Spark、HBase等
Hadoop生态简介,Hive、Spark、HBase等
光之使者
金牌会员
|
2024-7-26 19:15:04
|
显示全部楼层
|
阅读模式
楼主
主题
885
|
帖子
885
|
积分
2655
1. Hadoop
1.1 Hadoop简介
Hadoop如今已经是大数据领域究竟上的标准,基本提到大数据,大家起首想到的就是Hadoop。
在本文中,笔者会联合本身的实际使用履历,力求以简朴易懂的语言讲清楚Hadoop及其衍生生态下各个组件产生的配景,以及它们之间的关系,除了简述它们的作用之外,还会先容它们各自的缺点,这个世上没有万金油,每项技术都有它适用的场景,也有它们的范围性。
1.2 大数据产生的时代配景
在21世纪初互联网技术井喷式发展,人类进入互联网时代,各类电商网站、博客、微博、消息流派层出不穷,大家似乎无时无刻都在产生数据,数据开始野蛮增长,随之而来就是如此体量的数据如何存储和计算的问题,这也是大数据技术诞生的配景。
实在以Hadoop为代表的大数据技术主要办理了以下2个问题:
海量数据存储的问题,在Hadoop出现之前,各业务系统将业务数据单独存储,存储不下就分库分表,各种数据库中央件、插件大行其道,系统架构复杂且费用昂贵,很轻易出现数据孤岛,无法发挥数据真正的代价,Hadoop的出现让海量数据存储成为了可能。
海量数据计算的问题,海量的存储就须要海量的计算,Hadoop的MapReduce则为大数据处理提供了可能,MapReduce是一个分布式的并行处理框架,用户只须要实现简朴map()和reduce()函数就可以完成海量数据的并行计算。
1.3 Hadoop产生的配景
Hadoop诞生于
Nutch
项目,项目目的是构建一个大型的全网搜索引擎,随着抓取的数据量越来越多,Nutch项目遇到了严重的可扩展性问题,几乎与此同时,Google发表了闻名的3篇论文,为Nutch提供了办理思绪。
Google的3篇论文发表于2003 ~ 2006年间,内容分别对应
GoogleFileSystem
、
MapReduce
和
BigTable
,前2项分别对应Hadoop中的HDFS和MapReduce,在最初的Hadoop设计中并没有BigTable的实现(这篇论文发布较晚),BigTable背面由HBase实现,并捐献给了Apache社区。
1.4 Hadoop的焦点组件
HDFS
:分布式文件系统,以文件形式将数据分布式存储在差异服务器上,HDFS集群具有良好的扩展性,得当存储超大规模数据集,得当一次写入多次读取的场景。
MapReduce
:分布式并行计算框架,主要用于处理存储在HDFS上的大规模数据集,也可以处理数据库和本地文件系统中的数据,MapReduce主要用于开辟计算任务。
YARN
:分布式资源管理和调理框架,Hadoop2.X引入的新组件,主要用于集群资源统一管理(内存、CPU、网络、磁盘等)和计算任务的调理运行,YARN不但可以运行MapReduce任务,还可以运行Spark、Tez等任务。
1.5 Hadoop存在的问题
实在Hadoop焦点的3个组件中,HDFS和YARN仍在大规模使用,存在问题较大还是MapReduce:
开辟难度大,MapReduce开辟须要掌握Java语言,对DBA或运维人员不友爱,简朴map()和reduce()虽然简化了处理流程,但也降低了任务开辟的灵活性,任务编排组织使得代码非常痴肥,使用MapReduce只能实现简朴逻辑,复杂任务使用MapReduce开辟简直就是灾难。
执行服从低下,MapReduce执行过程中须要频繁IO和落盘,任何任务执行都必须颠末Map=>Shuffle=>Reduce这3个基本流程,在这个过程中会颠末多次的磁盘读写,导致服从难以提升。
算子能力太弱,MapReduce()只提供了map()和reduce()两个最基本的接口,其它任何操作都须要开辟人员基于这2个固定流程开辟,哪怕是一个简朴的left join都须要写一堆代码实现。
2. Spark
2.1 简介
正是由于MapReduce存在种种问题,以是才出现了Spark,Spark是一款用于处理大规模数据集的通用计算引擎,我们通常用它来更换Hadoop中MapReduce,Spark专注于的领域是计算,通用计算引擎的寄义是它不依靠任何存储,既可以对HDFS上数据进行计算,也可以对关系型数据库、Kafka、S3中的数据进行运算。
2.2 Spark办理了什么问题
相比于MapReduce,我觉得Spark主要有如下优点:
内存计算:Spark没有像MapReduce那样频繁读写磁盘,而是优先使用内存,节流了数据从内存到磁盘,然后再从磁盘到内存的资源斲丧。
计算路径的优化:Spark使用DAG(有向无环图)来规划任务执行路径,它会将DAG划分为多个Stage,每个Stage都可以并发执行,相比于MapReduce,Spark设计更加精密,它会选择最佳路径执行计算任务。
丰富的算子:差异于MapReduce简朴的map()和reduce()操作,Spark提供了海量的內置算子,例如leftJoin()、group()等,几乎涵盖了传统数据库支持的全部计算操作。
开辟较为简朴:Spark提供了SQL、Scala、Java、Python等多种接口,满足差异配景的开辟人员使用。
丰富的数据源:Spark内置许多现成的数据读写能力,例如常用的jdbc、orc、parquet、csv、hbase等。
2.3 Spark在Hadoop生态中的作用
Spark通常用于更换MapReduce,作为集群的计算引擎存在。
2.4 Spark的缺点
虽然Spark已经非常强大了,基本可以满足大数据场景下的计算需求,但是它还是有许多不敷的地方:
Spark擅长的领域是批处理,尽管Spark Streaming可以进行流计算,但相比于Flink,Spark Streaming的吞吐量稍显不敷,延迟性也比Flink高,Spark追求的是流批一体,Flink只专注于流处理。
Spark虽然执行服从高,但占用大量内存轻易导致步伐不稳定,在稳定性和并发性方面确实不如MapReduce,特别是数据堆栈数万任务运行的场景,这种问题就会被放大,这也是许多数仓仍使用hive-on-mapreduce的缘故原由。
Spark通常运行在YARN上用于计算HDFS上的数据,这导致Spark的优化还是围绕Hadoop模型展开,其计算服从相比于ClickHouse、Doris等OLAP新势力还是有所差距。
3. Hive
2.1 简介
前面已经提到MapReduce有开辟难度较大,复杂任务编排困难的问题,Hive就是为了办理这些问题而诞生的。
Hive是一款数
据堆栈管理工具
,也可以把它当成一种数据统计工具,Hive以数据库形式管理HDFS上的目录和文件,Hive可以将结构化数据映射成数据表,并使用雷同SQL的脚本语言(HiveQL)操作数据,Hive会将这些SQL翻译为一连串的MapReduce任务运行。
虽然Hive跟传统数据库很像,但它确实
不是数据库
,它仅仅是一个工具,如果以MySQL的4层架构(毗连层/服务层/引擎层/存储层)作为对比,那么Hive也仅仅是实现到了服务层,Hive本身不具备任何计算能力和存储能力,Hive依靠MapReduce或Spark作为其计算引擎,而Hive处理的巨大部分数据都是HDFS上的文件。
2.2 Hive的优点
操作简朴:以SQL方式操作数据,而且提供JDBC驱动,大大降低了大数据的使用门槛,不论是开辟人员还是DBA都能快速上手。
任务优化:Hive会将SQL翻译为一连串的MapReduce任务,优化器会主动选择最佳的执行路径查询数据。
多执行引擎:Hive不但支持MapReduce引擎,还支持使用Spark和Tez作为其计算引擎。
2.3 Hive在Hadoop生态中的作用
在Hadoop生态中,Hive通常作为SQL执行引擎存在,后续出现的SparkSQL也兼容Hive语法规范。
Hive常用于构建数据堆栈,以是Hive也可以作为集群数据文件的管理工具。
2.4 Hive的缺点
执行服从低,虽然Hive已支持Spark引擎,但现在仍有许多Hive任务运行在MapReduce上,MapReduce的执行服从会影响SQL的执行。
SQL的好处是使用简朴,但是表达能力较弱,复杂分析任务须要嵌套多层子查询,可读性就会变得非常差,复杂的嵌套查询也给调优带来了一定挑战。
调优复杂,Hive不像传统数据库那样颠末简朴调优便可稳定运行,Hive调优涉及方面较多,参数冗杂,调优须要一定的使用履历。
2.5 Hive和SparkSQL对比
SparkSQL的执行服从要优于Hive,虽然Hive支持Spark作为计算引擎,但hive-on-spark底层使用的是RDD API,而不是DataFrame API,SparkSQL使用的最新的DataFrame API,自然使用Spark作为计算引擎,执行服从比Hive要高一些。
Hive的稳定性要优于SparkSQL,由于Spark优先使用内存计算,占用资源相对较多,相较于Hive稳定性会差一些。
Hive的并发性要优于SparkSQL,Spark相较于Hive占用的内存资源较多,在集群资源一定的情况下,能同时运行的任务数就会淘汰。
2.6 Hive和Spark该如何选择
实在在实际生产过程中,Hive和Spark使用都比较多,它们各自有本身适用的场景。
如果须要构建复杂的分析或处理任务,Spark更为符合,Hive SQL嵌套多层之后可读性会变差,而且会给调优带来一定的挑战。
在数据堆栈或业务系统中的查询任务,Hive更为符合,因为业务查询须要稳定执行,而且须要更高的并发性能,前文也提到了,Hive在稳定性和并代性方面要优于Spark。
平凡分析查询任务,发起使用Spark,因为它确实比Hive要快许多。
2.7 Pig
前文提到MapReduce存在种种问题,实在早在Hive出现之前,Pig就尝试办理这些问题,Pig采用一种雷同SQL的PigLatin语言来编排MapReduce任务,相比于直接编写MapReduce任务,Pig已经可以节流许多人力。
但是Apache Pig却没有大规模使用起来,主要是后来者Hive和Spark比它更为良好。PigLatin相较于SQL还是具有一定的学习本钱,HiveQL接近于MySQL方言,只要会使用SQL的人员都可以快速上手。与Spark相比,Pig更加不具备任何上风,Spark誊写更加简朴,且代码可读性更强,不论是简朴的查询还是复杂的分析任务,Spark都可以轻松搞定,在执行服从方面,Spark更是显着快于Pig。
无论从哪种方面来看,Apache Pig都像是上个时代的产物,该项目已经很久没有更新了。
3. HBase
3.1 简介
HBase是Hadoop Database的缩写,意为Hadoop数据库,是Google经典3篇论文中BigTable的开源实现,它是一个功能完整的K-V数据库,主要用于存储海量的结构化和半结构化数据。
HBase将数据存储在HDFS上,HDFS保证了HBase数据的安全性和扩展性,理论上HDFS上能存多少数据,HBase就能存下多少数据,实在HBase的真正瓶颈在于RootRegion的大小(存储元数据信息的Region),只要元数据信息能存下,HBase中的数据量就可以无限增长。
在计算方面,HBase使用本身RegionServer实现计算,并不依靠其它组件。关于HBase的知识恐怕几篇文章都先容不完,这里不再深入先容,大家只需简朴了解HBase是个什么即可,后续有时间单独开篇博客先容。
3.2 HBase的适用场景
得当实时增删改查的场景,存在HDFS上的数据通常以批处理为主,如果想要插入的数据立马可以就能读取到,那么HBase就比较符合。HDFS上的数据通常是一次写入多次读取,更新和删除操作困难,如果业务系统中须要对数据进行更新或删除,那么可以思量使用HBase做实时查询系统。
得当简朴查询的场景,实在理论上HBase的索引只有1个就是row_key,如果想要在HBase中快速检索数据,就须要将干系数据设计到row_key中,但这种row_key长度毕竟有限,如果想要实现更为复杂的检索,就必须依靠Elasticsearch品级三方检索工具。
也可以作为数据堆栈的底层存储,如果数仓中的数据存在删除或更新的需求,可以思量使用HBase,但不发起完全使用HBase作为数据堆栈,因为建设数仓的目的是为了分析统计,HBase不得当大规模统计分析,再者大规模扫表也会对HBase服务造成巨大压力,只发起将有删改需求的表数据存储在HBase中。
实在在笔者的工作过程中,HBase使用的频率远远不如Hive和Spark,只有少量须要实时检索的场景才会用到HBase。
3.3 HBase的缺点
检索困难:只有row_key检索较快,row_key之外的Scan较慢,HBase得当围绕row_key的简朴检索,复杂查询的优化可能须要依靠Phoenix品级三方组件组件提供二级索引服务。
只支持单表操作:HBase无法实现多表操作,多表操作须要依靠Hive或Phoenix的第三方组件。
统计分析困难:HBase主要用于K-V检索,统计分析须要应用步伐在内存中本身处理,或者使用Hive或Phoenix品级三方组件。
3.4 HBase的SQL方案
3.4.1 Phoenix
Phoenix是HBase的SQL引擎插件,使得用户可以以SQL方式操作HBase,Phoenix支持多表查询,并提供了多种二级索引方案。
Phoenix的优点:
提供标准SQL和完整的变乱支持,并提供JDBC驱动供应用使用,Phoenix会将SQL转换成原生Scan,服从与原生API差距不大。
提供完整的二级索引方案,补充了原生HBase只能根据row_key检索的缺点。
支持复杂查询和分析统计,支持例如join、group by等常用操作。
Phoenix创建的表与原生HBase完全兼容,可以直接使用HBase API查询。
Phoenix的缺点:
数据精度的损失,HBase原来设计的列族/限定词/时间戳的三维结构被逼迫拉伸成一维列结构。
复杂查询和分析统计效果不是太理想,尽管Phoenix内部做了许多的优化,但是HBase本身就不是一款分析型数据库,不论怎么优化,其效果始终差能人意。
Phoenix的索引方案会新建索引表或利用本地存储,会浪费许多存储空间,以空间换时间,索引那部分数据会存多份。
3.4.2 HBaseStorageHandler
HBaseStorageHandler是Hive提供的用于查询HBase的处理器,通过这个处理器,就可以在Hive中以SQL形式查询HBase表。
HBaseStorageHandler的优点:
可以直接使用标准Hive查询HBase数据库,并与Hive中其它表进行关联,而Phoenix则只能在HBase库内计算,我们在构建数仓时也会将部分表数据存储到HBase中。
HBaseStorageHandler的缺点:
底层使用MapReduce全表扫描,查询服从较低,纵然添加了过滤条件,也会全表扫描,而Phoenix则会将SQL转换为原生Scan,将过滤条件转换为原生Filter。
3.5 在生产情况中使用HBase
如果是按照row_key检索更新的场景,通常会直接HBase API。
如果是统计分析的场景,更多的还是使用Spark和Hive查询HBase,简朴查询会用Phoenix,如果须要频繁扫描HBase表,发起将数据导出至HDFS,减轻HBase服务压力。
如果是在数仓中使用,还是Hive查询HBase较多。
4. Zookeeper
4.1 简介
Zookeeper一款分布式的应用步伐协调步伐,办理数据一致性问题,它的作用主要有2个:
各节点之间的分布式协调,例如推举主备节点、管理各个节点之间的状态,可以简朴将它明白为集群的管理者,从各个节点中选出一个老大,然后其它节点听从老大指挥,大家互通消息、举措一致。
存储重要数据,例如Kafka的副本信息、HBase的元数据信息都直接存储在Zookeeper中。
4.2 Zookeeper在Hadoop生态中的作用
Zookeeper在Hadoop中主要作为
统一协调中央
和
统一配置中央
存在,说它是整个集群的大管家也绝不为过。
4.3 Zookeeper在各个组件中的作用
Hadoop利用Zookeeper实现高可用,但主节点挂掉之后,会切换到备节点。
Hive利用Zookeeper实现高可用,当主节点挂掉之后,会切换到备节点。
Kafka利用Zookeeper实现分布式协调,推举主从节点,每个Topic的副本信息等也会存储在Zookeepr中。
HBase利用Zookeeper实现高可用,当HBase的一个Master挂掉之后,会立马切换到备用Master,HBase还会将一些比较重要的元数据信息存储到Zookeepr中。
Elasticsearch利用Zookeepr实现分布式协调,它会将所有的节点信息都存储到Zookeepr中。
4.3 Zookeeper的缺点
Zookeeper采用推举机制推举Leader,其它节点作为Follower或Observer存在,当Leader挂掉之后,会重新推举Leader,但推举的过程须要时间,对于Hadoop这样的计算性集群而言可能不算什么,但对于电商系统这样高速运算的系统而言,集群停摆几秒就可能导致非常严重的后果,以是之前Dubbo这样的中央件使用Zookeepr作为注册中央就具有一定的风险,只要Leader停摆,集群就须要一直等,等待新的Leader上线。
5. Kafka
5.1 简介
Kafka是一款数据流平台,通过Kafka数据在各个组件之间流转,Kafka也可以作为消息中央件,用于各业务系统之间的解耦。
5.2 Kafka的作用
实时数据流处理,负责集群中的实时数据流转,关于实时流数据处理的经典组合是业务系统将数据发往Kafka,然后Flink从Kafka拉取实时数据处理。
流量削峰,有些业务流量不均,高峰时的流量是平常的数倍,这时就可以把数据发往Kafka,后续系统就可以在流量较低时慢慢处理Kafka中的数据。
系统解耦,Kafka也可以直接作为消息队列,用于各个业务系统之间解耦,但Kafka模型简朴,如果业务复杂,须要更多功能,可以思量RabbitMQ等专业MQ。
6. Elasticsearch
6.1 简介
Elasticsearch是一款基于Lucene的分布式检索引擎,可以完成复杂的实时检索,稳定可靠、可扩展。
6.2 Elasticsearch的作用
Elasticsearch的作用就是做大数据实时检索,通过Elasticsearch提供Restful API可以完成各种复杂的数据检索,甚至可以跨索引检索。
须要留意的是Elasticsearch专注的领域是数据检索,如果有统计分析的场景,还是发起使用Spark或Hive,而且Elasticsearch也不属于Hadoop生态,须要将数据导入到Elasticsearch中。
7. Ooize
基于Hadoop的分布式调理系统,可以将我们写的MapReduce或Spark打包上传,由Ooize负责定时执行。
在我们实际生产过程中,还是有许多须要定时执行的Spark任务的,这时Ooize就排上用场了。
8. Sqoop && Flume
为什么最后先容这两个组件,是因为它们和Apache Pig一样,存在感确实很低。
Sqoop是一款将关系型数据库中的数据导入到Hadoop平台的ETL工具,但几乎没有哪家厂商乐意使用它,要么本身开辟ETL工具,要么使用Kettle、DataX等开源的ETL工具。
Flume是一个高可用的、高可靠的分布式的海量日志采集、聚合和传输的系统。
9. 结语
这是最好的时代,也是最坏的时代。Hadoop从诞生至今已不知不觉走过了20多年的时间,英雄迟暮,志在千里!但时代总要继续向前发展,渴望大家在拥抱Hadoop的同时,也积极去拥抱ClickHouse,拥抱Doris。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
光之使者
金牌会员
这个人很懒什么都没写!
楼主热帖
〖Python接口自动化测试实战篇⑥〗- 接 ...
100 行代码搞定了 RPC 原理,大家随便 ...
HarmonyOS之分布式软总线
Python3,2行代码,多种方法,直接把网 ...
Python每日一练——第5天:闰年问题升 ...
PyTorch nn.RNN 参数全解析
快速上手kettle(三)壶中可以放些啥? ...
[SWPUCTF 2021 新生赛]PseudoProtocols ...
KeePass敏感信息明文传输漏洞复现 (CV ...
【Linux篇】第十八篇——网络套接字编 ...
标签云
存储
服务器
浏览过的版块
Java
快速回复
返回顶部
返回列表