如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序

Posted

技术标签:

【中文标题】如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序【英文标题】:How to run an interactive spark application from spark-shell/spark-submit 【发布时间】:2017-10-14 16:45:26 【问题描述】:

我有一个 spark 应用程序,它可以读取大数据,将其加载到内存中,并在两者之间设置所有内容,以便用户多次查询内存中的数据帧。完成查询后,控制台会提示用户继续输入新的输入集或退出应用程序。

我可以在 IDE 上很好地做到这一点。但是,我可以从 spark-shell 运行这个交互式 spark 应用程序吗?

我之前使用过 spark 作业服务器来实现对内存加载数据帧的多个交互式查询,但不是从 shell 中。有什么指点吗?

谢谢!

更新 1: 这是项目 jar 的外观及其与所有其他依赖项打包的方式。

jar tf target/myhome-0.0.1-SNAPSHOT.jar 
META-INF/MANIFEST.MF
META-INF/
my_home/
my_home/myhome/
my_home/myhome/App$$anonfun$foo$1.class
my_home/myhome/App$.class
my_home/myhome/App.class
my_home/myhome/Constants$.class
my_home/myhome/Constants.class
my_home/myhome/RecommendMatch$$anonfun$1.class
my_home/myhome/RecommendMatch$$anonfun$2.class
my_home/myhome/RecommendMatch$$anonfun$3.class
my_home/myhome/RecommendMatch$.class
my_home/myhome/RecommendMatch.class

并使用以下选项运行 spark-shell

spark-shell -i my_home/myhome/RecommendMatch.class --master local --jars /Users/anon/Documents/Works/sparkworkspace/myhome/target/myhome-0.0.1-SNAPSHOT.jar 

但 shell 在启动时会抛出以下消息。根据 localhost:4040 显示的环境加载 jars

Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
17/05/16 10:10:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/05/16 10:10:06 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
Spark context Web UI available at http://192.168.0.101:4040
Spark context available as 'sc' (master = local, app id = local-1494909601904).
Spark session available as 'spark'.
That file does not exist

Welcome to
 ...

更新 2(使用 spark-submit) 尝试使用 jar 的完整路径。接下来,尝试将项目 jar 复制到 bin 位置。

pwd
/usr/local/Cellar/apache-spark/2.1.0/bin

spark-submit --master local —-class my_home.myhome.RecommendMatch.class --jars myhome-0.0.1-SNAPSHOT.jar
Error: Cannot load main class from JAR file:/usr/local/Cellar/apache-spark/2.1.0/bin/—-class

【问题讨论】:

【参考方案1】:

尝试使用 -i <path_to_file> 选项来运行文件中的 scala 代码或 scala shell :load <path_to_file> 函数。

相关问答:Spark : how to run spark file from spark shell

【讨论】:

我看到了这个并尝试了它。请看我上面的更新。 这种风格适用于原始 scala 文件,使用的语法与您在 shell 中使用的语法相同。您基本上只是通过文件传递命令,而不是直接在 shell 中输入它们 啊,谢谢。那么我可以像这样调用 spark-shell spark-shell --master local --class my_home.myhome.RecommendMatch.class --jars /Users/anon/Documents/Works/sparkworkspace/myhome/target/myhome-0.0.1-快照.jar ?没有文件未找到错误,但我仍在为如何调用此类的主函数而苦苦挣扎【参考方案2】:

以下命令用于运行交互式 spark 应用程序。

spark-submit /usr/local/Cellar/apache-spark/2.1.0/bin/myhome-0.0.1-SNAPSHOT.jar

请注意,这是一个以主类作为入口点和所有依赖库构建的 uber jar。查看http://maven.apache.org/plugins/maven-shade-plugin/

【讨论】:

以上是关于如何从 spark-shell/spark-submit 运行交互式 Spark 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?