• Win10下搭建PySpark环境


    完整步骤参照:https://www.jianshu.com/p/233b91d869f8

     

    官网有说明各软件版本对应:http://spark.apache.org/downloads.html

    hadoop镜像下载地址:hadoop-2.7.7.tar.gz

    spark镜像下载地址:spark-2.4.5-bin-hadoop2.7.tgz

    scala下载地址:scala-2.11.0.zip  or https://www.scala-lang.org/download/2.11.0.html

    要求:已安装Java8环境,检查java -version 若JDK版本为1.8则满足.

     

    问题1-下载hadoop镜像文件解压时报错"客户端没有所需特权"

    不管它hadoop也能正常使用.

    附上解决办法:start winrar x -y live555-latest.tar.gz

    https://blog.csdn.net/y601500359/article/details/80418765

     

    问题2-Could not locate executablenullinwinutils.exe in the Hadoop binaries

    下载winutils.exe放入hadoop/bin目录下即可:https://github.com/cdarlint/winutils

    详见:https://blog.csdn.net/love666666shen/article/details/78812622

    注意:必须在环境变量中添加HADOOP_HOME,否则还是会报该错。hadoop源码根据System.getenv("HADOOP_HOME") 来识别hadoop的。

     

    问题3-windows不重启使环境变量生效方法

    详见:https://blog.csdn.net/jiuduan2009/article/details/8857962

     

    问题4-github访问速度过慢

    详见:https://www.cnblogs.com/baby123/p/10868095.html

    注意:该法在下载文件时,貌似只对于git clone命令形式有效,直接界面点击速度仍很慢.

     

    问题5-windows使用zip命令:可以直接利用winrar工具选zi模式即可

    详见:https://www.jianshu.com/p/d6dbee5eb4a7

    压缩多个文件:zip test.zip a.txt b.txt
    压缩目录:zip -r test.zip /home/user
    解压缩:unzip -o -d /home/sunny myfile.zip
    -o:不提示的情况下覆盖文件;
    -d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;

       zip -d myfile.zip smart.txt:删除压缩文件中smart.txt文件
       zip -m myfile.zip ./rpm_info.txt:向压缩文件中myfile.zip中添加rpm_info.txt文件

     若不想压缩后带外层目录,cd到目录内部压缩.    

    检查hadoop是否安装成功:hadoop version

    检查Spark是否安装成功:spark-shell

     

    安装pyspark包

    • 方法1:(推荐)

      1、复制spark安装目录pythonlib中的py4j-0.10.4-src.zip和pyspark.zip包
      2、粘贴包并解压至Anaconda安装目录Libsite-package下,如果没有使用Anaconda,把Anaconda安装目录替换成Python安装目录。(解压时注意去掉多的最外层目录),并分别改名为py4j和pyspark
      3、在命令行输入python进入python环境,输入import pyspark as ps不报错即表示成功
    • 方法2:(推荐)

      将spark/python文件夹下的pyspark文件夹拷贝到python对应的文件夹中(若没有安装py4j会报该依赖错)。或者执行以下命令安装:pip install PySpark
    • 方法3:spark安装包中已自带pyspark包,但无法直接在python环境下Import pyspark

      pip install findspark
      在py文件中执行以下代码:
      import findspark
      findspark.init()
      即可顺利import pyspark

    测试pyspark

    • 启动spark:

      • 方法1:直接cmd下输入命令pyspark即可进入pyspark-shell环境,然后就是完全类似于Python-shell的操作

      # 在shell中执行以下代码测试,计算文件行数(注意路径不能是单反斜杠否则会报错)
      lines = sc.textFile("E:/Documents/Desktop/s.txt")
      lines.count()
      • 方法2:进入python环境后,import pyspark即可调用相应的api

        from pyspark import SparkContext
        sc = SparkContext( 'local', 'test')
        logFile = "file:///usr/local/spark/README.md"
        logData = sc.textFile(logFile, 2).cache()
        numAs = logData.filter(lambda line: 'a' in line).count()
        numBs = logData.filter(lambda line: 'b' in line).count()
        print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))
    • 详细测试用例:https://www.jianshu.com/p/ede10338a932

    修改日志级别:(初学不建议改,方便查看执行过程)

    方法1:修改配置文件
    在conf 目录下复制log4j.properties.template为log4j.properties ,这个文件用来管理日志设置。
    接下来找到下面这一行:
    log4j.rootCategory=INFO, console
    然后通过下面的设定降低日志级别,只显示警告及更严重的信息:
    log4j.rootCategory=WARN, console
    方法2:程序中设置:(但效果不佳,spark启动过程中的日志仍然会显示)
    sc.setLogLevel('WARN')

    提交Python作业

    # --py-files:表示主程序helloSpark.py所依赖的py,以逗号间隔; 若是多个py文件可以压缩成zip传给--py-files
    # 主程序脚本helloSpark.py之后的参数为主程序需要传入的参数
    spark-submit --master local --name 'myApp' --py-files a.py,b.py helloSpark.py --parm1 val1 --parm2 val2
    # linux下命令换行
    spark-submit
    --master local
    --name 'myApp'
    helloSpark.py
    # windows下命令换行
    spark-submit ^
    --master local ^
    --name 'myApp' ^
    helloSpark.py
    # 注意格式否则容易报错'SparkException: Cannot load main class from JAR file'
    提交spark自带的java示例:
    spark-submit --class org.apache.spark.examples.SparkPi spark-examples_2.11-2.4.5.jar
    对于依赖过多python包,可以将整个python虚拟环境打包成zip文件,分发到各个节点机器。
    详见:https://www.cnblogs.com/piperck/p/10121097.html

    driver和executor的参数设置在yarn模式下才会起作用:
    --driver-cores:Spark应用Driver的CPU核数,Driver主要完成任务的调度以及和executor和cluster manager进行协调。
    --executor-cores:Spark应用每个Executor的CPU核数,各个 executor 使用的并发线程数目,也即每个 executor 最大可并发执行的 Task 数目。
    --executor-memory:各个 executor 使用的最大内存,不可超过单机的最大可使用内存。
    --num-executors:创建多少个 executor。
    并行度主要受--executor-cores与--num-executors的影响:总cpu core数量为executorCores * numExecutors,官方推荐task数量一般设置为总cpu core数量的2~3倍. 每个stage的task数量即rdd划分的partitions数量.

    详见:https://spark.apache.org/docs/2.2.0/submitting-applications.html

    调试PySpark程序

    • 同正常的python程序调试完全相同(通过pycharm调试或执行spark程序默认只会打印warn日志)

    • pycharm中传入命令行参数(字符串参数不推荐再加' '会导致路基不对,可以加" "):Edit Configurations -> Parameters

    • 但不知道咋调试对rdd执行的mapPartitions等分布式执行的函数(打断点无效)

    spark配置有三种方式:
      方式1:代码中动态设置Spark属性
      方式2:spark-submit命令行传入
      方式3:加载默认的配置conf/spark-defaults.conf
      优先级:方式1>方式2>方式3

  • 相关阅读:
    解决:信息中插入avi格式的视频时,提示“unsupported video format”
    java字节数组和16进制之间的转换
    16进制转换字节数组工具类
    如何在ubuntu 12.04 中安装经典的 GNOME桌面
    Ubuntu安装软件提示”需要安装不能信任的软件包”解决办法
    Ubuntu系统下运行Eclipse出现找不到jre的问题的解决方法
    ubuntu添加共享出错
    从scrapy使用经历说开来
    有趣的问题--12 coins problem
    一个奇怪的MySQL错误返回
  • 原文地址:https://www.cnblogs.com/luckyboylch/p/12513503.html
Copyright © 2020-2023  润新知