Spark-Python
1. PyCharm环境
1.1 解压安装包
解压Spark安装包到Windows本地路径,路径中最好没有空格。
1.2 Linux安装Python
上传Anaconda-Linux安装文件到虚拟机,不需要解压,直接使用bash命令即可运行。文件来自于[https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/]
#安装插件
yum install -y bzip2
#安装命令
bash Anaconda3-5.2.0-Linux-x86_64.sh
默认安装路径为“/root/anaconda3”,可自行输入进行修改到空地址,输出的路径必须为不存在,否则会报如下错。
ERROR: File or directory already exists: '/root/anaconda3'
安装进行中,一直“yes”,最后一个不行了就“no”,安装完成后,生效环境变量。
#安装过程中,会默认写入bashrc环境变量中,也可以自行写入/etc/profile
source ~/.bashrc
#命令行输出Python,查看结果
python
1.3 Python版本选择
选择与Liunx同一个版本的Anaconda安装包,选择与Linux相同的Python版本,避免报错。
1.4 配置依赖
选择菜单栏“File” —>“Settings” —>“Project Structure ”命令,快捷键为“ctrl+alt+shift+s”打开如图所示界面
导包成功
1.5 引入spark-core包
将Spark解压路径【spark-2.4.1-bin-hadoop2.7\python】下的【pyspark、pyspark.egg-info】,拷贝到Ananconda安装路径【Anaconda3\Lib\site-packages】下。
1.6 本地环境测试
使用简单WordCount代码进行环境测试,准备wd.txt文件
spark hadoop hive
hive hadoop
hbase
hive spark
flume hadoop
spark hive
代码:
from pyspark import SparkConf, SparkContext
# os.environ["PYSPARK_PYTHON"]="/home/python3/bin/python"
# os.environ["PYSPARK_DRIVER_PYTHON"]="/home/python3/bin/python"
if __name__ == '__main__':
# conf = SparkConf().setMaster("spark://Pspark:7077").setAppName("wordTest")
#local[*]为本地模式,aka在windows上运行
conf = SparkConf().setMaster("local[*]").setAppName("rdd-1")
sc = SparkContext(conf=conf)
counts = sc.textFile("hdfs://Pspark:9000/wd.txt")\
.flatMap(lambda line:line.split(" "))\
.map(lambda x:(x, 1))\
.reduceByKey(lambda a,b:a+b).collect()
print(counts)
# 习惯
sc.stop()
1.7 提交服务器
代码:
from pyspark import SparkConf, SparkContext
if __name__ == '__main__':
#其中Pspark为服务端地址ip映射,已经添加到Windows中hosts文件,未添加可使用ip地址替代
conf = SparkConf().setMaster("spark://Pspark:7077").setAppName("wordTest")
#conf = SparkConf().setMaster("local[*]").setAppName("rdd-1")
sc = SparkContext(conf=conf)
counts = sc.textFile("hdfs://Pspark:9000/wd.txt")\
.flatMap(lambda line:line.split(" "))\
.map(lambda x:(x, 1))\
.reduceByKey(lambda a,b:a+b).collect()
print(counts)
# 习惯
sc.stop()
1.8 常遇到报错:
1.8.1 乱码
控制台输出乱码或者符号,究其原理为jdk问题
第一步:检查jdk版本,最佳为1.8,不建议版本过高
第二步:检查JAVA_HOME 正确的地址为:【G:\Jdk8】,不需要指定到bin目录,路径中不能有空格
排查完成后,问题基本可以解决
第三步:再出现乱码,或者电脑多版本jdk,则需要使用os.environ的方法,在程序中指定JAVA_HOME
例:
import os
os.environ["JAVA_HOME"]="G:\Jdk8"
1.8.2 Python报错
一般是由于电脑内Python版本过多,环境变量过于复杂导致。
方法一:在环境变量删除不必要的Python
方法二:使用os.environ的方法,在程序中指定PYSPARK_PYTHON
import os
os.environ["PYSPARK_PYTHON"]="G:\Anaconda3\envs\Pspark3.6\python.exe"
方法二弊端:强制写入的话,如果提交服务器运行,则需要修改PYSPARK_PYTHON地址,麻烦。
1.8.3 资源请求报错
提交服务端运行Spark时,程序卡在请求资源直达超时。原因为:提交服务本质为双向通讯,虚拟机【Pspark】与Windows的双向通讯,所以需要添加双向的映射服务。如果是手机热点提供的WiFi或者不稳定连接,包括360都会有可能导致报错。
vim /etc/hosts
#虚拟机映射,主要修改为最后一行,其余已在前面步骤完成
#192.168.80.1 为NAT网络连接模式的网关。如果是桥接模式,则可以添加实际的windowip地址
#MSI 为Windows机器名称,可在设置里面查看,或者进入Spark页面,查看进程阻塞位置,也会看到。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.150 Pspark
192.168.80.1 MSI
#Windows映射
#地址:C:\Windows\System32\drivers\etc,修改hosts文件,有权限无法修改的话,拖到桌面,修改完再拖回。
#写入内容
192.168.80.150 Pspark