官术网_书友最值得收藏!

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億美元。

主站蜘蛛池模板: 京山县| 临夏市| 通海县| 庆阳市| 乌拉特中旗| 聊城市| 余干县| 义马市| 江川县| 合阳县| 双江| 延吉市| 柳江县| 彰化市| 阜宁县| 任丘市| 岳池县| 黑龙江省| 泰兴市| 英吉沙县| 饶河县| 吴桥县| 文登市| 石河子市| 雷州市| 逊克县| 庄浪县| 五原县| 武汉市| 凤台县| 木兰县| 宜昌市| 南华县| 昌吉市| 如皋市| 涟源市| 手游| 象山县| 根河市| 富裕县| 永嘉县|