重新认识Hive

本文首发微信公众号:码上观世界

说起Hive这个曾经叱咤风云的大数据数仓分析平台(好像现在依然老骥伏枥) ,可谓无人不晓,但是如果现在让你们重新选择一项数据仓库分析平台,恐怕无人再去选择它她,毕竟Spark、Impala、Kylingence、Presto、Trino、Clickhouse、Starrocks等才是当红明星,谁还会正眼看她一眼呢?

回头看当时的Hadoop、Hive生态现在被新兴技术挖墙脚,挖的还剩下什么:

  • MapReduce计算框架被Spark、Flink替代;

  • HDFS被对象存储替代,开源的对象存储系统有MinIo、商业版的有S3、OSS、OBS等;

  • YARN资源调度框架已经让位于Mesos、Kubernetes等;

  • Hive分析查询被Impala、Kylingence、Presto、Trino取代,当然也有企业尝试应用Flink做OLAP。另外 DorisDB、StarRocks、Clickhouse、Snowflake等更不用说。

好像就剩下一个元数据系统:Hive metastore。

我们再看 Hadoop、Hive在吃红利的这些年,新兴技术都在干什么:

  • Spark 推出了基于RDD的内存计算模型,相比Hive MapReduce计算框架性能呈数量级的提升,同时基于微批实现了流计算能力;

  • Flink 泛化了Spark的微批计算范式,除了支持流计算能力,还统一了流批一体,通过Tablestore集成了数据存储;
    DorisDB、StarRocks、Clickhouse等通过自立门户,在自家存储的基础上针对性优化,进行极致查询性能提升;

  • impala、Presto、Trino 绕过Mapreduce,直接对接元数据和HDFS,通过内存 Pipeline 达到快速交互式查询的目标,同时支持跨数据源的联邦查询;

那Hive是不是湮灭了?瘦死的骆驼比马大,Hive的影响力也还是在的,她的客户遍布大大小小的企业中,使得Spark、Flink、Impala、Trino等在不断地开疆拓土中仍不得不给她几分颜面-向其靠拢。

再看看Hive为维持庞大基业,如何续命的:

  • 为了提升Mapreduce计算性能,Hive 支持了 tez;

  • Hadoop 除了支持HDFS,也支持了S3、OSS、OBS等(多亏了友商的赞助);

  • Hive 打不过 Spark,那就直接拥抱Spark,Hive执行引擎可以选配spark作为内置计算引擎;

  • Kafka、Spark、Flink 拥有了流,Hive也有了 Hive Streaming;

  • Spark、Flink、Trino支持了多数据源connector,Hive也有了类似八爪鱼的触角-HiveStorageHandler;

  • Flink 1.16支持了Hive SQl,并在Hive sql中支持了Streaming(Hive得叩谢Flink了)

  • Hive 支持了 Iceberg(Hive做了正确的事)

上面基本都是续命的大招,但是有些招,比如 :计算引擎支持 tez,计算模式支持Streaming,这些招是否有效果,用户是否买账,还不好说。但有几个招,很值得叫好:

1  拥抱Spark,计算引擎支持spark,相当于把Spark纳入Hive的麾下,Spark直接为Hive打工,想试用Spark的用户几乎无成本的切入Spark,这招可谓是事半功倍。同样的,Flink支持了Hive SQL,使得用户在不迁移HQL的情况下 享受了Flink的流式计算能力,这个效果是Flink免费送的,Hive 最好顺势将这一大礼集成过来。

2 Hive支持多数据源

这相当于补齐了Hive的传统短板,毕竟Hive天生设计就是在HDFS上,也许是受到了新框架的刺激,HiveStorageHander顺势拿下了MongoDB、ES、Casandra、Kudu、Mysql、Druid、Kafka、Hbase、Iceberg等:

32c01e4e670982ab08bd86e04ae49574.png

有了多数据源的支持,Hive也可以做联邦查询了,特别是在数仓建模上,不仅扩大了数据来源的范围,而且也不必将全部数据源数据都同步到数仓,减轻了ETL的压力,提升了数仓的效率。

