Windows下最简的开发环境搭建
这里的spark开发环境, 不是为apache spark开源项目贡献代码, 而是指基于spark的大数据项目开发.
Spark提供了2个交互式shell, 一个是pyspark(基于python), 一个是spark_shell(基于scala). 这两个环境其实是并列的, 并没有相互依赖关系, 所以如果仅仅是使用pyspark交互环境, 而不使用spark-shell的话, 甚至连scala都不需要安装.
====================
pyspark运行环境配置:
====================
有空要完整将这篇文章翻译 https://districtdatalabs.silvrback.com/getting-started-with-spark-in-python
1. 安装python2.7, Windows下官方推荐使用 anaconda 版本的 Python 2.7, 已经包含了很多科学计算包,https://store.continuum.io/cshop/anaconda/, 将python加到path环境变量中
2. 安装jdk. pyspark运行环境其实不依赖scala, 但jdk是必需的. 安装jdk1.7, 将java加到path环境变量中, 并设置JAVA_HOME环境变量.
3. 从apache spark网站下载spark-1.1.0-bin-hadoop2.4.tgz预编译包, 并解压.
选择预编译包, 免去了从源码直接编译的麻烦.
4. 修正spark-class2.cmd 脚本
在启动spark shell, 碰到了个错误:
Failed to initialize compiler: object scala.runtime in compiler mirror not found.
根据谷老师的提示, 修改了spark-class2.cmd文件, 具体在第91行设置 JAVA_OPTS 变量时, 再额外加一个选项 -Dscala.usejavacp=true , 即能解决这个问题.
另外, 在使用Spark Sql, 按照example查询people.txt, 碰到了 StackOverflowError 问题,
经查询 http://f.dataguru.cn/thread-351552-1-1.html, 需要修改JVM的 thread stack size. 同样还是91行, 增加 -Xss10m 选项即可.
# -*- coding:utf-8 -*-
# file: c:\pyspark_shell.py
# 使用, 在dreampie输入, 即得到了pyspark交互shell: execfile(‘c:\pyspark_shell.py‘)
__author__ = "Hari Sekhon"
__version__ = "0.1"
# https://github.com/harisekhon/toolbox/blob/master/.ipython-notebook-pyspark.00-pyspark-setup.py
import glob
import os
import sys
spark_home=r‘c:\program1\spark-1.1.1-bin-hadoop2.4‘
hadoop_home=r‘c:\program1\hadoop-common-2.2.0-bin-master‘
python_bin=r‘c:\pythonenv\Python27‘
# 这步是将pyspark和py4j 加到 PYTHONPATH. 我测试了直接Windows的PYTHONPATH加下面的路径, 并不管用
sys.path.insert(0, os.path.join(spark_home, ‘python‘)) # add pyspark
sys.path.insert(0, os.path.join(spark_home, r‘python\build‘)) # add py4j
# 这步是设置了 SPARK_HOME 和 HADOOP_HOME
# 我测试了即使是在Windows设置了环境变量, 也不管用
# 所以在程序中, 设置了 SPARK_HOME 和 HADOOP_HOME
os.environ[‘SPARK_HOME‘]=spark_home
os.environ[‘HADOOP_HOME‘]=hadoop_home
#在worker机器上, 需要将python放到操作系统的Path环境变量中, 我手工设置了PATH环境变量,
#但在代码中却读PATH环境变量, 却发现没有python路径,
#无奈我在pyspark_shell.py 代码中将python加到path环境变量.
os.environ[‘PATH‘]=os.environ[‘PATH‘]+‘;‘+python_bin
#执行D:\program\spark-1.1.1-bin-hadoop2.4\python\pyspark\shell.py
execfile(os.path.join(spark_home,r‘python\pyspark\shell.py‘))