我打算实现的是让Scala Spark程序(在jar中)从客户端接收POST消息,例如卷曲,获取一些参数值,进行一些Spark处理,然后将结果值返回给调用客户端。 从可用的Apache Livy文档中,我找不到一种方法可以通过交互式(即会话)模式通过Livy从客户端(例如curl)调用已编译和打包的Spark程序。通过Livy进行的这种请求/答复场景可以通过以纯文本形式传递到Spark外壳的Scala代码来完成。但是如何在包装好的jar中使用Scala类呢?
curl -k --user "admin:mypassword" -v \
-H "Content-Type: application/json" -X POST \
-d @Curl-KindSpark_ScalaCode01.json \
"https://myHDI-Spark-Clustername.azurehdinsight.net/livy/sessions/0/statements" \
-H "X-Requested-By: admin"
我宁愿传递jar文件的路径和文件名以及ClassName和Argument值,而不是将Scala源代码作为数据(-d @Curl-KindSpark_ScalaCode01.json
)。但是如何?
答案 0 :(得分:0)
使用sbt-assemby插件为您的Spark应用制作一个超级jar。
将上一步中的jar文件上传到HDFS集群:
hdfs dfs -put /home/hduser/PiNumber.jar /user/hduser
通过livy执行工作:
curl -X POST -d '{"conf": {"kind": "spark" , "jars": "hdfs://localhost:8020/user/hduser/PiNumber.jar"}}' -H "Content-Type: application/json" -H "X-Requested-By: user" localhost:8998/sessions
检查:
curl localhost/sessions/0/statements/3
:
{“ id”:3,“状态”:“可用”,“输出”:{“状态”:“确定”,“执行次数”:3,“数据”:{“文本/纯文本”:“ Pi 大约是3.14256“}}}
p.s。
用于Scala / Java的Spark Livy API需要使用uber jar文件。 sbt-assembly
不能立即制成胖子,这让我很烦。
通常,我使用Livy的Python API进行烟雾测试和调整。
使用Python进行健全性检查:
curl localhost:sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"print(\"Sanity check for Livy\")"}'
您可以在字段code
中添加更复杂的逻辑。
顺便说一句,这是流行的Spark笔记本工作方式-通过Livy将源代码发送到集群。
答案 1 :(得分:0)
谢谢,我会尝试的。同时,我找到了另一个解决方案: $ curl -k --user“ admin:” -v -H“ Content-Type:application / json” -X POST -d @ Curl-KindSpark_BrandSampleModel_SessionSetup.json“ https://mycluster.azurehdinsight.net/livy/sessions 与包含的JSON文件 { “ kind”:“ spark”, “ jars”:[“ adl://skylytics1.azuredatalakestore.net/skylytics11/azuresparklivy_2.11-0.1.jar”] } 并在包含Scala对象的Azure Data Lake Gen1帐户中使用上载的jar,然后发布该语句 $ curl -k --user“ admin:myPassword” -v -H“ Content-Type:application / json” -X POST -d @ Curl-KindSpark_BrandSampleModel_CodeSubmit.json“ https://mycluster.azurehdinsight.net/livy/sessions/4/statements” -H“ X-Requested-由:管理员“ 与内容 { “ code”:“导入AzureSparkLivy_GL01._; val brandModelSamplesFirstModel = AzureSparkLivyFunction.SampleModelOfBrand(sc,\” Honda \“); brandModelSamplesFirstModel” }。
因此,我告诉Livy启动交互式Spark会话并加载指定的jar,并传递了一些代码来调用jar中对象的成员。有用。也会检查您的建议。