如何在 Hadoop 2.2.0 环境下使用 Spark 2.2.x

如果下面文章格式或图片不清晰,请参见原文:https://www.iteblog.com/archives/2305.html 或直接点击下面 阅读原文 即可进入。

到 Github 下载支持 Hadoop 2.5 及其之前版本的 Spark 2.2.1 :https://github.com/397090770/spark-2.2-for-hadoop-2.2

Apache Spark 2.2.0 于今年7月份正式发布,

  • 这个版本是 Structured Streaming 的一个重要里程碑,因为其可以正式在生产环境中使用,实验标签(experimental tag)已经被移除;

  • CBO (Cost-Based Optimizer)有了进一步的优化;

  • SQL完全支持 SQL-2003 标准;

  • R 中引入了新的分布式机器学习算法;

  • MLlib 和 GraphX 中添加了新的算法

更多详情请参见:Apache Spark 2.2.0新特性详细介绍。这么多的新特性,我们肯定很迫不及待地使用。但是如果你线上使用的 Hadoop 集群版本是 2.5 及其之前版本,那对不起了,这个版本的 Spark 你用不了了!因为从 Spark 2.2.0 开始移除了对 Apache Hadoop 2.5 及其之前版本的支持(详见:Remove support for Hadoop 2.5 and earlier)!


难道我们得为了使用 Apache Spark 2.2.x 而升级咱们的 Hadoop 集群?这代价也太高了吧。。那咋办呢?其实我们可以修改 Apache Spark 2.2.x 关于 Hadoop 及 YARN 的相关代码,让它支持 Apache Hadoop 2.5 及其之前版本就行了。


Spark 2.2.x 不支持 Hadoop 2.2.0 的可能原因

其实 Spark 2.2.0 不支持 Hadoop 2.5 及其之前版本,是因为这个版本的 Spark 移除了那些兼容不同版本的 Hadoop 代码。因为 Hadoop 2.x 后面几个版本添加了许多类方法等,这些方法和类在之前的 Hadoop 版本不存在,特别是 Hadoop 2.2(我公司目前还在使用 Hadoop 2.2.0 )、Hadoop 2.3 和 Hadoop 2.6 相比少了许多功能,为了支持不同版本的 Hadoop,Spark 代码里面就要编写很多兼容的代码,其中使用大量使用了反射机制。比如在 Client 类中创建 ApplicationSubmissionContext 的时候设置 spark.yarn.tags,Spark 2.1.0 是像下面实现的:

因为 Spark 2.1.x 支持 Hadoop 2.2.x,而 setApplicationTags 是从 Hadoop 2.4 开始引入的,所以为了兼容 Hadoop 2.2.x,不得不这么写。而 Spark 2.2.x 移除了对 Hadoop 2.5 及其之前版本的支持,所以上面的代码可以直接一行搞定:

而像这样的代码在 Spark 2.1.0 存在很多,估计是这些代码太臃肿而且难以维护,所以社区可能因为这个而宣布不再支持 Hadoop 2.5 及其之前版本了!

解决办法

好了,基于上面的分析,如果想在 Hadoop 2.2.x 上使用 Spark 2.2.x,我们完全可以把 Spark 2.2.x 移除的代码给弄回来,不就支持了吗?基于这个思路,我基于 Spark 2.2.1 和 Spark 2.1.0,将支持 Hadoop 2.2.x 的代码全部移回去了!然后可以直接把 Apache Spark 2.2.1 跑在 Hadoop 2.2.0 上,相关代码在:https://github.com/397090770/spark-2.2-for-hadoop-2.2。

上面代码在编译的时候如果不指定 Hadoop 默认使用的是 2.6.5,不过你可以通过 hadoop.version 参数指定你需要的版本,具体的编译如下:

 小技巧

在编译的时候想加快速度,可以修改 ./dev/make-distribution.sh 文件的下面语句:

上面的 1C 代表使用1个核进行编译,所以如果你的电脑不止一个核,你可以增加核的个数;另外,编译的时候加上
clean 参数之后,不管你代码是否修改了,都会编译,所以我们可以去掉这个参数,最后修改的结果如下:


猜你喜欢

欢迎关注本公众号:iteblog_hadoop:

0、回复 电子书 获取 本站所有可下载的电子书

1、SparkRDMA:使用RDMA技术提升Spark的Shuffle性能

2、流计算框架 Flink 与 Storm 的性能对比

3、Apache Spark 2.2.0新特性详细介绍

4、干货 | Spark SQL:过去,现在以及未来

5、Apache Spark 黑名单(Blacklist)机制介绍

6、美团点评数据平台融合实践

7、干货 | Apache Spark最佳实践

8、NodeManager节点自身健康状态检测机制

9、[干货]大规模数据处理的演变(2003-2017)

10、Apache Flink 1.3.0正式发布及其新功能介绍

11、更多大数据文章欢迎访问https://www.iteblog.com及本公众号(iteblog_hadoop)
12、Flink中文文档: http://flink.iteblog.com
相关文章
相关标签/搜索