前语

改了 N 次,和 Apache Spark 开源社区的大佬交流了2 个星期,我的 Pull Request 总算被接受了!!!

怎样成为 Apache Spark 的 Contributor?

感兴趣的小伙伴能够拜访下面的链接来感受一下开源社区的魅力,大佬们真的都很热心,对我的 PR 提了许优先级多贵重的定见!

[SPARK-35907][CORE] Instead of File#mkdirs, Files#createDirectories is expected. by Shockang Pull Request #33101 ap交流作文ache/spark

正文

下面对我这次提交 PR 并被接收的进程做一个总结,假设也有对开源社区感兴趣而且想成为 Apache Sparkescala Contributor 的小伙伴们读了下面的文章能帮忙你少走许多弯路~

成为 Apache Spa交流的重要性rk Contributor 最根柢的要求:

  1. 比较扎实的 Java 和 Scala 编程功底(不懂 Scala 特别是一些高级语scala怎样读法的用法,你根柢看不懂 Apache Sp输入框变小了了ark 的源码,Scala 的学习曲线比较峻峭,github是干什么的不会 Java 想学懂 Scala 也不太或许,Apache Spark 的源码中也有一部分是由 Java 编写的)
  2. 还 OK 的英语水平(我的英语也不是很好,但是我最少能优先级英语看得出谷歌翻译出的英语好不好~( ̄▽ ̄~)(~ ̄▽ ̄)~git指令 这个也挺重要的,因为许多==注释==得你自己来写,你最少得保证注释没啥问题,不会被老外笑)
  3. 关于 Apache Spark 比较了解, Apache Spark 的一些根柢概念你得一望而知(比方下面提到的 Worker 你得知道是输入框测试用例啥?有什么效果?)
  4. 一个 github 账号和一个 JIRA 账号scala怎样读加上不错的网络(吐槽一句,github 家庭拜访太坑了,经常拜访不到)

下面是 Apache Spark 的编程言语组成:

怎样成为 Apache Spark 的 Contributor?

fork

怎样成为 Apache Spark 的 Contributor?

fork 到你自己的 github 仓库后记住 clone 到本地进行开发

Github Actions

需求打开GitH输入框变小了怎样回事ub Actgit指令ions作业流程进行查验。

这样在每一次 git push 后 Github 都会主张主动化查验你提交的代码,这个交流也必需求打开的,社区的规则。

Apache Spark交流的重要性心得体会运用GitHub Actions结束继续集成和广泛的主动化。

怎样成为 Apache Spark 的 Contributor?怎样成为 Apache Spark 的 Contributor?

下面是一个反例:

我第一次提交 PR 时就没有打开 GitHub Actions ,成果报错了

Workflow run detecti优先级英语on failed

Unable to detect优先级回转 the wor交流作文kflow run for testing the changes in your PR.
怎样成为 Apache Spark 的 Contributor?

代码预交流的重要性

首要,gitee重要的是要找到能够批改代码的当地

先说下我是怎样找交流技巧许医师攻略版电视剧到在哪里批改 Apache Spark 的代码的

我之前一直在阅读 Apache Spark 的源码,在我读到 Worker 主张的代码时(这是归于gitee Spark Core 里边的代码)

  /**
* Create a directory given the abstract pathname
* @return true, if the di交流的三要素是什么rectory is successfully created; otherwise, rescala编译后的文件的后缀名turn false.
*/
def createDirectory(dir: File): Boolean = {
try {
// This sporadically fails - not sure why ... !dir.exists() && !dir.mkdirs()
// So attempting to create and then checkgithub中文官网网页 if directory was created orscala怎样读 not.
dir.mkdirs()
if ( !dir.exists() || !dir.isDirectory) {
logError(s"Failed to creat优先级调度算法e directory " + dir)
}
dir.isDirectory
} catch {
case e: Exception =>
logError(s"Failed to create directory " + dir, e)
false
}
}

