【spark】搭建生产环境的spark服务
固定开头,菜鸡一只,如有说错,请大家批评指出,一定改正!事情是这样,当我们学习spark的时候,搭建一个环境是最简单也是最开始我们要做的,一般情况下,我们都是使用虚拟机(linux机器)来搭建spark的环境,然后让spark运行在yarn上(其实也有其他几个模式,但是yarn模式是较常见的通用的资源管理平台)但是本文要说的是如何在生产(环境)服务器上,搭建自己的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
这个报错,我记得是第四点的第一个地方没改,会出的问题,改下就好了(如果您也报了一些奇怪的错,请返回查看第四点要修改的东西,您是否修改了)!
本人菜鸡一只,这篇文章就到这里,红黑树还有最后一个坑没填完,在下一篇文章就会把红黑树系列更新完,敬请期待
更多推荐
所有评论(0)