图灵访谈 : IBM美女工程师Holden Karau:寻找友善的人一起共事
Holden Karau是IBM首席软件工程师,负责改进Apache Spark并协助开发者向Spark贡献代码。Holden曾是Databricks的软件开发工程师,负责Spark和Databricks Cloud的后端开发。她曾在Google和亚马逊从事软件开发工作,分别负责Google+的后端开发和亚马逊的智能分类系统。她在大数据和搜索领域有着丰富的经验,精通Scala, Scheme, Java, Perl, C, C++, Ruby等语言。Holden著有《Spark快速数据处理》,与人合著有 《Spark快速大数据分析》 。
问:你是《Spark快速数据处理》和 《Spark快速大数据分析》 的作者,这两本书有什么区别?你的写作过程是什么样的?
《Spark快速数据处理》是第一本关于Apache Spark的书,所以这本书的重点是告诉人们如何开始。 《Spark快速大数据分析》 则是在一段时间之后写的,那时Spark SQL和其他重要组件已经加入了Spark,这本书更加专注于细节,但是仍然适合那些对Spark不甚了解的人。
在这两本书之间,我的写作实践发生了很大的变化,原因有几个。 《Spark快速大数据分析》 是一本合作完成的书,从早期开始,在技术审校的帮助下我们就提前发布了几个版本,所以我们可以轻松地做出改动,并且我们收到的反馈对于完成这本书来说非常有效。在写作 《Spark快速大数据分析》 时,我还在Databricks工作,所以从程序委员会那里进行事实核查或获得反馈都是非常容易的,因为他们中的很多人就在我的办公室里。
问:你在Databricks的工作和在IBM的工作之间最大的区别是什么?你是否需要做出哪些工作上的调整?
对于日常工作来说,我在IBM的最大改变可能就是:我有更多时间专注地从事关于Spark的工作了。当我在Databricks时,我必须得花很多时间从事Databricks Cloud(商业产品)的相关工作。还有其他的一些变化,比如Databricks拥有Spark的大部分代码提交者,所以在那里我的问题会更快得到回答,代码评审的速度也更快。当然,还会有小公司和大公司之间的差别,但是我们的小组做起事来却出乎意料地灵活。
问:R语言是开源世界最流行的数据分析、统计计算及制图语言,作为Spark的长期开发者之一,你认为Spark会提供R语言的接口吗?
这件事已经发生了!SparkR项目现在正式成为Spark的一部分,同时Spark也开始提供R API。但是作为最新的组件,SparkR还有很长的路要走,要想和Scala做到功能对等还需要一段时间。
问:很多企业从关系型数据库向大数据处理工具(如Spark)转型的过程中都遇到了困难。对于这样的公司你有哪些建议?
我认为从传统关系型数据库向分布式系统转型的过程中会涉及到很多关于开发者的改变。Spark SQL可以弥补一些分析方面的差距——但是我认为很重要的一点在于:开发者必须增进对分布式系统在实践中的工作方式的理解。与其上来就重写现有的复杂系统,还不如在开始时重新搭建一个新项目(也许换一个新数据源),这会帮助开发者们建立起具有指导性的知识系统。
问:很多人认为Spark会凭借优秀的性能推翻Hadoop的统治,你同意吗?大数据处理技术(如Hadoop, Pig, Tez, Hive,以及Spark)的生态系统在未来将会怎样?
随着时间推移,很难预测大数据系统在未来将会发生什么,尤其在数量如此多的人都在参与开源社区的情况下。我相信久而久之,Spark会取代很多Map/Reduce系统和定制化系统,而其他系统则会把Spark作为执行引擎。但是仍然会有更适合定制化系统来完成的用例。
问:对于数据分析的不同环境来说,你如何在命令行和Spark之间做出选择?
通常来说,我使用命令行会更加得心应手,但是对于调试工作之外的探索性工作来说,使用notebooks这样的工具确实很有帮助。当然,你也可以用Databricks Cloud,但是我使用Jupyter和Zeppelin的体验也很不错。然而对于生产环境下的工作来说,我认为notebooks很有局限性,难以测试,所以在我渡过探索阶段之后,我会使用更加传统的jar包。
问:Hive On Spark和Spark SQL是什么关系?你认为哪个项目在未来会更有潜力?
Spark SQL是Spark的一个重要组件——通过引入Datasets,Spark在已有的关系型API的基础上把函数式编程带入到了Spark SQL中。我对Spark SQL的未来充满期待。
问:对于已经熟练掌握Hadoop的人来说,学习Spark的路线是什么样的?你推荐阅读源码这种学习方式吗?
我的观点可能有些不客观,我认为 《Spark快速大数据分析》 会是一本进入这个领域的好书——但是在Spark shell里做一些探索性的工作也是快速进入状态的好办法。对于Spark现在所处的时期来说,如果你想成为Spark开发者,阅读源码是很有帮助的,但是对于终端使用者来说,阅读源码通常是没有必要的,除非你想要使用最新的特性。
问:如何高效地阅读像Spark和Hadoop这样大型开源项目的代码?有哪些工具可以帮得上忙?
我认为阅读Spark源码对于想要向Spark贡献代码的人来说是一项绝佳的活动。因为我是一位Emacs使用者,所以我喜欢用Magit,但是我也用过Ensime。很多其他开发者也觉得IntelliJ很好用。
问:中国的女性程序员比较少,特别是在“大数据”领域。对于那些想要成为开发者或软件工程师的女性,你有哪些建议?
我希望我能给出更好的建议,但是显然我的建议都从我的个人经历出发,而每个人情况都是不同的。话虽如此,但是我发现加入Women Who Code和Double Union(旧金山本地的女性黑客空间)这样的团体真的很有帮助,无论对于学习还是建立网络来说。
我认为在起步时参与开源软件开发是一种积累经验、增加资历的好方法,同时也能帮助你面试。话虽如此,但是对于某些开源项目来说,社区里会有很多明争暗斗,所以我总是尽可能地寻找友善的人,或者和我的朋友们一起工作。另外,我认为做分享是一种展示你的工作和结交领域内有趣的人的有效方法。