当前位置: 代码网 > it编程>游戏开发>ar > Hadoop生态简介,Hive、Spark、HBase等

Hadoop生态简介,Hive、Spark、HBase等

2024年08月01日 ar 我要评论
Hadoop生态全景介绍,Spark、Hive、HBase等

1. hadoop

1.1 hadoop简介

hadoop现在已经是大数据领域事实上的标准,基本提到大数据,大家首先想到的就是hadoop。

在本文中,笔者会结合自己的实际使用经验,力求以简单易懂的语言讲清楚hadoop及其衍生生态下各个组件产生的背景,以及它们之间的关系,除了简述它们的作用之外,还会介绍它们各自的缺点,这个世上没有万金油,每项技术都有它适用的场景,也有它们的局限性。

在这里插入图片描述

1.2 大数据产生的时代背景

在21世纪初互联网技术井喷式发展,人类进入互联网时代,各类电商网站、博客、微博、新闻门户层出不穷,大家似乎无时无刻都在产生数据,数据开始野蛮增长,随之而来就是如此体量的数据如何存储和计算的问题,这也是大数据技术诞生的背景。

其实以hadoop为代表的大数据技术主要解决了以下2个问题:

1.3 hadoop产生的背景

hadoop诞生于nutch项目,项目目标是构建一个大型的全网搜索引擎,随着抓取的数据量越来越多,nutch项目遇到了严重的可扩展性问题,几乎与此同时,google发表了著名的3篇论文,为nutch提供了解决思路。

google的3篇论文发表于2003 ~ 2006年间,内容分别对应googlefilesystemmapreducebigtable,前2项分别对应hadoop中的hdfs和mapreduce,在最初的hadoop设计中并没有bigtable的实现(这篇论文发布较晚),bigtable后面由hbase实现,并捐献给了apache社区。

1.4 hadoop的核心组件

1.5 hadoop存在的问题

其实hadoop核心的3个组件中,hdfs和yarn仍在大规模使用,存在问题较大还是mapreduce:

2. spark

2.1 简介

正是由于mapreduce存在种种问题,所以才出现了spark,spark是一款用于处理大规模数据集的通用计算引擎,我们通常用它来替代hadoop中mapreduce,spark专注于的领域是计算,通用计算引擎的含义是它不依赖任何存储,既可以对hdfs上数据进行计算,也可以对关系型数据库、kafka、s3中的数据进行运算。

在这里插入图片描述

2.2 spark解决了什么问题

相比于mapreduce,我觉得spark主要有如下优点:

2.3 spark在hadoop生态中的作用

spark通常用于替代mapreduce,作为集群的计算引擎存在。

2.4 spark的缺点

虽然spark已经非常强大了,基本可以满足大数据场景下的计算需求,但是它还是有很多不足的地方:

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的优点

2.3 hive在hadoop生态中的作用

在hadoop生态中,hive通常作为sql执行引擎存在,后续出现的sparksql也兼容hive语法规范。

hive常用于构建数据仓库,所以hive也可以作为集群数据文件的管理工具。

2.4 hive的缺点

2.5 hive和sparksql对比

2.6 hive和spark该如何选择

其实在实际生产过程中,hive和spark使用都比较多,它们各自有自己适用的场景。

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的适用场景

其实在笔者的工作过程中,hbase使用的频率远远不如hive和spark,只有少量需要实时检索的场景才会用到hbase。

3.3 hbase的缺点

3.4 hbase的sql方案

3.4.1 phoenix

phoenix是hbase的sql引擎插件,使得用户可以以sql方式操作hbase,phoenix支持多表查询,并提供了多种二级索引方案。

在这里插入图片描述

phoenix的优点:

phoenix的缺点:

3.4.2 hbasestoragehandler

hbasestoragehandler是hive提供的用于查询hbase的处理器,通过这个处理器,就可以在hive中以sql形式查询hbase表。

hbasestoragehandler的优点:

hbasestoragehandler的缺点:

3.5 在生产环境中使用hbase

如果是按照row_key检索更新的场景,通常会直接hbase api。

如果是统计分析的场景,更多的还是使用spark和hive查询hbase,简单查询会用phoenix,如果需要频繁扫描hbase表,建议将数据导出至hdfs,减轻hbase服务压力。

如果是在数仓中使用,还是hive查询hbase较多。

4. zookeeper

4.1 简介

zookeeper一款分布式的应用程序协调程序,解决数据一致性问题,它的作用主要有2个:

在这里插入图片描述

4.2 zookeeper在hadoop生态中的作用

zookeeper在hadoop中主要作为统一协调中心统一配置中心存在,说它是整个集群的大管家也毫不为过。

4.3 zookeeper在各个组件中的作用

4.3 zookeeper的缺点

zookeeper采用选举机制选举leader,其它节点作为follower或observer存在,当leader挂掉之后,会重新选举leader,但选举的过程需要时间,对于hadoop这样的计算性集群而言可能不算什么,但对于电商系统这样高速运算的系统而言,集群停摆几秒就可能导致非常严重的后果,所以之前dubbo这样的中间件使用zookeepr作为注册中心就具有一定的风险,只要leader停摆,集群就需要一直等,等待新的leader上线。

5. kafka

5.1 简介

kafka是一款数据流平台,通过kafka数据在各个组件之间流转,kafka也可以作为消息中间件,用于各业务系统之间的解耦。

在这里插入图片描述

5.2 kafka的作用

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。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com