Spark
开源地址:https://spark.apache.org/
开源的、强大的计算引擎。
- 官网下载Release,比如:Spark 3.1.2
- 进入解压目录,运行:
sbin/start-master.sh
启动 Spark Master - 运行:
sbin/start-worker.sh spark://_YOUR_HOST_NAME_:7077
启动 Spark Worker
Spark Standalone集群启动成功!
Kyuubi
开源地址:https://kyuubi.apache.org/
支持多租户的升级版的Hive Thrift Server。大大降低了Spark的使用门槛,只用SQL就能使用Spark。
- 官网下载Kyuubi Release, 由于我们已经单独启动了Spark Standalone集群,可以下载 kyuubi-x.y.z-bin-without-spark.tar.gz
- 修改 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 - 运行
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)!让我们来实际体验一下吧。
- 下载iceberg代码, 并编译,将编译好的 iceberg-spark3-runtime-*.jar 文件(比如: spark3-runtime/build/libs/iceberg-spark3-runtime-fa17d82.jar) 放到 Spark 的 jars 目录下。
- 比如: 我打算把所有数据文件放在
/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
- 重启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执行引擎
{{m.name}}
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/142591.html