我想停止火花壳上的各种消息.
我试图编辑该log4j.properties文件以阻止这些消息.
这是内容 log4j.properties
# Define the root logger with appender file
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO
Run Code Online (Sandbox Code Playgroud)
但是消息仍在控制台上显示.
以下是一些示例消息
15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 …Run Code Online (Sandbox Code Playgroud) 真的...已经讨论了很多.
然而,有很多歧义和一些答案提供...包括在jar/executor /驱动程序配置或选项中复制jar引用.
对于每个选项,应澄清含糊不清,不清楚和/或省略的细节:
--jarsSparkContext.addJar(...) 方法SparkContext.addFile(...) 方法 --conf spark.driver.extraClassPath=... 要么 --driver-class-path ...--conf spark.driver.extraLibraryPath=..., 要么 --driver-library-path ...--conf spark.executor.extraClassPath=...--conf spark.executor.extraLibraryPath=...我知道在哪里可以找到主要的spark文档,特别是关于如何提交,可用的选项以及JavaDoc.然而,这对我来说仍然有一些漏洞,尽管它也有部分回答.
我希望它不是那么复杂,有人可以给我一个清晰简洁的答案.
如果我从文档中猜测,似乎--jars和SparkContext addJar,addFile方法是自动分发文件的方法,而其他选项只是修改ClassPath.
假设为简单起见,我可以安全地使用3个主要选项同时添加其他应用程序jar文件:
spark-submit --jar additional1.jar,additional2.jar \
--driver-library-path additional1.jar:additional2.jar \
--conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
--class MyClass main-application.jar
Run Code Online (Sandbox Code Playgroud)
找到一篇关于另一篇文章答案的好文章.然而没有什么新学到的 海报确实很好地评论了本地驱动程序(纱线客户端)和远程驱动程序(纱线群集)之间的区别.记住这一点非常重要.
我们有一个基于 pyspark 的应用程序,我们正在执行 Spark 提交,如下所示。应用程序正在按预期工作,但是我们看到一条奇怪的警告消息。有什么办法可以处理这个问题或者为什么会出现这种情况?
注意:该群集是 Azure HDI 群集。
spark-submit --master yarn --deploy-mode cluster --jars file:/<localpath>/* --py-files pyFiles/__init__.py,pyFiles/<abc>.py,pyFiles/<abd>.py --files files/<env>.properties,files/<config>.json main.py
Run Code Online (Sandbox Code Playgroud)
看到的警告是:
warnings.warn( /usr/hdp/current/spark3-client/python/pyspark/context.py:256: RuntimeWarning: 无法添加文件 [file:///home/sshuser/project/pyFiles/abc.py] 指定在“spark.submit.pyFiles”中到Python路径:
/mnt/resource/hadoop/yarn/local/usercache/sshuser/filecache/929
以上警告针对所有文件,即 abc.py、abd.py 等(传递给 --py-files 的)
我使用连接到集群,然后使用ssh将程序发送到集群
spark-submit --master yarn myProgram.py
Run Code Online (Sandbox Code Playgroud)
我想将结果保存在文本文件中,我尝试使用以下行:
counts.write.json("hdfs://home/myDir/text_file.txt")
counts.write.csv("hdfs://home/myDir/text_file.csv")
Run Code Online (Sandbox Code Playgroud)
但是,它们都不起作用.程序结束,我找不到文本文件myDir.你知道我怎么能这样做吗?
还有,有没有办法直接写到我的本地机器?
编辑:我发现该home目录不存在所以现在我将结果保存为:
counts.write.json("hdfs:///user/username/text_file.txt")
但是这会创建一个名为的目录text_file.txt,里面我有很多文件,里面有部分结果.但是我想要一个包含最终结果的文件.我有什么想法可以做到这一点?
我能够运行pyspark并在Jupyter笔记本上运行脚本.但是当我尝试使用spark-submit从终端运行文件时,收到此错误:
执行Jupyter命令文件路径时出错[Errno 2]没有这样的文件或目录
任何人都可以帮我解决配置错误吗?
我正在使用Python 2.7和Spark 1.6
在我的应用程序中,我需要连接到数据库,所以我需要在提交应用程序时传递IP地址和数据库名称.
我按如下方式提交申请:
./spark-submit --class class name --master spark://localhost:7077 \
--deploy-mode client /home/hadoop/myjar.jar
Run Code Online (Sandbox Code Playgroud) 我是Spark的初学者,我正在运行我的应用程序从文本字段中读取14KB数据,执行一些转换和操作(收集,收集地图)并将数据保存到数据库
我在我的macbook中本地运行它有16G内存,有8个逻辑内核.
Java Max堆设置为12G.
这是我用来运行应用程序的命令.
bin/spark-submit --class com.myapp.application --master local [*] - executor-memory 2G --driver-memory 4G /jars/application.jar
我收到以下警告
2017-01-13 16:57:31.579 [Executor task launch worker -8hread] WARN org.apache.spark.storage.MemoryStore - 没有足够的空间来缓存内存中的rdd_57_0!(到目前为止计算的26.4 MB)
任何人都可以指导我这里出了什么问题,我怎样才能提高性能?还有如何优化漏斗?这是我本地系统中发生的泄漏的视图
我最近发现了一种在Apache Spark中使用logback而不是log4j的方法(两者都用于本地使用spark-submit).然而,最后一块遗失了.
问题是Spark非常努力地不在logback.xml其类路径中查看设置.我已经找到了一种在本地执行期间加载它的方法:
基本上,检查系统属性logback.configurationFile,但加载logback.xml从我/src/main/resources/以防万一:
// the same as default: https://logback.qos.ch/manual/configuration.html
private val LogbackLocation = Option(System.getProperty("logback.configurationFile"))
// add some default logback.xml to your /src/main/resources
private lazy val defaultLogbackConf = getClass.getResource("/logback.xml").getPath
private def getLogbackConfigPath = {
val path = LogbackLocation.map(new File(_).getPath).getOrElse(defaultLogbackConf)
logger.info(s"Loading logging configuration from: $path")
path
}
Run Code Online (Sandbox Code Playgroud)
然后当我初始化我的SparkContext时......
val sc = SparkContext.getOrCreate(conf)
sc.addFile(getLogbackConfigPath)
Run Code Online (Sandbox Code Playgroud)
我可以确认它在本地工作.
spark-submitspark-submit \
...
--master yarn \
--class com.company.Main\
/path/to/my/application-fat.jar \ …Run Code Online (Sandbox Code Playgroud) 我想基于S3上的文件上传事件在AWS EMR集群上执行spark submit作业.我正在使用AWS Lambda函数来捕获事件,但我不知道如何从Lambda函数提交EMR集群上的spark提交作业.
我搜索过的大多数答案都谈到了在EMR集群中添加一个步骤.但我不知道我是否可以在添加的步骤中添加任何步骤来激发"spark submit --with args".
amazon-web-services amazon-emr apache-spark aws-lambda spark-submit
我正在尝试使用 Spark-submit 将我的 Pyspark 应用程序提交到 Kubernetes 集群 (Minikube):
./bin/spark-submit \
--master k8s://https://192.168.64.4:8443 \
--deploy-mode cluster \
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.1 \
--conf spark.kubernetes.container.image='pyspark:dev' \
--conf spark.kubernetes.container.image.pullPolicy='Never' \
local:///main.py
Run Code Online (Sandbox Code Playgroud)
应用程序尝试访问部署在集群内的 Kafka 实例,因此我指定了 jar 依赖项:
--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.0.1
Run Code Online (Sandbox Code Playgroud)
我正在使用的容器映像基于我使用实用程序脚本构建的容器映像。我已经将我的应用程序所需的所有 python 依赖项打包在其中。
驱动程序正确部署并获取 Kafka 包(如果需要,我可以提供日志)并在新的 pod 中启动执行器。
但随后执行器 Pod 崩溃了:
ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1)
java.lang.ClassNotFoundException: org.apache.spark.sql.kafka010.KafkaBatchInputPartition
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:68)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1986)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1850)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2160)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1667)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2405) …Run Code Online (Sandbox Code Playgroud) spark-submit ×10
apache-spark ×8
java ×4
pyspark ×4
python ×2
scala ×2
amazon-emr ×1
aws-lambda ×1
hdfs ×1
jar ×1
kubernetes ×1
log4j ×1