Spark读取HBase报SparkSQLPushDownFilter类未找到异常求助
问题根因
报错ClassNotFoundException: org.apache.hadoop.hbase.spark.SparkSQLPushDownFilter的核心原因是YARN集群的Executor运行时无法加载到hbase-spark-1.0.0.jar包内的对应类,常见诱因如下:
- 提交时用相对路径指定
--jars ./hbase-spark-1.0.0.jar,仅Driver节点能读取到本地路径下的jar,Executor节点本地无该jar,无法加载对应类 - 代码中重复调用
spark.sparkContext.addJar和--jars参数,可能导致类加载冲突 - 若打包时配置了依赖排除规则,可能误将hbase-spark相关类排除在业务jar外
- 集群HBase服务端版本和你依赖的2.1.0不一致,引发类版本不兼容
解决方案
- 优先删除代码中
spark.sparkContext.addJar("./hbase-spark-1.0.0.jar")这行,和--jars参数功能重复,易引发冲突 - 解决jar分发问题,二选一即可:
- 先将
hbase-spark-1.0.0.jar上传到HDFS的公共可访问路径,提交时将--jars参数改为--jars hdfs:///你的HDFS路径/hbase-spark-1.0.0.jar,YARN会自动将jar分发到所有Executor节点 - 提交时直接用
--packages org.apache.hbase.connectors.spark:hbase-spark:1.0.0替换--jars参数,Spark会自动拉取对应依赖并分发
- 先将
- 若上述方案无效,检查打包配置:
- 确认sbt的assembly打包规则没有排除
org.apache.hbase.connectors.spark相关依赖 - 若不想单独传外部jar,可通过sbt-assembly插件将hbase-spark依赖直接打入业务jar包,打包时注意将Spark、Hadoop原生依赖设为
provided,避免和集群自带包冲突
- 确认sbt的assembly打包规则没有排除
- 核对集群HBase服务端版本,保证和你依赖的2.1.0完全一致,若为第三方发行版(如CDH、HDP),需替换为对应发行版的HBase依赖,避免类不兼容
内容的提问来源于stack exchange,提问作者pan jiayi
相关产品推荐
相关产品推荐