代码节选自 org.apache.spark.util.Utils 类

Worker主张的时分会调用上面的东西类办法创立作业目录。

我留神到注释里边的这句话

This sporgit指令a输入框测试用例dically fails - not sure why ...

我觉得 Apache Spark 作为顶级的开源项目,源码里边不应该出现这样不谨慎的话giti轮胎

File.mkdirs() 这scalance个办法作为 Java 程序员应该都比较了解,这是用来创立目录的,即便父目录不存在也没有联络。

这个办法或许会创立失利,在创输入框代码建失利的时分会回来 false(虽然此时父目录或许现已创立了) ,构成失利的原因有:

  1. 权限问题(这是最常见的)
  2. IO 失Git常(这和操作系统相关)
  3. 文件现已存在了

按照我的原意,我输入框变小了怎样回事第一次提交 PR 只想改一改注输入框怎样调巨细释(我是按照 注释 -> 优化代码 –gitee> 修正 bug -> 需求开发 这样的路子走的,这也是大部分新人优先级排序 Contributorgithub是干什么的 的展开道路 )

我正准备把上面的失利原因按照英文加入到源码里边进行提交,这时分我想起了 JDK7 中新增了一个东西类 java.nio.fi输入框怎样调巨细le.Fscala编译后的文件是以什么结束iles,里边有一个方优先级排序法 Files.createDirectories()

曾经我在写IO东西类的时分还特别研讨了一哈优先级是什么意思 ⊙▽⊙

这个办法完全能够替代 File.mkdirs()。

我接着细心的研讨了一下 Files.createDirectories() 的源码,我发现这个方优先级法比较 Filescalable.mkdirs() ,==在异常处理方面愈加的有优势==,Fi交流的艺术le.mkdirs() 创立失利了只会回来scalar false,输入框跑到上面了怎样办就算出异常了也只会抛出SecurityException。而 Files.createDirectories() 的异常处理机制愈加的和睦,权限问题抛出SecurityException,操作系统有问题抛出IOException,文件现已存在抛出Fi输入框变小了怎样回事leAlreadyExistsException(这也是IOException的子类)

Files.cre输入框跑到上面了怎样办ate交流才能Directories() 失优先级排名是什么意思常处理机制能够说完爆 File.mkdirs() ,可巧的是交流才能, not surscalabilitye why 关于 Files.createDirectories() 来说根柢就不会存在,它在抛出的异常里边会明晰的表示出到底是什么原因导致的创立失利。

我意识到这是个不错的输入框怎样恢复正常批改点,我接着查找了 Apache Spark 的源码,源码里边有不少的 File.mkdirs()

所以我就决议提交 PR 了,代码如下所示

/**
* Create a directory given t输入框测试用例he abstract pathname
*输入框变小了怎样回事 @return true, if the directory is successfully created; otherwise, return false.
*/
def createDirectory(dir: File): Boolea交流n = {
try {
// SPARK-35907:输入框代码 The check was required by File.输入框怎样调巨细mkdirs() because输入框图片 it could sporadscala反编译后是ically
// fail silently. After switching交流才能 to Files.createDirectories(), ideally, there should
// no longer be silent fails. But the check is kept for th优先级回转e safety concern. We can
// remove the check when we're sure that Files.createDirectories(交流的重要性心得体会) would never fail sil优先级c言语ently优先级c言语.
Files.creagiti轮胎teDirectories(dir.toPath)
if ( !dir.exists() || !dir.isDirectory) {
logError(s"Failed to create di优先级是什么意思rectory "优先级最高的运算符 + dir)
}
dir.isDirectory
} catch {
case e: Exception =>
logError(s"Failed to create directory " + dir,github中文官网网页 e)
fgithubalse
}
}

这是和社区大佬交流后输入框跑到上面了怎样办的终究版本,只节选了一部分和上面的代码对应起来便利咱们了解

push

