前奏
为了实现一个spark的客户端访问服务端的python访问,折腾了好几天,现在终于解决了,查了网上的很多人写的文章,都没解决,跟着他们说的改,也没解决问题。有篇文章提点的很好就是 看spark的错误日志,看日志报错的具体问题。 Java gateway process exited before sending its port number这个问题有很多种情况引起,看日志是根据解决途径。下面就介绍windows pyspark连接linux spark服务的注意问题。这里先感谢这个连接的中的大牛回答,为资源不足(WARN TaskSchedulerImpl: Initial job has not accepted any resources;check your cluster UI to ensure that workers are registered and have sufficient resources)问题提供了解决方案。
方法论
这里不说linux服务端的事,服务端集群配置我都会在后面补一篇文章。说win10作为客户端连接服务端。 win10准备什么? 1.windows中的Java环境版本一定和服务端环境一致,至少保证大版本一致! 2.windows版的Hadoop(带without-hadoop的没测试,如果不用带hadoop的,能正常运行,但会报错,hadoop网上找找是有的就是bin目录加hadoop.dll、winutils.exe之类的) 3.python的版本也要和服务端的版本一致,不然也会出现报错!至少保证大版本(小数点后一位)一致! 4.windows的python安装pyspark版本和spark的版本一致 5.在环境变量中设置JAVA_HOME,用户环境、系统环境二选一就可以了,是通的
win10不需要准备什么? 1.千万不要用spark包,就安装pypark就行 2.不需要特意安装py4j 3.除了JAVA_HOME其他不要设置环境变量,JAVA_HOME也可以不用设置,见代码。
代码
跑个pyspark就这么复杂,没办法,太娇气了。
from pyspark import SparkConf, SparkContext
import os
os.environ['HADOOP_HOME']='D:\Root\wslware\hadoop-2.7.6'
conf = SparkConf().setMaster("spark://172.26.59.55:7077").setAppName("ttest").set("spark.driver.host", "172.24.128.1")
sc = SparkContext(conf=conf)
print(sc.version)
list_test = [1, 2, 3]
x = sc.parallelize(list_test)
y = x.map(lambda x: x * 2)
print(x.collect())
print(y.collect())
print(333)
sc.stop()
总结
搞了一周,就这破事。注意3点:1.版本一致性,2.配置正确性,3.有错看日志,别盲目百度。
|