【发布时间】:2020-04-02 03:37:15
【问题描述】:
我的要求:从 Web 应用程序触发 Yarn 中的 Spark 作业并将结果显示在网页中。 Spark 作业接受少量参数并计算一个 DataSet,其中包含需要返回给 Web 应用程序的值。
在网上浏览了一番后,我认为 Livy 可以用于此。
Livy 已经安装了 HDP 2.5。 所以我使用 POST/Sessions 创建了新的 Livy 会话并包含我的 jar 文件。
{"kind":"spark","name":"livy","jars":["/xyz.jar"],"proxyUser":"livy"}
(我必须包含标题“x-requested-by”,因为启用了 csrfPrevention。) 注意:- jar 必须放在 HDFS 中才能正常工作
根据 Livy 示例:- https://livy.apache.org/examples/ 我可以将代码 sn-ps 传递为“data = {'code': '1 + 1'}” 我不明白如何在我的类中调用该方法。根据 Livy Rest API 文档,我没有“className”选项 - https://livy.apache.org/docs/latest/rest-api.html
如果我使用 POST/Batch 创建会话,我可以指定一个 jar 和我的主类。但是这样做我不会在我的 Web 应用程序中得到我的结果。
我的 jar 文件中的 Java 代码:
public class LivySample {
public String executeSampleLivy(SparkContext sc,String input){
JavaSparkContext jsc = new JavaSparkContext(sc);
List<String> listNames = Arrays.asList("abc","def","ghi");
JavaRDD<String> rdd = jsc.parallelize(listNames);
return rdd.filter(l->l.contains(input)).collect().get(0);
}
}
我尝试在 Livy url - session/20/statements 上将以下代码作为 POST 运行 '''
{
"code": "import LivySample;LivySample lv = new LivySample();lv.executeSampleLivy(sc, \"abc\")"
}
我在调用 GET sessions/21/statements/0 时遇到错误:
{
"id": 2,
"state": "available",
"output": {
"status": "error",
"execution_count": 2,
"ename": "Error",
"evalue": "<console>:1: error: '.' expected but ';' found. import LivySample;LivySample lv = new LivySample();lv.executeSampleLivy(sc, "chris"); ^",
"traceback": [],
}
}
我无法调试此错误。请让我知道我在这里做错了什么。
我可以像我在这里指定的那样在 LivyRest API 中使用 Java。
谢谢!
【问题讨论】:
标签: apache-spark livy