Spark海量数据处理:技术详解与平台实战
上QQ阅读APP看书,第一时间看更新

1.3 如何通过GitHub向Spark贡献代码

GitHub是全球最大的社会化编程及代码托管网站,随着GitHub的出现,软件开发者才真正拥有了源代码,世界各地的人都可以比从前更加容易地获得源代码,将其自由更改并加以公开。如今,世界上众多的程序员都在通过GitHub来公开源代码,越来越多的项目也选择GitHub进行托管,其中有Linux这种史诗怪兽级项目,也不乏Akka这种精致小巧的项目。Apache Spark也将代码托管在GitHub上,这样就能利用GitHub强大的多人协作能力,轻而易举地使分散在世界各地素未谋面的程序员共同为Spark进行开发。GitHub独有的Pull Request机制,能够使不同背景、不同地域、互不相识的程序员产生化学反应,不得不说是一件很奇妙的事情。

我们从GitHub上面可以看到Spark Contributor中有了很多中国人的面孔,这是非常值得高兴的一件事情,作者也曾经通过向Spark贡献代码而成为Spark Contributor的一员。在大数据时代,中国很有希望实现弯道超车。本节将介绍如何通过GitHub的Pull Request功能,向Spark贡献代码。步骤如下。

(1)Fork Spark项目到自己账号下。你需要注册一个GitHub账号,这样你在GitHub下就有了一个自己的域名,然后,搜索Spark项目,并点击Fork。这样,在你的账号(域名)下面就会有一份Spark的代码仓库。这是属于你自己的代码仓库,你可以将其任意修改,而不会影响Spark项目,如图1-7所示。

图1-7 Fork Spark

(2)创建一个自己用于修改的分支。在创建之前,我们已经在自己的代码仓库上有了一份Spark代码的镜像,这时我们当然可以在这份镜像的master分支上直接进行修改并发起Pull Request。但是更好的做法是用自己的master分支去追踪Spark项目的master分支(因为master分支会随着Pull Request不断变化),并根据当前的master分支创建一个用于修改的分支,我们在该分支上进行修改,修改完成后,再发起Pull Request。我们创建了mybranch分支,如图1-8所示。

图1-8 创建自己的分支

(3)将当前的代码仓库切换到mybranch分支。现在我们准备对当前的新分支进行修改,因此切换到待修改的分支。如图1-9所示。

图1-9 切换到自己的分支

(4)修改代码。选定一个文件,点击修改按钮,进行修改,如图1-10所示。

图1-10 修改代码

修改完成后,commit到mybranch分支,如图1-11所示。

图1-11 提交到自己的分支

(5)处理冲突,提交Pull Request。修改完代码后,就可以准备提交一个Pull Request,在之前还需要考虑一个问题:在我们修改代码的这段时间,Spark的master分支是否已经接受了别人Pull Request而发生了变化,如果是的话,我们需要先处理冲突,再进行提交。

首先,我们通过Pull Request选项卡新建一个Pull Request,如图1-12所示。

图1-12 创建一个PR

这时候会出现你自己修改的版本与你要提交的Spark版本对比的页面,如图1-13所示。

图1-13 版本对比

在页面的后半部分,会显示两个版本之间的差异。如图1-14所示。

图1-14 处理冲突

这时候,如果你发现Spark的master版本已经接受了别人Pull Request而和你当初修改的版本相比发生了变化,那么你需要进行修改以防止出现冲突,处理完毕后,我们就可以完成创建Pull Request了,如图1-15所示。

图1-15 提交PR

我们可以在新建Pull Request页面将关联的Jira issue编号作为题目(如果有的话),便于Committer审阅,另外在正文中尽可能加上对该Pull Request的描述,最好写上关联Jira issue的链接,Jira会自动将该Pull Request进行关联。如果Spark Committer认可了你的Pull Request,那么具有写权限的Committer就会将你的Pull Request合并到Spark的master分支上。

完成了这5步,就完成了向Spark贡献代码的任务了。此外,在学习Spark的过程中,也可以将GitHub作为一个理想的源码阅读、心得记录、代码演练的环境。用好GitHub,将对你学习开源软件起到事半功倍的重要作用。

此外,上述贡献代码的步骤可以用Git的客户端以命令行的形式在本地完成,需要先熟悉Git shell操作,读者可以自行尝试。Git客户端可以在GitHub官网下载。

开源软件与Windows操作系统、Oracle数据库这类商业软件相比有着截然不同的创造力与参与感,甚至在某些理念上,开源软件与商业软件也是完全不同的,但是商业化是开源软件健康发展的必经之路。近年来,开源软件在商业化的道路上做过很多尝试与积极探索,如Databricks这种成功案例,也有一些不太成功的例子,如Hortonworks市值缩水至原来的五分之一,最后不得不和Cloudera合并,但总体来说,开源软件在商业化实践方面逐渐走出了一条路,如2018年10月,大名鼎鼎的全文搜索引擎软件Elasticsearch背后的商业化公司Elastic在纽交所上市,上市首日股价翻倍,达到了惊人的50亿美元;2019年1月,基于Kafka商业化运营的公司Confluent融资1.25亿美元,公司估值超过25亿美元。