【SPARK】问题汇总(持续更新)

本文详细介绍了Spark的配置参数,包括`num-executors`、`executor-memory`和`executor-cores`等,强调了driver和executor的内存分配。还列举了`spark-submit`的重要参数,如`--master`、`--executor-memory`等,并讨论了Spark SQL与Hive的交互问题,如读取Parquet和ORC格式数据的设置。同时,提到了Spark作业运行时可能遇到的jar包冲突问题,特别是protobuf版本不一致的情况。最后,分享了解决Spark SQL表刷新和Stage任务状态延迟显示的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、num-executors,execuor-cores和executor-memory的分配
driver.memory :driver运行内存,默认值512m,一般2-6G
num-executors :集群中启动的executor总数
executor.memory :每个executor分配的内存数,默认值512m,一般4-8G
executor.cores :每个executor分配的核心数目
yarn.am.memory :AppMaster内存,默认值512m
yarn.am.memoryOverhead :am堆外内存,值为 AM memory * 0.07, 最小384
yarn.driver.memoryOverhead :driver堆外内存,driverMemory *0.07 最小384
yarn.executor.memoryOverhead :executor堆外内存,值为 executorMemory * 0.07, 最小384

每个executor从Yarn请求的内存 = executor.memory + yarn.executor.memoryOverhead

2、spark-submit 详细参数说明

参数名说明
–mastermaster 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
–deploy-mode在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
–class应用程序的主类,仅针对 java 或 scala 应用
–name应用程序的名称
–jars用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下
–packages包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
–exclude-packages为了避免冲突 而指定不包含的 package
–repositories远程 repository
–conf PROP=VALUE指定 spark 配置属性的值,
例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
–properties-file加载的配置文件,默认为 conf/spark-defaults.conf
–driver-memoryDriver内存,默认 1G
–driver-java-options传给 driver 的额外的 Java 选项
–driver-library-path传给 driver 的额外的库路径
–driver-class-path传给 driver 的额外的类路径
–driver-coresDriver 的核数,默认是1。在 yarn 或者 standalone 下使用
–executor-memory每个 executor 的内存,默认是1G
–total-executor-cores所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用
–num-executors启动的 executor 数量。默认为2。在 yarn 下使用
–executor-core每个 executor 的核数。在yarn或者standalone下使用

3、spark-sql读取hive创建表读取数据不一致或者为空null
Tez引擎:
spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive=true spark.hive.mapred.supports.subdirectories=true
文件为Parquet格式:
set mapred.input.dir.recursive=true;
set spark.sql.hive.convertMetastoreParquet=false;
文件为orc格式:
set mapred.input.dir.recursive=true;
set spark.sql.hive.convertMetastoreOrc=false;

4、spark-sql写入hive的orc表报错 orc的jar冲突
在这里插入图片描述
主要是因为spark和hive的orc版本不一致导致

5、spark运行作业报错,查看是jar包冲突

20/08/24 17:24:39 ERROR [Driver] ApplicationMaster: User class threw exception: java.lang.IncompatibleClassChangeError: class com.google.protobuf.Descriptors$OneofDescriptor has interface com.google.protobuf.Descriptors$GenericDescriptor as super class
java.lang.IncompatibleClassChangeError: class com.google.protobuf.Descriptors$OneofDescriptor has interface com.google.protobuf.Descriptors$GenericDescriptor as super class
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:362)

查看spark的protobuf版本和hadoop的protobuf版本不同产生冲突,剔除spark中的protobuf

6、sparksql表刷新
sql_context.sql(“REFRESH TABLE table_name”)
或者
spark.catalog.refreshTable(“my_table”)

7、spark上面stage的task任务状态不实时显示了好多天了,任务是正常的。只有job上 才能看到对应实时的task状态
在这里插入图片描述
在这里插入图片描述
以前实时显示,之后不显示了。刷新job能看到task实时在变化,刷新stage的话task看不到只有等整个stage全部执行完成后才显示这个stage的所欲task全部完成。估计spark存在这个问题,重启spark服务就好了。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值