2

我有一个基本问题,希望能更好地理解:

背景

假设我有一个巨大的 CSV 文件(50 GB),我想将其用于数据科学团队的分析。理想情况下,团队的每个成员都能够以他们选择的语言与数据交互,数据不需要频繁移动(考虑到它的大小),并且所有人都可以灵活地访问计算资源。

建议的解决方案

Apache Spark 似乎是当前满足上述要求的解决方案的领先者。Scala、Python、SQL 和 R 都能够在灵活的计算资源之上(如果利用 DataBricks、Azure、AWS、Cloudera 等云提供商)访问其所在位置的数据。

问题

以 Microsoft Azure / HDInsight 域中的特定示例为例。假设我们要将这个大型 CSV 上传到 Azure Data Lake。如果我们随后利用 HDInsight 中的 Spark 为这些数据定义架构,我们是否需要从数据所在的位置移动/导入数据?

我的理解可能是错误的,一个关键的好处是数据能够以它的原生 CSV 格式驻留在数据湖中。在其上运行计算不需要移动它。此外,如果我们希望根据需要经常关闭/启动 Spark 集群,我们可以这样做,只需将它们重新指向廉价存储的 CSV。

结论

您能够就上述内容提供任何确认,或澄清误解,将不胜感激。Hadoop / Spark 生态系统继续快速发展,我想确保我对它当前的能力有一个正确的理解。

4

2 回答 2

1

简短的回答是肯定的,该文件可以保留在 Azure Data Lake 存储中。您可以简单地将 Data Lake Store 作为附加存储帐户添加到 Spark HDInsight 群集,或者甚至在预配群集时将其设为默认存储帐户。这将使您的所有 Spark 作业都可以访问存储帐户中的数据文件。

请在此处查看更多信息: https ://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-use-blob-storage#using-azure-data-lake-store-with-hdinsight-clusters

请注意,如果您选择拆除 HDInsight 群集并且将 Hive 与 Spark 结合使用以实现架构/表持久性,请确保您使用外部数据库来托管您的元存储。

有关外部元存储的更多信息,请参见此处: https ://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-hadoop-provision-linux-clusters#a-nameuse-hiveoozie-metastoreahive-metastore

于 2017-05-14T10:09:38.183 回答
1

2点注意事项:

  1. 使用 Parquet 进行高效存储:最好以 Parquet 格式而不是 CSV 存储数据,因为它可以节省大量空间,并且使用带有 Parquet 的 Spark(由于其列格式)将为您提供更好的查询性能,因为谓词下推。您可以使用 Parquet 将文件压缩至 60%。
  2. Data Locality 数据驻留在 executor 机器上:如果您在 Azure 上创建集群并将数据存储在 Azure Data Lake 上,那么将有一些数据从数据湖移动到 executor,除非数据对于 executor 是本地的。

希望它能回答你的问题。

于 2017-05-16T21:31:40.060 回答