但是目前对这些数据源的支持还很不完善,特别是联邦查询如果是做批计算,Hive慢点就慢点,但是如果是做交互式查询,那Hive需要做的事情就多了,想要补上Trino的能力,不是一朝一夕,所以明智的做法,Hive还是应该像集成Spark、Flink那样,直接拥抱Trino:Hive on Trino。

如此一来,同一套Hive sql语法,可以同时支持Spark、Flink、Trino计算引擎,用户爽得不要不要的~

3 支持数据湖Iceberg

不要小看了Iceberg,它可是社区送给Hive的最重磅的礼物,因为湖才是未来,而且Hadoop的基业就是湖,用户已经接受了数据入Hive湖的习惯认知,如果某项技术不支持湖,在用户眼里就已经偏离了主流,比如Druid、DorisDB、Clickhouse等,如果不支持湖,可能就要成为少数有钱的主的特供了。

Iceberg虽然只是一个jar包,对现有Hive毫无代码侵入性,可谓是即插即拔。Iceberg作为数据湖的技术之一,对Hive现有的技术可谓是既“破”又“立”:破的是HDFS不支持事务更新,“立”的是在HDFS(包括对象存储)基础上新的表存储格式。本来Hadoop勉强也称得上是数据湖技术,无奈它存在过多的致命伤,这次好了,Iceberg直接给Hive移植了新的“心脏”-存储。

对Hive来讲,当前做的仍然应该是 欣然接受,并且 顺势 收了Hudi、Delta lake。

还记得我在《大数据平台到底该如何设计?》这篇文章中给出的大数据平台设计准则吗:

7c51bb2f8f3f7f0a32bdef8b1574a9d4.png

如果Hive能够做到以上,那么Hive就是当之无愧的超级统一大平台,集 统一SQL、统一计算引擎、统一存储于一身,关键是有自家的HiveMetastore啊,以及众多忠实的用户,这是目前Hive最值钱的资产了。

试问,Hive一统江湖,谁与争锋?

Spark?Flink?Trino?能统一SQL吗?假设能统一SQL,能统一引擎吗?

Apache Kyubbi?

一起来看看Kyuubi的部署方式:主要是在其部署目录下$KYUUBI_HOME/conf/kyuubi-env.sh 中设置计算引擎代码包HOME,以及当前引擎类型:kyuubi.engine.type。

比如,如果设置Spark为当前计算引擎,只需要配置:

SPARK_HOME=~/Downloads/spark-3.2.0-bin-hadoop3.2

如果设置Flink为当前计算引擎,需要配置:

FLINK_HOME=/Downloads/flink-1.15.1  
kyuubi.engine.type FLINK_SQL

如果设置Trino为当前计算引擎,除了提供Trino客户端包外,还需要以下配置:

kyuubi.engine.type TRINO
# Your trino cluster server url
kyuubi.session.engine.trino.connection.url http://localhost:8080
# The default catalog connect to
kyuubi.session.engine.trino.connection.catalog hive


其他配置信息则需要配置在:$KYUUBI_HOME/conf/kyuubi-defaults.conf

部署Kyuubi之后,就可以使用Hive兼容的Beelione工具连接使用了:

bin/beeline -u 'jdbc:hive2://localhost:10009/

关于Kyuubi的更多信息可以参考:

https://kyuubi.readthedocs.io/en/v1.6.1-incubating/quick_start/quick_start.html

从其部署和使用方式可知,Kyuubi的一个部署实例,只能使用一种计算引擎,输入的SQL语法是当前引擎对应的SQL,不能够动态切换SQL引擎。不管怎么样,能做到这点,已经很令人兴奋了。另外,Kyuubi宣称支持多租户,这可是企业级的服务产品啊。再看看Hive,连数据目录Catalog都支持不好,遑论多租户,可见当时的设计人员眼界之高~

Hive具备先发优势,而且家底殷实,但是Hive革新,任重道远,最终的结局到底是凤凰涅槃还是扶不起的阿斗,我们拭目以待!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值