zoukankan      html  css  js  c++  java
  • spark在windows下的安装

     
    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  选项即可.

              
            最终91行为:
            set JAVA_OPTS=-XX:MaxPermSize=128m %OUR_JAVA_OPTS% -Xms%OUR_JAVA_MEM% -Xmx%OUR_JAVA_MEM%  -Dscala.usejavacp=true -Xss10m    
            
    5. 补配hadoop环境变量 HADOOP_HOME

       启动pyspark shell后, 运行一个简单 parallelize+collect 就会报错, 具体错误是, Could not locate executable nullinwinutils.exe in the Hadoop binaries.  
       显然, spark这是要知道winutils.exe的全路径,  所以第一要安装winutils.exe, 第二要让spark知道安装到哪里了.  谷歌得到的信息是winutils.exe 是Hadoop windows 下的一个binary.
       我理解原因是, Spark driver程序的机器不必安装的Hadoop, 但仍然需要配置一下Hadoop运行环境, 这包括 HADOOP_HOME 环境变量, 以及 winutils.exe 程序.  
        64 bit 编译包下载地址,  https://github.com/srccodes/hadoop-common-2.2.0-bin/archive/master.zip
        32 bit 版本下载: http://yunpan.cn/csHEXGEaqVrLT 访问密码 8199 ,详见作者博客<<Hadoop:Windows 7 32 Bit 编译与运行>> http://www.cnblogs.com/smartbooks/p/3694760.html   
           
       下载解压后, 命令行中运行一下 winutils.exe, 看看是否和你的windows兼容. 如果兼容的话, 设置HADOOP_HOME为 C:Programhadoop-common-2.2.0-bin-master
       参考文章: http://www.srccodes.com/p/article/39/error-util-shell-failed-locate-winutils-binary-hadoop-binary-path
       
    6. 补配spark环境变量 SPARK_HOME, 同上
     这步对于交互式环境并不是必须的, 但对于scala/python语言编程是必须的
     
    7. 执行pyspark 验证是否可以工作
        在shell中, 输入 sc.parallelize(range(1000)).count()  ,得到了正确的值
        


    scala版本环境搭建,
    安装 scala-2.11.4.msi, 并将scala的bin目录放到OS 的PATH 环境变量, 其它步骤参考上面.  
     
    监控spark的作业
    http://localhost:4040/stages/

    为 pyspark  shell 增加代码补全功能之方法1 ---- 使用DreamPie
    bin/pyspark 是一个交互性的shell, 但是没有代码提示功能.  我比较喜欢DreamPie, 将下面代码存为c:/pyspark_shell.py, 然后在DreamPie执行execfile(r'c:pyspark_shell.py'), 即能得到一个带代码提示环境.

    # -*- 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:program1spark-1.1.1-bin-hadoop2.4' 
    hadoop_home=r'c:program1hadoop-common-2.2.0-bin-master'
    python_bin=r'c:pythonenvPython27'

    # 这步是将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'pythonuild'))  # 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:programspark-1.1.1-bin-hadoop2.4pythonpysparkshell.py
    execfile(os.path.join(spark_home,r'pythonpysparkshell.py'))

    为 pyspark  shell 增加代码补全功能之方法2 ---- 使用ipython qtconsole

    这个方法比方法1简单一些, 使用ipython 的自动补全功能.

    rem ========================================
    rem Launch pyspark in ipython qtconsole
    rem ========================================
    
    setlocal
    
    set ANACONDA_PY_HOME=D:pythonenvpython277
    SET SPARK_HOME=D:programspark-1.5.2-bin-hadoop2.6
    
    set PYSPARK_PYTHON=%ANACONDA_PY_HOME%python.exe
    set PYSPARK_DRIVER_PYTHON=%ANACONDA_PY_HOME%Scriptsipython.exe
    set PYSPARK_DRIVER_PYTHON_OPTS=qtconsole
    
    %SPARK_HOME%inpyspark.cmd
    
    endlocal

    Spark 1.5 在我的Windows下运行(机器只有3GB内存), 报如下错误,
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    显然是内存不足, 最终的解决方法是: 在OS系统环境变量中, 加上 _JAVA_OPTIONS, 取值为 -Xms300m -Xmx700m -XX:PermSize=64m -XX:MaxPermSize=256m -Dscala.usejavacp=true -Xss10m          
    我试着在spark-class2.cmd 和 spark-env.cmd 中设置_JAVA_OPTIONS变量, 但没有成功.
    小内存设置:
    _JAVA_OPTIONS: -Xms300m -Xmx700m -XX:PermSize=64m -XX:MaxPermSize=256m -Dscala.usejavacp=true -Xss10m    
    大内存设置:
    _JAVA_OPTIONS: -Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m

  • 相关阅读:
    wget下载https文件,服务器可以虚拟机中不行的问题
    FTP被动模式服务器端开有限的端口
    ZOJ
    HDU
    JAVA 大数 A+B问题
    A Simple Math Problem(矩阵快速幂)----------------------蓝桥备战系列
    Covering(矩阵快速幂)
    卡特兰数详讲(转)
    Just a Hook(线段树区间修改值)-------------蓝桥备战系列
    A Simple Problem with Integers(线段树区间更新复习,lazy数组的应用)-------------------蓝桥备战系列
  • 原文地址:https://www.cnblogs.com/harrychinese/p/spark_install_on_windows.html
Copyright © 2011-2022 走看看