配置过滤掉分区表中路径不存在的分区
操作场景
在MRS集群中使用Spark SQL查询Hive分区表是常见的数据分析操作。Hive分区表的分区元数据存储在MetaStore中,每个分区对应HDFS上的一个物理目录。当HDFS上的分区目录被手动删除、分区数据迁移后元数据未同步、或HDFS磁盘故障导致数据丢失时,分区元数据与HDFS物理路径会出现不一致,此时执行select查询会触发FileNotFoundException异常,导致查询失败。
MRS 3.6.0-LTS.1及之前版本:当读取Hive分区表时,如果指定的分区路径在HDFS上不存在,执行select查询时会报FileNotFoundException异常。为了避免这种情况,可以通过配置“spark.sql.hive.verifyPartitionPath”参数来过滤掉分区路径不存在的分区,来避免读取时报错。
配置描述
MRS 3.6.0-LTS.1及之前版本:可以通过以下两种方式配置是否过滤掉分区表分区路径不存在的分区。
方式一:在客户端配置参数。
- 安装Spark客户端。
详细操作请参考安装MRS客户端。
- 使用客户端安装用户登录Spark客户端节点。 在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:
表1 参数说明 参数
参数说明
取值示例
spark.sql.hive.verifyPartitionPath
配置读取Hive分区表时,是否过滤掉分区表分区路径不存在的分区。
- “true”:过滤掉分区路径不存在的分区。
- “false”:不进行过滤。
true
方式二:在spark-submit命令提交应用时,通过“--conf”参数配置是否过滤掉分区表分区路径不存在的分区。
spark-submit --class org.apache.spark.examples.SparkPi --conf spark.sql.hive.verifyPartitionPath=true $SPARK_HOME/lib/spark-examples_*.jar
相关文档
- 如需了解Spark常用配置参数的含义和用法,请参考Spark常用配置参数。
- 如需了解MRS客户端的安装与使用,请参考使用MRS客户端。
- 在使用Spark过程中遇到常见问题时,请参考Spark常见问题。