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

原文地址:https://www.cnblogs.com/luckyboylch/p/12513503.html