繁体   English   中英

Spark 可以写入 Azure Datalake Gen2 吗?

[英]Can Spark write to Azure Datalake Gen2?

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

我正在使用带有almond jupyter在本地笔记本中运行 spark。

我已经导入了 hadoop 依赖项:

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

这允许我在尝试将数据帧写入 azure 时使用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 存储吗? 微软确实放弃了创建“数据湖”产品的任务,但没有为带火花的连接器创建文档。

在 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. 根据文档配置客户端。

ADLS Gen2 是 Microsoft 部署的最好的对象存储 - 通过分层命名空间,您可以获得 O(1) 目录操作,这对于 spark 意味着高性能任务和作业提交。 安全性和权限也很棒。

是的,不幸的是,它无法与您拥有的 Spark 发行版配合使用 - 但是 Microsoft 无法将新连接器改装为 2017 年发布的一组工件。您将不得不升级您的依赖关系。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM