闪电般的统一分析引擎

Preparing Spark Releases

Background

Spark中的发布管理者角色意味着您要负责一些不同的事情:

  1. 准备设置
  2. 准备发布候选者:
    1. 切断发布分支
    2. 通知社区时机
    3. 使用组件引线清理JIRA
    4. 通过必要的版本更新在该分支中进行代码更改
  3. 运行发布的投票过程:
    1. 使用自动化工具创建候选版本
    2. 进行投票和分类问题
  4. 完成并发布发布:
    1. 更新Spark网站
    2. 撰写发行说明
    3. 宣布发布

Preparing your setup

如果您是新发布管理器,则可以从以下内容中继续阅读该过程:

  • 发布签名https://www.apache.org/dev/release-signing.html
  • 用于签署https://www.apache.org/dev/openpgp.html的gpg
  • svn https://www.apache.org/dev/version-control.html#https-svn

Preparing gpg key

如果您已经上传了密钥,则可以跳过此部分.

生成gpg密钥后,您需要将密钥上传到公共密钥服务器. 有关详细信息,请参阅https://www.apache.org/dev/openpgp.html#generate-key .

如果要在另一台计算机上进行发布,则可以通过gpg --exportgpg --import命令将gpg密钥传输到该计算机.

最后一步是使用您的代码签名密钥https://www.apache.org/dev/openpgp.html#export-public-key更新KEYS文件

# Move dev/ to release/ when the voting is completed. See Finalize the Release below
svn co --depth=files "https://dist.apache.org/repos/dist/dev/spark" svn-spark
# edit svn-spark/KEYS file
svn ci --username $ASF_USERNAME --password "$ASF_PASSWORD" -m"Update KEYS"

Installing docker

用于创建候选版本的脚本通过docker运行. 您需要在运行这些脚本之前安装docker. 请确保您可以以非root用户身份运行docker. 有关更多详细信息,请参见https://docs.docker.com/install/linux/linux-postinstall .

Preparing Spark for Release

准备发行的主要步骤是创建发行分支. 这是通过标准的Git分支机制完成的,并且在创建分支后应向社区宣布.

为确保测试通过而对发布分支进行设置后,最好为发布分支设置Jenkins作业. 这些工作例如https://amplab.cs.berkeley.edu/jenkins/view/Spark QA Test/job/spark-branch-2.3-test-maven-hadoop-2.7/. 请咨询Josh Rosen和Shane Knapp以获得帮助. 还记得在https://amplab.cs.berkeley.edu/jenkins/view/Spark QA Test (Dashboard)/将新添加的作业添加到测试仪表板.

Cutting a Release Candidate

如果这不是第一个RC,则请确保自上一个RC以来已解决的JIRA问题被标记为" Resolved ,并且" Target Versions设置为此发行版本.

要跟踪针对此发行版的未决PR的任何问题,请在JIRA中使用类似此project = SPARK AND "Target Version/s" = "12340470" AND status in (Open, Reopened, "In Progress")的查询创建过滤器project = SPARK AND "Target Version/s" = "12340470" AND status in (Open, Reopened, "In Progress")

对于要使用的目标版本字符串值,通过查找与该目标版本有关的现有问题并单击该版本,找到与发行版相对应的数值(例如,找到一个针对2.2.1的问题,然后单击其目标的版本链接版本字段)

git log验证他们是否确实在新RC中创建了它. 检查带有release-notes标签的JIRA问题,并确保将它们记录在相关的迁移指南中以进行重大更改或稍后在网站上的发行新闻中进行记录.

还请检查RISELab Jenkins的所有构建和测试过程是否为绿色:https://amplab.cs.berkeley.edu/jenkins/特别是寻找Spark Packaging,QA编译,QA测试. 请注意,并非所有排列都在PR上运行,因此检查Jenkins运行很重要.

要裁减候选版本,有四个步骤:

  1. 为候选版本创建一个git标签.
  2. 打包发行版二进制文件和源代码,然后将它们上传到Apache分段SVN存储库中.
  3. 创建发行文档,并将其上传到Apache暂存SVN存储库.
  4. 将快照发布到Apache登台Maven存储库.

剪切候选版本的过程已通过dev/create-release/do-release-docker.sh脚本自动执行. 运行此脚本,键入所需的信息,然后等待其完成. 您也可以通过-s选项执行单个步骤. 请运行do-release-docker.sh -h并查看更多详细信息.

Call a Vote on the Release Candidate

发布投票发生在Apache Spark开发人员列表上(PMC正在投票). 查看过去的投票线程,看看如何进行. 电子邮件应采用这种格式 .

  • 使用https://s.apache.org/简短链接到JIRA的完整列表
  • 如果可能,在电子邮件中附上发行说明的草稿
  • Make sure the voting closing time is in UTC format. Use this script to generate it
  • 确保电子邮件为文本格式且链接正确

投票完成后,您还应该发送汇总摘要的电子邮件,其主题类似于[RESULT] [VOTE]...

Finalize the Release

小心!

此步骤不可取,因此请确保您选择了正确的登台存储库. 将工件移入发行版文件夹后,就无法将其删除.

投票通过后,要将二进制文件上传到Apache镜像,您可以将二进制文件从dev目录(应该是在其中进行投票的位置)移动到release目录. 这种"移动"是将内容添加到实际发行目录的唯一方法. (注意:只有PMC可以移动到发布目录)

# Move the sub-directory in "dev" to the
# corresponding directory in "release"
$ export SVN_EDITOR=vim
$ svn mv https://dist.apache.org/repos/dist/dev/spark/spark-1.1.1-rc2 https://dist.apache.org/repos/dist/release/spark/spark-1.1.1

# If you've added your signing key to the KEYS file, also update the release copy.
svn co --depth=files "https://dist.apache.org/repos/dist/release/spark" svn-spark
curl "https://dist.apache.org/repos/dist/dev/spark/KEYS" > svn-spark/KEYS
(cd svn-spark && svn ci --username $ASF_USERNAME --password "$ASF_PASSWORD" -m"Update KEYS")

验证资源是否存在于https://www.apache.org/dist/spark/中 . 他们可能需要一段时间才能看到. 这将在整个Apache网络中进行镜像. 在https://checker.apache.org/projs/spark.html上检查发布的发布检查结果.

