官网有说明各软件版本对应: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 executablenull\bin\winutils.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安装目录\python\lib中的py4j-0.10.4-src.zip和pyspark.zip包
2、粘贴包并解压至Anaconda安装目录\Lib\site-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