专栏首页容器计算Delta Lake 学习笔记(一)

Delta Lake 学习笔记(一)

文章目录

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,包括本屌也是,其实算不上熟悉,最多叫做会用一点点。由于大家本地环境千差万别,我这里只说说我本地环境导入项目时候遇到的一些问题。

➜  /tmp sw_vers
ProductName:	Mac OS X
ProductVersion:	10.12.6
BuildVersion:	16G1114

先来看看项目的基本构成。

➜  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 目录下。

➜  build git:(master) tree
.
├── sbt
├── sbt-config
│   └── repositories
└── sbt-launch-lib.bash

1 directory, 3 files

看到 repositories 文件了吗,这个文件非常重要,因为是指定了官方提供的仓库地址,如果你本地/IDEA 的使用的 repo 跟官方提供的不一样,那么很可能有些依赖你死活都下载不到。来看看这个文件。

[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 工具编译的时候,速度回快很多。

nexus-aliyun:http://maven.aliyun.com/nexus/content/groups/public

这些配置搞好之后,就去搞一下 IDEA 的 sbt 配置。

留意上图红色方框,选择你的 sbt-launch.jar,然后配置一些 VM 参数如下。

-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 条评论
登录 后参与评论

相关文章

  • sbt 项目导入问题

    有用过 sbt 开发项目的同学应该都有这样的体会,换个环境,sbt 经常会出现编译项目出错的情况,导入 IDEA 又各种报错,尤其是在 github 上找到一个...

    runzhliu
  • 推荐系统浅谈

    通过将内容 (生产方) 与用户 (消费方) 进行匹配, 提供符合不同消费方各自偏好的内容, 在不同业务方的知识体系中可能会被称为: 智能分发, 个性化推荐, 千...

    runzhliu
  • 【Spark Operator】集成Airflow

    我们的任务流调度是采用 Airflow,画出 DAG 之后再按序执行,其中 Etcd 是我们很重要的组件,所以封装出一个 Airflow 的 Etcd Oper...

    runzhliu
  • centos 安装sbt

    1.yum install sbt 2.如果不行,则 curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rp...

    hbbliyong
  • sbt 项目导入问题

    有用过 sbt 开发项目的同学应该都有这样的体会,换个环境,sbt 经常会出现编译项目出错的情况,导入 IDEA 又各种报错,尤其是在 github 上找到一个...

    runzhliu
  • SBT 常用开发技巧

    SBT 一直以来都是 Scala 开发者不可言说的痛,最主要的原因就是官方文档维护质量较差,没有经过系统的、循序渐进式的整理,导致初学者入门门槛较高。虽然也有其...

    joymufeng
  • 斯坦福CS224W 图与机器学习5】Spectral Clustering

    第五节主要介绍了谱聚类,也可用于上一节提到的社区划分,另外还扩展了基于motif的谱聚类,主要分成两个部分:

    Houye
  • 【直播】我的基因组 38:我得了艾滋病?我是暴躁狂?

    请原谅我这次当了标题党,本题应该是,把vcf格式的变异文件注释上gwas的研究结果。 这个同样是为了丰富我们的variation文件,加强我们队每个变异位点的变...

    生信技能树
  • ThinkPHP上传文件

    <form id="upload" method='post' action="__URL__/upload/" enctype="multipart/form...

    公众号php_pachong
  • 分布式系统中所说的幂等性

    大型网站应用架构中,越来越多的SOA或Restful的web api的流行归功于http协议。 幂等性定义 Http协议涉及到一种重要性质:幂等性。 Http方...

    春哥大魔王

扫码关注云+社区

领取腾讯云代金券