在你的
build.sbt
文件中添加以下内容:
libraryDependencies += "org.apache.hadoop" % "hadoop-azure-datalake" % "2.8.0" % Provided
我使用Spark 2.3.1
而不是2.2
。那个版本能够很好地与hadoop-azure-datalake 2.8.0
配合使用。
接下来,配置你的Spark context:
(注:Original Answer翻译成“最初的回答”)
val spark: SparkSession = SparkSession.builder.master("local").getOrCreate()
import spark.implicits._
val hadoopConf = spark.sparkContext.hadoopConfiguration
hadoopConf.set("fs.adl.impl", "org.apache.hadoop.fs.adl.AdlFileSystem")
hadoopConf.set("fs.AbstractFileSystem.adl.impl", "org.apache.hadoop.fs.adl.Adl")
hadoopConf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
hadoopConf.set("dfs.adls.oauth2.client.id", clientId)
hadoopConf.set("dfs.adls.oauth2.credential", clientSecret)
hadoopConf.set("dfs.adls.oauth2.refresh.url", s"https://login.microsoftonline.com/$tenantId/oauth2/token")
TL;DR;
如果您正在通过Spark上下文使用RDD,您可以告诉Hadoop Configuration 您的 org.apache.hadoop.fs.adl.AdlFileSystem
实现在哪里。
关键字的格式为fs.<fs-prefix>.impl
,值是实现类org.apache.hadoop.fs.FileSystem
的完整类名。
在您的情况下,您需要fs.adl.impl
,由org.apache.hadoop.fs.adl.AdlFileSystem
实现。
val spark: SparkSession = SparkSession.builder.master("local").getOrCreate()
import spark.implicits._
val hadoopConf = spark.sparkContext.hadoopConfiguration
hadoopConf.set("fs.adl.impl", "org.apache.hadoop.fs.adl.AdlFileSystem")
我通常使用Spark SQL,因此我需要配置Spark会话:
我经常使用Spark SQL,所以我也需要配置Spark会话:
val spark: SparkSession = SparkSession.builder.master("local").getOrCreate()
spark.conf.set("fs.adl.impl", "org.apache.hadoop.fs.adl.AdlFileSystem")
spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("dfs.adls.oauth2.client.id", clientId)
spark.conf.set("dfs.adls.oauth2.credential", clientSecret)
spark.conf.set("dfs.adls.oauth2.refresh.url", s"https://login.microsoftonline.com/$tenantId/oauth2/token")