Mat*_*att 7 python flask apache-spark pyspark
我写了一个简单的Flask应用程序来将一些数据传递给Spark.该脚本适用于IPython Notebook,但是当我尝试在它自己的服务器中运行它时.我不认为Spark上下文在脚本中运行.如何在以下示例中使用Spark?
from flask import Flask, request
from pyspark import SparkConf, SparkContext
app = Flask(__name__)
conf = SparkConf()
conf.setMaster("local")
conf.setAppName("SparkContext1")
conf.set("spark.executor.memory", "1g")
sc = SparkContext(conf=conf)
@app.route('/accessFunction', methods=['POST'])
def toyFunction():
posted_data = sc.parallelize([request.get_data()])
return str(posted_data.collect()[0])
if __name__ == '__main_':
app.run(port=8080)
Run Code Online (Sandbox Code Playgroud)
在IPython Notebook中我没有定义SparkContext
它,因为它是自动配置的.我不记得我是怎么做到的,我跟着一些博客.
在Linux服务器上,我已将.py设置为始终运行,并按照本指南的第5步安装最新的Spark .
编辑:
根据davidism的建议,我现在改为使用复杂性越来越高的简单程序来本地化错误.
首先,我使用下面答案中的脚本创建了.py(在适当调整链接之后):
import sys
try:
sys.path.append("your/spark/home/python")
from pyspark import context
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
Run Code Online (Sandbox Code Playgroud)
这将返回"成功导入的Spark模块".但是,我创建的下一个.py文件返回一个异常:
from pyspark import SparkContext
sc = SparkContext('local')
rdd = sc.parallelize([0])
print rdd.count()
Run Code Online (Sandbox Code Playgroud)
这会返回异常:
"在向驱动程序发送端口号之前退出Java网关进程"
搜索类似的问题,我找到了这个页面,但是当我运行此代码时没有任何反应,控制台上没有打印,也没有错误消息.同样,这也没有帮助,我得到与上面相同的Java网关例外.我也安装了anaconda,因为我听说这可能有助于联合python和java,再次没有成功......
有关下一步尝试的建议吗?我很茫然.
好的,所以我要回答我自己的问题,希望那里的人不会遭受同样的挫折!事实证明,它是缺少代码和糟糕设置的组合.
编辑代码:我确实需要通过在我的代码的前导码中附加以下内容来初始化Spark Context:
from pyspark import SparkContext
sc = SparkContext('local')
Run Code Online (Sandbox Code Playgroud)
所以完整的代码将是:
from pyspark import SparkContext
sc = SparkContext('local')
from flask import Flask, request
app = Flask(__name__)
@app.route('/whateverYouWant', methods=['POST']) #can set first param to '/'
def toyFunction():
posted_data = sc.parallelize([request.get_data()])
return str(posted_data.collect()[0])
if __name__ == '__main_':
app.run(port=8080) #note set to 8080!
Run Code Online (Sandbox Code Playgroud)
编辑设置:文件(yourrfilename.py)必须保存在正确的目录中,即必须保存到文件夹/home/ubuntu/spark-1.5.0-bin-hadoop2.6中.
然后在目录中发出以下命令:
./bin/spark-submit yourfilename.py
Run Code Online (Sandbox Code Playgroud)
它在10.0.0.XX:8080/accessFunction /启动服务.
请注意,端口必须设置为8080或8081:默认情况下,Spark仅为master和worker分别允许这些端口的Web UI
您可以使用restful服务测试服务,或者打开新终端并使用cURL命令发送POST请求:
curl --data "DATA YOU WANT TO POST" http://10.0.0.XX/8080/accessFunction/
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7474 次 |
最近记录: |