文章目录
- 1 Overview
- 2 导入 Delta Lake 到 IDEA
- 3 Summary
1 Overview
今天 Spark AI Summit 2019 宣布开源了 Delta Lake 这个项目,关于这个项目的背景我就不赘述了,砖厂官网有很多介绍,包括项目的 Github 地址,大家可以上去看看,我也打算测一下,并且研究一下源代码,所以今天开始写一些探索这个项目的学习笔记。
2 导入 Delta Lake 到 IDEA
Delta Lake 是用 sbt 构建的项目,所以想要自行打包构建,大家还是需要熟悉一下 sbt 的。
不熟悉 sbt 的同学很容易从入门到放弃,IDEA 的 sbt 就更甚了,经常有各种各样的问题,而恰恰 Delta 又是一个使用 sbt 做依赖管理的项目,所以想要用 IDEA 愉快的研究 Delta 的代码,你必须要搞定把 Delta 导入到 IDEA 这个步骤。
其实之所以很多同学都导入不成功,是因为不太熟悉 sbt,包括本屌也是,其实算不上熟悉,最多叫做会用一点点。由于大家本地环境千差万别,我这里只说说我本地环境导入项目时候遇到的一些问题。
代码语言:javascript复制➜ /tmp sw_vers
ProductName: Mac OS X
ProductVersion: 10.12.6
BuildVersion: 16G1114
先来看看项目的基本构成。
代码语言:javascript复制➜ delta git:(master) ll
total 104
-rw-r--r-- 1 runzhliu staff 188B 4 25 18:20 CONTRIBUTING.md
-rw-r--r-- 1 runzhliu staff 21K 4 25 18:20 LICENSE.txt
-rw-r--r-- 1 runzhliu staff 946B 4 25 18:20 NOTICE.txt
-rw-r--r-- 1 runzhliu staff 5.3K 4 25 18:20 README.md
drwxr-xr-x 5 runzhliu staff 170B 4 25 18:20 build
-rw-r--r-- 1 runzhliu staff 4.0K 4 25 18:20 build.sbt
drwxr-xr-x 6 runzhliu staff 204B 4 25 19:26 project
drwxr-xr-x 4 runzhliu staff 136B 4 25 18:20 src
drwxr-xr-x 4 runzhliu staff 136B 4 25 19:27 target
-rw-r--r-- 1 runzhliu staff 40B 4 25 18:20 version.sbt
显然是一个 sbt 项目,那么查看官方 README.md,DB 已经提供了一套编译打包的脚本�放在/build 目录下。
代码语言:javascript复制➜ build git:(master) tree
.
├── sbt
├── sbt-config
│ └── repositories
└── sbt-launch-lib.bash
1 directory, 3 files
看到 repositories 文件了吗,这个文件非常重要,因为是指定了官方提供的仓库地址,如果你本地/IDEA 的使用的 repo 跟官方提供的不一样,那么很可能有些依赖你死活都下载不到。来看看这个文件。
代码语言:javascript复制[repositories]
local
local-preloaded-ivy: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
local-preloaded: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}
gcs-maven-central-mirror: https://maven-central.storage-download.googleapis.com/repos/central/data/
maven-central
typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sbt-ivy-snapshots: https://repo.scala-sbt.org/scalasbt/ivy-snapshots/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sbt-plugin-releases: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
bintray-spark-packages: https://dl.bintray.com/spark-packages/maven/
typesafe-releases: http://repo.typesafe.com/typesafe/releases/
看到了吧,里面有有些仓库如果你不熟悉 sbt,你可能根本没听过,这里我建议加一个阿里云的仓库,这样等下用 IDEA 的 sbt 工具编译的时候,速度回快很多。
代码语言:javascript复制nexus-aliyun:http://maven.aliyun.com/nexus/content/groups/public
这些配置搞好之后,就去搞一下 IDEA 的 sbt 配置。
留意上图红色方框,选择你的 sbt-launch.jar,然后配置一些 VM 参数如下。
代码语言:javascript复制-Dsbt.override.build.repos=true
-Dsbt.repository.config=/Users/runzhliu/workspace/delta/build/sbt-config/repositories
这些参数的意思是让你的 IDEA sbt 工具读取你指定的项目里刚刚修改过的 repositories 文件,这样他在拉取依赖的时候,就能够去那些仓库里面去下载了。
按照官网提供的命令,第一步是 compile 编译整个项目。在 IDEA 里可以利用 sbt shell 来输入 compile 命令,编译成功的样子如下。
之后我们就可以在 IDEA 中运行各种测试用例,打断点 debug 等学习了。
3 Summary
不熟悉 sbt 的同学很可能会因为导入 IDEA 的时候出现问题而放弃研究这个项目(我以前可能就是这样…),毕竟导入之后,我们才可以愉快的进行各种调试。后面会讲讲项目的结构和看看 Delta Lake 是如何实现 ACID 事务,和乐观锁以及写入数据提供的一致性读取等功能。