Spark可以写入Azure Datalake Gen2吗?

时间:2019-09-10 09:52:02

标签: azure apache-spark azure-storage azure-data-lake

除非使用Databricks,否则似乎不可能使用spark写入Azure Datalake Gen2。

我正在将jupyteralmond配合使用,以在本地笔记本中运行Spark。

我已经导入了hadoop依赖项:

import $ivy.`org.apache.hadoop:hadoop-azure:2.7.7`
import $ivy.`com.microsoft.azure:azure-storage:8.4.0` 

这使我在尝试将数据帧写入天蓝色时可以使用wasbs://协议

    spark.conf.set(
        "fs.azure.sas.[container].prodeumipsadatadump.blob.core.windows.net", 
        "?sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-09-09T23:33:45Z&st=2019-09-09T15:33:45Z&spr=https&sig=[truncated]")

这是错误的出处:

val data = spark.read.json(spark.createDataset(
  """{"name":"Yin", "age": 25.35,"address":{"city":"Columbus","state":"Ohio"}}""" :: Nil))

data
  .write
  .orc("wasbs://[filesystem]@[datalakegen2storageaccount].blob.core.windows.net/lalalalala")

我们现在遇到“分层​​命名空间帐户尚不支持Blob API”错误:

org.apache.hadoop.fs.azure.AzureException: com.microsoft.azure.storage.StorageException: Blob API is not yet supported for hierarchical namespace accounts.

那么这确实是不可能的吗?我应该只放弃Datalake gen2,而是使用常规的Blob存储吗?微软确实在创建“数据湖”产品方面投入了精力,但没有为带有火花的连接器创建任何文档。

2 个答案:

答案 0 :(得分:0)

我认为您必须启用预览功能才能将Blob API与Azure DataLake Gen2结合使用:Data Lake Gen2 Multi-Protocol-Access

我发现的另一件事:端点格式需要通过将“ blob”交换为“ dfs”来更新。参见here。但是我不确定这是否可以解决您的问题。

另一方面,您可以使用ABFS驱动程序来访问数据。这不受官方支持,但是您可以从无hadoop的spark解决方案开始,然后安装包含驱动程序的更新的hadoop版本。我认为这可能是一个选项,具体取决于您的情况:Adding hadoop ABFS driver to spark distribution

答案 1 :(得分:0)

在Spark中使用ADLS Gen2非常简单,并且微软还没有“放弃”,就如同“ ASF Spark附带的hadoop二进制文件不包含ABFS客户端”一样。 HD / Insights,Cloudera CDH6.x等中的软件都可以。

  1. 始终将hadoop- * JAR升级到Hadoop 3.2.1。这意味着他们所有人,而不是在以后的hadoop-azure-3.2.1 JAR中投入工作,并期望一切都会正常。
  2. 使用abfs://网址
  3. 将客户端配置为per the docs

ADLS Gen2是Microsoft部署的最佳对象存储-具有分层名称空间的O(1)目录操作,这对于高性能意味着任务和作业提交。安全性和权限也很棒。

是的,不幸的是,它不能满足您现有的Spark分配要求-但是Microsoft不能对新的连接器进行改造,因为它在2017年发布的工件太晚了。您将拥有升级您的依赖项。