我最近开始使用Spark Scala,HDFS,sbt和Livy。目前,我尝试创建livy批处理。
Warning: Skip remote jar hdfs://localhost:9001/jar/project.jar.
java.lang.ClassNotFoundException: SimpleApp
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:225)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:686)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这是错误语句,显示在livy批处理日志中。
我的spark-submit命令对于本地.jar文件运行正常。
spark-submit --class "SimpleApp" --master local target/scala-2.11/simple-project_2.11-1.0.jar
但是对于livy(在cURL中)一样,它会引发错误。
"requirement failed: Local path /target/scala-2.11/simple-project_2.11-1.0.jar cannot be added to user sessions."
所以,我将.jar文件移到了hdfs中。我新的livy代码是-
curl -X POST --data '{
"file": "/jar/project.jar",
"className": "SimpleApp",
"args": ["ddd"]
}'
-H
"Content-Type: application/json"
http://server:8998/batches
这是上面提到的抛出错误。
请让我知道,我哪里错了?
谢谢!
答案 0 :(得分:0)
hdfs://localhost:9001/jar/project.jar.
期望您的jar文件位于 hdfs 上。
如果是本地协议,也许您应该尝试在路径中指定协议,或者只是将其上传到hdfs:
"file": "file:///absolute_path/jar/project.jar",
答案 1 :(得分:0)
您必须使用代码库+必要的jar-fat jar
来制作sbt assembly
文件,或使用maven plugin,将此jar文件上传到HDFS
并运行{{1} },并将其放在HDFS上,也可以使用spark-submit
。
使用cURL
的步骤:
Scala/Java
HDFS
提交作业: cURL
如果您不想制作一个胖jar文件并将其上传到HDFS,可以考虑使用python脚本,它可以像纯文本一样提交而无需任何jar文件。
带有简单python代码的示例:
curl -X POST --data '{ //your data should be here}' -H "Content-Type: plication/json" your_ip:8998/batches
在数据主体中,您必须发送有效的Python代码。
这是curl your_ip:8998/sessions/0/statements -X POST -H 'Content-Type: application/json' -d '{"code":"print(\"asdf\")"}'
之类的工具的工作方式。
我还用Livy和Python制作了example。 检查结果:
Jupyter Notebook/Torch
如上所述,对于Scala / Java胖子,需要上传到HDFS。
答案 2 :(得分:0)
要将本地文件用于livy
批处理作业,需要将本地文件夹添加到livy.file.local-dir-whitelist
中的livy.conf
属性中。
来自livy.conf.template
的描述:
允许将文件添加到用户会话的本地目录列表。默认情况下为空,这意味着用户只能在启动会话时引用远程URI。