scala - Spark on HDInsights - 方案 : adl 没有文件系统

标签 scala apache-spark azure-data-lake azure-hdinsight

我正在编写一个处理来自 ADLS 的文件的应用程序。当尝试通过运行 spark-shell 中的代码从集群读取文件时,访问文件没有问题。但是,当我尝试在集群上运行 sbt 项目时,它会给我:

[错误] java.io.IOException:方案没有文件系统:adl

implicit val spark = SparkSession.builder().master("local[*]").appName("AppMain").getOrCreate()
import spark.implicits._

val listOfFiles = spark.sparkContext.binaryFiles("adl://adlAddressHere/FolderHere/")

val fileList = listOfFiles.collect()

这是 HDI 3.6 上的 spark 2.2

最佳答案

在你的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 上下文:

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 context 使用 RDD,您可以告诉 Hadoop Configuration在哪里可以找到你的 org.apache.hadoop.fs.adl.AdlFileSystem 的实现.

key 的格式为 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 session:

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")

关于scala - Spark on HDInsights - 方案 : adl 没有文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913598/

相关文章:

mysql - Spark Mysql 快速更新

python - 无法从列表 : pyspark 创建数据框

azure - 复制事件后继续在 Data Lake 中暂存 Blob

azure - 如何使用 webhdfs API 访问 Azure datalake

algorithm - 创建一个函数,但也要确保我实现了另一个函数。是否可以?

scala - 使用上下文绑定(bind)时找不到隐式值

Scala 元组类型组合

java - 如何使用 Java 在 Spark 中组合或合并两个稀疏 vector ?

azure - 是否应该使用 Azure Synapse 的主存储作为数据湖?

multithreading - 这段代码中是否存在潜在的饥饿问题,或者只是我?