Spark在Windows下运行,本地提交sp…

来源:互联网 发布:linux 漏洞扫描工具 编辑:程序博客网 时间:2024/06/05 00:18
【问题】Spark在windows能跑集群模式吗?
我认为是可以的,但是需要详细了解cmd命令行的写法。目前win下跑spark的单机模式是没有问题的。

【关键点】spark启动机制容易被windows的命令行cmd坑
  1、带空格、奇怪字符的安装路径,cmd不能识别。最典型的坑就是安装在ProgramFiles文件夹下的程序,因为Program和Files之间有个空格,所以cmd竟不能识别。之前就把JDK安装在了ProgramFiles下面,然后启动spark的时候,总是提示我找不到JDK。我明明配置了环境变量了啊?这就是所谓了《已经配置环境变量,spark仍然找不到Java》的错误问题。至于奇怪的字符,如感叹号!,我经常喜欢用来将重要的文件夹排在最前面,但cmd命令提示符不能识别。

  2、是否需要配置hadoop的路径的问题——答案是需要用HDFS或者yarn就配,不需要用则不需配置。目前大多数的应用场景里面,Spark大规模集群基本安装在Linux服务器上,而自己用windows跑spark的情景,则大多基于学习或者实验性质,如果我们所要读取的数据文件从本地windows系统的硬盘读取(比如说d:\data\ml.txt),基本上不需要配置hadoop路径。我们都知道,在编spark程序的时候,可以指定spark的启动模式,而启动模式有这么三中(以python代码举例):
   (2.1)本地情况,conf = SparkConf().setMaster("local[*]")——>也就是拿本机的spark来跑程序
   (2.2)远程情况,conf =SparkConf().setMaster("spark://remotehost:7077")——>远程spark主机
   (2.3)yarn情况,conf = SparkConf().setMaster("yarn-client")——>远程或本地 yarn集群代理spark
针对这3种情况,配置hadoop安装路径都有什么作用呢?(2.1)本地的情况,直接拿本机安装的spark来运行spark程序(比如d:\spark-1.6.2),则配不配制hadoop路径取决于是否需要使用hdfs。java程序的情况就更为简单,只需要导入相应的hadoop的jar包即可,是否配置hadoop路径并不重要。(2.2)的情况大体跟(2.1)的情况相同,虽然使用的远程spark,但如果使用本地数据,则运算的元数据也是从本地上传到远程spark集群的,无需配置hdfs。而(2.3)的情况就大不相同,经过我搜遍baidu、google、bing引擎,均没找到SparkConf直接配置远程yarn地址的方法,唯一的一个帖子介绍可以使用yarn://remote:8032的形式,则会报错“无法解析地址”。查看Spark的官方说明,Spark其实是通过hadoop路径下的etc\hadoop文件夹中的配置文件来寻找yarn集群的:
Ensure that HADOOP_CONF_DIR orYARN_CONF_DIR points to the directory which contains the (clientside) configuration files for the Hadoop cluster. These configs areused to write to HDFS and connect to the YARNResourceManager.
——http://spark.apache.org/docs/1.6.2/running-on-yarn.html
  因此,需要使用yarn来运行spark的情况,在spark那配置好hadoop的目录就尤为重要。后期经过虚拟机的验证,表明,只要windows本地配置的host地址等信息与linux服务器端相同(注意应更改hadoop-2/etc/hadoop下各种文件夹的配置路径,使其与windows本地一致),是可以直接在win下用yarn-client提交spark任务到远程集群的。参考的spark-env.cmd(注意是cmd而不是sh,需要自己在spark\conf文件夹下建立这个文件)配置如下:
setHADOOP_HOME=D:\hadoop-2.7.2test
setHADOOP_CONF_DIR=D:\hadoop-2.7.2test\etc\hadoop
setSPARK_YARN_USER_ENV="CLASSPATH=D:\hadoop-2.7.2test\etc\hadoop"
setSPARK_MASTER_HOST=bigmaster
setSPARK_WORKER_CORES=2
setSPARK_WORKER_MEMORY=1g

  3、是否需要配置环境变量的问题,若初次配置,可以考虑在IDE里面配置,或者在程序本身用setProperty函数进行配置。因为配置windows下的hadoop、spark环境是个非常头疼的问题,有可能路径不对而导致无法找到相应要调用的程序。待实验多次成功率提高以后,再直接配置windows的全局环境变量不迟。

  4、使用Netbeans这个IDE的时候,有遇到Netbeans不能清理构建的问题。原因,极有可能是导入了重复的库,spark里面含有hadoop包,记得检查冲突。同时,在清理构建之前,记得重新编译一遍程序,再进行清理并构建。

  5、经常遇到WARN YarnClusterScheduler: Initial job has not accepted any resources;check your cluster UI to ensure that workers are registered andhave sufficientresources资源不足无法运行的问题,添加conf.set("spark.executor.memory","512m");语句进行资源限制。先前在虚拟机跑spark,由于本身机子性能不高,给虚拟机设置的内存仅仅2G,导致hadoop和spark双开之后系统资源严重不足。因此可以缩小每个executor的运算规模。其他资源缺乏问题的解决方法参考http://blog.sina.com.cn/s/blog_4b1452dd0102wyzo.html










0 0
原创粉丝点击