【问题标题】:what should be the Hadoop cofigurations to be used for 100 gb of csv files for analysis in Spark在 Spark 中用于分析 100 GB csv 文件的 Hadoop 配置应该是什么?
【发布时间】:2018-03-12 02:46:33
【问题描述】:

我有大约 100 GB 的 CSV 格式数据,我打算对其进行一些转换,例如聚合、数据拆分,然后使用 Apache Spark 的 ML 包进行一些聚类。

我已经尝试通过在 MYSQ 上上传数据来尝试在 python 上自动化该过程,但构建任何解决方案都需要花费太多时间。

我需要设置什么配置以及如何从 spark 开始?

我是火花新手。我打算使用云服务。

【问题讨论】:

  • 哪些云服务?如果您在那里上传文件,则数据的大小无关紧要。您将需要至少 100GB 的可用内存来处理整个文件。如果要使用 HDFS,则需要至少 400GB 的磁盘空间,因为文件被复制 3 次,并且需要额外数据的开销

标签: apache-spark pyspark


【解决方案1】:
  1. 我将建议您学习在本地使用 Spark 处理一小部分数据;你可以独立运行它,几十到几百 MB。它是有限的,但您可以免费学习工具。您的第一个 spark 数据框查询可能是对源数据进行采样并将其保存为更有效的查询格式。
  2. CSV 不是适合大数据的格式; Spark 喜欢 Parquet 和 2.3+ ORC)。拥抱他们以获得更好的表现。
  3. 玩“笔记本”; Apache Zeppelin 是一种您可以在本地安装和运行的工具。

就像我说的,学会少量玩。 Spark 具有很强的交互性,使用小型数据集是一种快速学习的简单方法。

【讨论】:

  • 我很想这样做,但现在我正在进行一个项目,其中包含客户提供的大量 csv 文件。我在 mysql 上的解决方案需要花费大量时间,因此需要扩大规模。
【解决方案2】:

有很多方法可以做到这一点,但这取决于您的情况。据我所知,具有默认配置(没有任何特定调整)的 HDFS 工作正常。大多数 Hadoop 调优指南都集中在 YARN 方面。所以,让我制定一个如下计划:

一般来说,您可以将(原始)数据放在 HDFS 中,然后将它们加载到 Apache Spark 中,然后将它们保存在 Parquet/ORC 中,如下所示:

from pyspark.sql.types import StructType,StructField,StringType
myschema = StructType([StructField("FirstName",StringType(),True),StructField("LastName",StringType(),True)])
mydf = spark.read.format("com.databricks.spark.csv").option("header","true").schema(myschema).option("delimiter",",").load("hdfs://hadoopmaster:9000/user/hduser/mydata.csv")
mydf.count()
mydf.repartition(6).write.format("parquet").save("hdfs://hadoopmaster:9000/user/hduser/DataInParquet")

newdf = spark.read.parquet("hdfs://hadoopmaster:9000/user/hduser/DataInParquet")
newdf.count()

最后,比较mydf.count() 和newdf.count()。这将比原始格式运行得更快。此外,您的数据大小将从 100GB 减少到 ~24GB。

【讨论】:

    【解决方案3】:

    如果您是 hadoop 新手,请激发并有兴趣在云中设置 hadoop 环境。我建议您使用由 AWS 提供支持的 Elastic Map Reduce(EMR)。您可以使用用户定义的配置创建按需 spark 集群来处理各种数据集。

    https://aws.amazon.com/emr/

    https://aws.amazon.com/emr/details/spark/

    https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-spark-launch.html

    或者

    您可以在 EC2 实例之上或在任何具有所需节点数量、足够 RAM 和 CPU 的云平台中设置 hadoop 集群。存储优化实例比这里更适合分析大型数据集。

    我们不需要担心存储成本,对于存储优化的实例,AWS 提供免费的临时存储数据磁盘,大小为 1 - 2TB,具体取决于实例大小。

    注意:当虚拟机重新启动时,临时存储中的数据将会丢失。我们可以以最低的成本将处理后的数据持久化到 S3 中。

    在集群配置方面,要检查的事项清单。

    • Spark on YARN 是首选

    • 在纱线节点管理器容器设置中为 Spark 执行器设置最小和最大核心和内存。

    • 在 spark 中启用动态内存分配

    • 将容器大小设置为最大值,并将火花内存部分设置为最大值,以避免多次混洗以及频繁的溢出和缓存数据逐出。

    • 使用 kryo 序列化获得高性能。

    • 在洗牌之前为地图输出启用压缩。

    • 启用 spark Web UI 以跟踪您的应用程序任务及其阶段。

    Apache Spark 配置参考:https://spark.apache.org/docs/2.1.0/configuration.html

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2021-03-14
      • 2023-02-02
      • 2018-11-26
      • 1970-01-01
      • 2021-12-04
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多