Delta Lake 学习笔记(一)

2020-08-05 15:55:43 浏览数 (1)

文章目录

  • 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 事务,和乐观锁以及写入数据提供的一致性读取等功能。

0 人点赞