7

Spark + Kyuubi + Iceberg = Lakehouse

 3 years ago
source link: https://my.oschina.net/u/4565392/blog/5230928
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Spark

开源地址:https://spark.apache.org/

开源的、强大的计算引擎。

  1. 官网下载Release,比如:Spark 3.1.2
  2. 进入解压目录,运行: sbin/start-master.sh 启动 Spark Master
  3. 运行: sbin/start-worker.sh spark://_YOUR_HOST_NAME_:7077 启动 Spark Worker

Spark Standalone集群启动成功!

Kyuubi

up-c5b7205dcc02d9ffce8a0d1a7ed4ef38314.png

开源地址:https://kyuubi.apache.org/

支持多租户的升级版的Hive Thrift Server。大大降低了Spark的使用门槛,只用SQL就能使用Spark。

  1. 官网下载Kyuubi Release, 由于我们已经单独启动了Spark Standalone集群,可以下载 kyuubi-x.y.z-bin-without-spark.tar.gz
  2. 修改 conf/kyuubi_defaults.conf 加入Spark的配置: 指定Spark集群位置、Spark Executor内存、打开强大的AQE(优化查询速度)
    spark.master=spark://_YOUR_HOST_NAME_:7077
    spark.executor.memory=5g
    spark.sql.adaptive.enabled=true
  3. 运行 bin/kyuubi run 启动kyuubi server。

于是就可以使用你熟悉的JDBC工具来连接Kyuubi(Spark)了, 比如:DataGrip

Iceberg

开源地址:https://iceberg.apache.org/

为了标准化大数据存储格式做努力。数据湖领域有三大巨头:

  • Databricks DeltaLake
  • Apache Hudi
  • Apache Iceberg

各有各的特点和优势,这里就不再描述了(网上已经有很多了)。

Iceberg的好处是:它的数据和描述这些数据的元数据是放在一起的! 这个非常重要!

之前Spark也能存储数据,但是元数据是放在内置的Hive(也可以单独部署Hive Metastore),相当于是存在了两个部分:

  • 数据文件(比如Parquet)是存储在文件系统(Local、S3、HDFS等)
  • 元数据是存储在关系型数据库,比如内置的Derby,或者外部MySQL、Postgresql

但是这个对于个人数据湖,或者新概念Lakehouse是不太适合了。我需要存储计算分离,需要不用时把价格降低到只有存储的费用(廉价的对象存储),所以,我需要把元数据和真实数据存储在一起。

而 Iceberg 更好的是,和 Dremio 一样,它支持按照目录层级来作为命名空间(Schema)!让我们来实际体验一下吧。

  1. 下载iceberg代码, 并编译,将编译好的 iceberg-spark3-runtime-*.jar 文件(比如: spark3-runtime/build/libs/iceberg-spark3-runtime-fa17d82.jar) 放到 Spark 的 jars 目录下。
  2. 比如: 我打算把所有数据文件放在 /Users/wubaoqi/data/iceberg_warehouse , 那我在 kyuubi_defaults.conf 中,增加配置:

    spark.sql.defaultCatalog=bwu spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions spark.sql.catalog.bwu=org.apache.iceberg.spark.SparkCatalog spark.sql.catalog.bwu.type=hadoop spark.sql.catalog.bwu.warehouse=/Users/wubaoqi/data/iceberg_warehouse
  3. 重启Spark 和 Kyuubi

在 DataGrip 中,我们可以执行如下命令来创建一个table1, 并插入一些数据:

CREATE TABLE bwu.db1.table1 (id bigint, data string) USING iceberg;
 
INSERT INTO bwu.db1.table1 VALUES (1, 'a'), (2, 'b'), (3, 'c');
 

当然,我们也可以把数据组成成各级子目录层级的形式。

CREATE TABLE bwu.db1.level1.level2.table123 (id bigint, data string) USING iceberg;
 
INSERT INTO bwu.db1.level1.level2.table123 VALUES (1, 'a'), (2, 'b'), (3, 'c');

我们来看一下,/Users/wubaoqi/data/iceberg_warehouse 下的目录结构吧

所有的内容(数据+元数据)都在一个目录。这个好处是:我可以完全关闭Spark,重新安装Spark,甚至我用Presto(Trino)等,都可以使用这些数据!

Iceberg目前可能还有很多坑,但是感觉方向对了就不怕路远。接下来,在更深入探索Iceberg的同时,还会使用dbt来深入把更多数据加入到这套“Lakehouse”,并调研 https://projectnessie.org/ 来做数据的git版本控制化。

本文由作者授权发布

作者:吴宝琪,某大数据公司架构师

更多阅读:

Apache Kyuubi(Incubating):网易对 Serverless Spark 的探索与实践

全票通过!网易数帆开源项目Kyuubi进入Apache孵化器

提效 7 倍,Apache Spark 自适应查询优化在网易的深度实践及改进

大数据实战:Kyuubi 与 Spark ThriftServer 的全面对比分析

网易数帆开源Kyuubi:基于Spark的高性能JDBC和SQL执行引擎


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK