使用.NET Spark+Hadoop连接ADLS Gen2时遇IOStatisticsSource类找不到错误
解决.NET Spark 3.0.1 + Hadoop 3.2.2 连接Azure Data Lake Storage Gen2的依赖错误
问题根源
- 第一个错误(ClassNotFoundException):Hadoop 3.2.2默认不包含Azure Data Lake Storage Gen2(ABFS)的驱动类
SecureAzureBlobFileSystem,需额外添加对应依赖。 - 第二个错误(NoClassDefFoundError):混用了不同版本的Hadoop依赖——核心Hadoop用3.2.2,但添加了3.3.1版本的
hadoop-azure包。IOStatisticsSource是Hadoop 3.3.x新增的API,3.2.2版本中不存在,导致依赖缺失。
解决步骤
- 移除
hadoop-azure-3.3.1.jar,改用与Hadoop版本完全一致的hadoop-azure-3.2.2.jar - 补充配套的
azure-storage-8.6.6.jar(Hadoop 3.2.2官方适配的Azure存储依赖包) - 确保所有Hadoop相关jar包版本统一,杜绝跨版本依赖冲突
优化后的代码示例
添加Azure存储账户的认证配置(以账户密钥为例):
namespace MySparkApp { class Program { static void Main(string[] args) { SparkSession spark = SparkSession .Builder() .AppName("word_count_sample") // 配置存储账户密钥 .Config("fs.azure.account.key.<storage_account>.dfs.core.windows.net", "<your_storage_account_access_key>") .GetOrCreate(); DataFrame df = spark.Read().Json("abfss://<container_name>@<storage_account>.dfs.core.windows.net/sample/data/file.json"); df.Show(); spark.Stop(); } } }
依赖加载说明
- 将上述两个jar包放入Spark安装目录的
jars文件夹,或者在提交应用时通过--jars参数指定:spark-submit --class org.apache.spark.deploy.dotnet.DotnetRunner --master local[*] --jars hadoop-azure-3.2.2.jar,azure-storage-8.6.6.jar microsoft-spark-3-0_2.12-1.0.0.jar dotnet MySparkApp.dll
内容的提问来源于stack exchange,提问作者Shubham Mishra
相关产品推荐
相关产品推荐