对于Maven Central信息库,您可以从Apache Nexus信息库管理器发布 . 这已由release-build.sh publish-release步骤填充. 登录,打开暂存库,找到已投票的库(例如,orgapachespark-1257代表https://repository.apache.org/content/repositories/orgapachespark-1257/),选择并单击发布并确认. 如果成功,它应该显示在https://repository.apache.org/content/repositories/releases/org/apache/spark/spark-core_2.11/2.2.1/下,并在https:// repository下显示. apache.org/content/groups/maven-staging-group/org/apache/spark/spark-core_2.11/2.2.1/(查找正确的发行版本). 一段时间后,它将自动同步到Maven Central .

Upload to PyPI

您需要spark-upload帐户的凭据,可以在此消息中找到(仅对PMC成员可见).

可以使用twine上传工件. 赶紧跑:

twine upload --repository-url https://upload.pypi.org/legacy/ pyspark-{version}.tar.gz pyspark-{version}.tar.gz.asc

调整与新版本匹配的文件的命令. 如果由于某种原因麻线上传不正确(例如,http故障或其他问题),则可以将工件重命名为pyspark-version.post0.tar.gz ,从PyPI中删除旧工件并重新上传.

Publish to CRAN

使用此表单完成发布到CRAN. 由于还需要其他手动步骤,因此也请与PMC联系.

Remove RC artifacts from repositories

投票通过后,将批准的RC移至发行版本库中,应从登台存储库中删除RC目录. 例如:

svn rm https://dist.apache.org/repos/dist/dev/spark/v2.3.1-rc1-bin/ \
  https://dist.apache.org/repos/dist/dev/spark/v2.3.1-rc1-docs/ \
  -m"Removing RC artifacts."

确保还从Apache Nexus Repository Manager中删除未发布的登台存储 .

Remove Old Releases from Mirror Network

Spark始终保持镜像网络中每个分支的最新维护发布. 要删除旧版本,只需使用svn rm:

$ svn rm https://dist.apache.org/repos/dist/release/spark/spark-1.1.0

您还需要更新js/download.js以指示该发布版本不再被镜像,以便在站点上生成正确的链接.

还花一点时间检查从branch-2.2开始的HiveExternalCatalogVersionsSuite.scala ,并查看是否需要进行调整,因为该测试依赖于先前版本的镜像下载.

Update the Spark Apache Repository

检出已通过的候选发布的带标记的提交,并应用正确的版本标记.

$ git tag v1.1.1 v1.1.1-rc2 # the RC that passed
$ git push apache v1.1.1

Update the Spark Website

网站存储库位于https://github.com/apache/spark-website .

建议不要删除最新RC的生成文档,以便我们可以将其直接复制到spark-website,否则您需要重新生成文档.

# Build the latest docs
$ git checkout v1.1.1
$ cd docs
$ PRODUCTION=1 jekyll build

# Copy the new documentation to Apache
$ git clone https://github.com/apache/spark-website
...
$ cp -R _site spark-website/site/docs/1.1.1

# Update the "latest" link
$ cd spark/site/docs
$ rm latest
$ ln -s 1.1.1 latest

接下来,更新Spark网站的其余部分. 查看如何记录以前的版本(所有HTML文件更改都由jekyll生成). 特别是:

  • 如果新版本是最新版本,请更新_layouts/global.html
  • 更新documentation.md以添加指向新版本文档的链接
  • 将新版本添加到js/downloads.js
  • 检查security.md是否有任何要更新的内容
$ git add 1.1.1
$ git commit -m "Add docs for Spark 1.1.1"

然后,创建发行说明. 转到JIRA中发行页面,从列表中选择发行版本,然后单击"发行说明". 复制此URL,然后在s.apache.org上创建一个简短URL,登录到您的Apache帐户,然后选择ID作为spark-2.1.2类的东西. 在releases/_posts下创建一个新的发布帖子,以包含此简短URL.

然后运行jekyll build来更新site目录.

将更改合并到asf-site分支后,您可能需要创建后续的空提交以强制ASF的git与网站以及github镜像之间进行同步. 由于某种原因,同步对于该存储库似乎不可靠.

在相关说明中,请确保版本标记为在JIRA上发布. 转到上面的发布页面,例如https://issues.apache.org/jira/projects/SPARK/versions/12340295 ,然后单击右侧的"发布"按钮并输入发布日期.

(通常,这仅适用于主要和次要版本,但不适用于补丁程序发行版)可以通过此脚本自动生成参与者列表. 它接受与当前版本相对应的标签以及与先前版本相对应的另一个标签(不包括维护版本). 例如,如果要发布Spark 1.2.0,则将当前标签设置为v1.2.0-rc2,将先前标签设置为v1.1.0. 生成初始贡献者列表后,很可能会出现有关作者姓名翻译不正确的警告. 要解决此问题,请运行此其他脚本 ,该脚本从Github和JIRA获取潜在的替代品. 例如:

$ cd release-spark/dev/create-release
# Set RELEASE_TAG and PREVIOUS_RELEASE_TAG
$ export RELEASE_TAG=v1.1.1
$ export PREVIOUS_RELEASE_TAG=v1.1.0
# Generate initial contributors list, likely with warnings
$ ./generate-contributors.py
# set JIRA_USERNAME, JIRA_PASSWORD, and GITHUB_API_TOKEN
$ export JIRA_USERNAME=blabla
$ export JIRA_PASSWORD=blabla
$ export GITHUB_API_TOKEN=blabla
# Translate names generated in the previous step, reading from known_translations if necessary
$ ./translate-contributors.py

另外,如果您希望为较大补丁程序的开发者提供更多的特殊功劳,则可以使用以下命令来识别较大补丁程序. 必须格外小心,以确保不计入先前发行版中的提交,因为git无法轻易地将返回移植到不同分支的提交关联起来.

# Determine PR numbers closed only in the new release
$ git log v1.1.1 | grep "Closes #" | cut -d " " -f 5,6 | grep Closes | sort > closed_1.1.1
$ git log v1.1.0 | grep "Closes #" | cut -d " " -f 5,6 | grep Closes | sort > closed_1.1.0
$ diff --new-line-format="" --unchanged-line-format="" closed_1.1.1 closed_1.1.0 > diff.txt

# Grep expression with all new patches
$ EXPR=$(cat diff.txt | awk '{ print "\\("$1" "$2" \\)"; }' | tr "\n" "|" | sed -e "s/|/\\\|/g" | sed "s/\\\|$//")

# Contributor list
$ git shortlog v1.1.1 --grep "$EXPR" > contrib.txt

# Large patch list (300+ lines)
$ git log v1.1.1 --grep "$expr" --shortstat --oneline | grep -B 1 -e "[3-9][0-9][0-9] insert" -e "[1-9][1-9][1-9][1-9] insert" | grep SPARK > large-patches.txt

Update `HiveExternalCatalogVersionsSuite`

发生新版本时,此后不久必须更新HiveExternalCatalogVersionsSuite PROCESS_TABLES.testingVersions . 此列表应包含所有活动维护分支中的最新版本,并且不能包含更多. 例如,在撰写本文时,其值为val testingVersions = Seq("2.1.3", "2.2.2", "2.3.2") . 发布时," 2.4.0"将添加到列表中. 当不再维护分支时," 2.1.3"将被删除(并从Spark dist镜像中删除). 释放" 2.3.3"后," 2.3.2"将变为" 2.3.3".

Create an Announcement

一切正常后(网站文档,网站更改),在网站上创建公告,然后将电子邮件发送到邮件列表. 要创建公告,请在news/_posts下创建一个帖子,然后运行news/_posts jekyll build .

享用您选择的成人饮料,并祝贺您发布了Spark.

by  ICOPY.SITE