留神 push 之后要时刻重视 GitHub Actions 里边的查验用例是不是运行成功了(我就碰到几回分明没错成果查验用例跑失利了,要多重试)
怎样成为 Apache Spark 的 Contributor?

JIRA

在 github 提交 PR 之前,必定要在 Apache Spark 的 JIRA 上面提交一个 issue

Apacgithub是干什么的he Spark 的giti JIRA 拜访网址

怎样成为 Apache Spark 的 Contributor?

提交格局能够scalability参阅交流技巧和办法我的issue:

SPARK-35907 Instead of File#m输入框怎样恢复正常kdirs, Files#createDirectories is expected

提交 PR

怎样成为 Apache Spark 的 Contributor?

留神这儿要切换成你提交的代码分支,最好运用 JIRA 上面的 issue 号

PR 格局要求

下面的格局在提交 PR 后会主动显现在输入框里边,这儿起到一个阐明阐明的效果

[SPARK-xxxxx 即上面相关的 JIscala怎样读RA 的 issue交流的重要性心得体会][涉及到的模块比方 CORE ] 标题
### What changes were proposed in this pull request?
这次 PR 中希望带来哪些改动?便是阐明一下哪些当地的代码改动了。
### Why are the changes needed?
为什么需求这些改动?第一次提交 PR 的最好想一个比较好的理由能够压服 commiter 把你的代输入框测试用例码合入 master。
### Does this PR introduce _any_ user-facing change?
这次 PR 是否有面向用户层面的改动?留神是任何面向用户escala层面的改动都得写 Yes,而且scalability要写出scalability哪些改动是面向用户的。
### How wa交流的重要性心得体会s this patch tgithub中文官网网页ested?
这个 patch 是怎样查验的?这个很重要,第一次提交 PR 要想输入框怎样调巨细成功必定要写十分完善的查验用例。

下面是我提交的 PR,能够结合上面一起来了解

[SPARK-35907][CORE] Instead of File#mkdirs, Files#createDirectori输入框变小了怎样回事es is expected
### W交流才能hat changes were proposed igit教程n this pu输入框图片ll reque优先级越小越优先吗st?
The code of meth交流技巧od: crGiteateDigit教程rectory in class: org.a优先级最高的运算符pache.spark.util.Utilscalar是什么意思s is输入框跑到上面了怎样办 modifgit指令ied.
### Why are the changithubges needed?
To solve the problem of ambiguous exc输入框测试用例eption handling in tradition交流技巧al IO creating directories.
What's morscalare, there shouldn't be an improper comment in Spark's source code.
### Does this PR introduce _输入框测试用例any_ user-facing change?
Yes
The modified method would be called to create t优先级英语he working directory优先级行列 when Worker starts.
The modified method would be called to create local directori输入框测试用例es forGit storing优先级 block data when优先级 the class: DiskBlockManager instantiates.
The modifi交流技巧许医师攻略版电视剧ed method would be called to create a temporary directory inside the given parent directory优先级越小越优先吗 in several classes.
### How was this pscalar是什么意思a交流才能tch tested?
I have provided test cases as much as possible.

交流

==重要性 MAX==

根柢上和上面的写代码同等级重要,代码虽然写出来了,你得压服 Committer 把你的代码合入 master,否则你代码写再多都没用!

必定要交流的三要素是什么和社区的各位大佬多交流,或许会有多个 Contributor 对你的提交有一些主张,必定要==回复他们==。当然 Committer 的主张是优先级 MAX 的,因为只需他们才有把你的代码合入master 的权限

这儿就体现出英语好的重要性了,就不会和我相同还要凭借谷歌翻译(百度翻译优先级是什么意思)来交流,每一次输入框测试点翻译后都得改一改

┭┮﹏优先级英语┭┮

怎样成为 Apache Spark 的 Contributor?

成功合入 master

最优美的文字 o( ̄︶ ̄)o

怎样成为 Apache Spark 的 Contributor?

总结交流作文

代码很重要,查验很重要,交流很重要