【spark】搭建生产环境的spark服务

固定开头,菜鸡一只,如有说错,请大家批评指出,一定改正!

事情是这样,当我们学习spark的时候,搭建一个环境是最简单也是最开始我们要做的,

一般情况下,我们都是使用虚拟机(linux机器)来搭建spark的环境,然后让spark运行在yarn上(其实也有其他几个模式,但是yarn模式是较常见的通用的资源管理平台)

但是本文要说的是如何在生产(环境)服务器上,搭建自己的spark环境

需要准备的东西

1、一台集群内的客户端机器(这台机器一般是提交hive,mr,spark等各种任务的机器)

2、一个编译好的spark.tar(请记住你用的hadoop版本,比如我是cdh的,那就要找对应的cdh版本编译)

关于如何编译spark版本:https://blog.csdn.net/lsr40/article/details/80116235

你可以在编译之前用idea打开源代码,加上你自己想要修改要优化的代码,然后再用这份代码去编译,这样这个版本就是属于你的唯一的版本了

3、得有一些相应的权限(比如linux目录,hdfs上某个目录的权限,这个一般跟你使用哪个用户登录集群内的客户端机器有关)

 

接下来要做的事情:

1、先确认集群内是否已经有安装好的spark版本?

如果有,就非常方便,请看2

如果没有,请看5

2、你需要的就是先找找看以前的spark版本运行的时候,相关环境是哪些,加载了哪些jar包?

例如:我可以看到我使用的client机器上有spark的脚本(这个一般是搭建集群的人安装好的版本)

接着,必须找到这个spark运行的时候读取的哪些配置文件和jar包?

主要来说就是hadoop和hive的配置文件和jar包,还有spark自己的配置文件和jar包

因此,我找到了这么一个目录

大家如果有兴趣研究,其实yarn-conf里面放的就是各种配置文件(hadoop和hive的site文件)

classpath.txt就是要加载的相关的jar包

这些东西,都是通过spark-env.sh来加载的(这个文件我就不放出来了,截一些图)

3、解压你自己的spark.tar包,将原来spark的conf目录下的东西原封不动的复制到你自己的spark的conf目录下

4、修改两个地方

第一个地方,你是spark现在的env加载的还是以前spark的配置,肯定得出问题

第二个地方,你现在spark运行起来加载的还是以前spark的jar包

请关注在哪里指定的spark运行jar包(因为可以在不同的地方指定)

我的配置是在spark-defaults.conf中的spark.yarn.jars

如果你的jar包是在本地,那么每次spark运行的时候,就需要将所依赖的jar包上传到hdfs上(这样会导致程序启动时缓慢),所以我们一般还是选择一个hdfs目录来存放spark的jar包!

如果在本地,配置就这么写:spark.yarn.jars=/本地路径/sparkjars/*

如果在hdfs,配置就这么写:spark.yarn.jars=hdfs://nameservice1/hdfs的目录/sparkjars/*

在运行的时候,如果spark日志是info级别的,请仔细看,是否会有在上传jar包的日志,以此来确定自己的配置是否生效!

5、说实话,如果真的没有已有的环境

其实还挺麻烦的,你需要记住几点(因为我没有具体在生产服务器上做过,但是我在自己环境里做过)

-1.spark的conf目录中必须有hadoop和hive的那几个重要的配置(请看yarn-conf中放的那些文件)

-2.spark的jar包加载的是哪里的,是否需要加载其他依赖jar包?jar包的添加方式见第四点,也可以通过--jars的方式添加,通过逗号分隔多个jar包(但是不太推荐,如果jar包很多,还挺麻烦的)

6、关键:一定要测试,可以开启spark-shell,查看是否能运行,并且运行spark版本是否是你自己的版本!

 

7、最后,还希望大家多思考,我觉得解决问题时,思路是很重要的,报错了,得先估计下是哪里出的问题,不要盲目的乱捣鼓(当然如果你猜的你全部都试过了,都不是,那就只能瞎猜乱搞了。。。。)

 

8、附上一个报错(我只截取报错头)

这种莫名其妙的报错(这个报错是我在运行spark-shell就直接报的错!)

报错,大概跟这篇文章差不多:https://bbs.csdn.net/topics/392309834

org.apache.spark.SparkException: Exception thrown in awaitResult: 
Caused by: java.lang.RuntimeException: java.io.StreamCorruptedException: invalid stream header: 01000D31

这个报错,我记得是第四点的第一个地方没改,会出的问题,改下就好了(如果您也报了一些奇怪的错,请返回查看第四点要修改的东西,您是否修改了)!

 

本人菜鸡一只,这篇文章就到这里,红黑树还有最后一个坑没填完,在下一篇文章就会把红黑树系列更新完,敬请期待

 

猜你喜欢

转载自blog.csdn.net/lsr40/article/details/86694366