当前位置: 首页 > 知识库问答 >
问题:

pyspark在AWS EMR上的应用

宋涵忍
2023-03-14

我对PySpark和AWS EMR都是新手。我得到了一个小项目,在这个项目中,我需要每小时擦洗大量的数据文件,并在其基础上构建聚合数据集。这些数据文件存储在S3上,我可以利用Spark中的一些基本函数(如filter和map)来导出聚合数据。为了节省出口成本,并且在执行了一些CBA分析之后,我决定创建一个EMR集群并进行pypark调用。使用由S3 bucket中创建的文件触发的Lambda函数,这个概念工作得很好。我正在将输出文件写回S3。

  1. 但我不能理解我创建的3节点EMR集群的必要性及其对我的用途。在这里,我如何使用Hadoop文件系统和节点上可用的所有存储?
  2. 如何查看(如果可能的话)群集中的从/核心节点的利用率?我怎么知道他们被使用,多久使用一次,等等?我正在主节点上执行pyspark代码。
  3. 有没有EMR的替代方案可以与Pyspark一起使用?

是否有任何好的文件可以得到更好的理解。

谢谢

共有1个答案

杜鸿彩
2023-03-14

>

  • Spark是一个分布式计算框架。它可以处理大于内存的数据集,并将工作负载以块形式并行地拆分给多个工作者。默认情况下,EMR创建1个主节点和2个工作节点。spark节点上的磁盘空间通常不会直接使用。Spark可以使用该空间缓存临时结果。
    要使用Hadoop文件系统,需要在aws中启动hdfs服务。然而,s3也是分布式存储。它由Hadoop库支持。火花EMR船与Hadoop驱动程序和支持S3开箱即用。在S3中使用spark是一个非常有效的存储解决方案,对于许多基本的数据处理任务来说也是足够好的。

    是AWS EMR中的spark manager UI。您可以看到每个正在运行的spark应用程序会话和当前作业。通过单击作业,您可以看到使用了多少执行程序。那些执行器是否在所有节点上运行取决于您的spark内存和cpu配置。调整这些是一个很大的话题。这里有很好的提示。还有一个硬件监控选项卡,显示每个节点的cpu和内存使用情况。火花代码总是在主节点上执行。但它只是在该节点上创建一个DAG计划,并根据该计划将实际工作转移到工作节点。因此,指南提到的是提交spark应用程序,而不是执行。

    是的。您可以在正常的ec2实例上启动自己的spark集群。甚至还有一个独立模式,只允许在一台机器上启动spark。这是相当一些足迹,那是安装然后。而且您仍然需要调优内存、cpu和执行器设置。因此,与仅仅在python中实现一些多处理或使用dask相比,这是相当复杂的。然而,这样做是有正当理由的。它允许在一台机器上使用所有内核。它允许您使用一个众所周知的、良好的文档化API。同样的一个,可以用来处理petabytes的数据。上面的链接文章解释了动机。

    另一种可能是使用AWS胶水。它是无服务器火花。该服务会将您的作业提交给AWS上的一些按需spark节点,您对此没有控制权。类似于lambda函数如何在随机AWS EC2实例上运行。然而,胶水也有一些局限性。使用pyspark on glue,您不能安装带有C扩展的python库,例如numpy、pandas和大多数ml库。此外,Glue还强制您在Athena目录中创建数据的模式映射。但独立的spark可以在飞行中处理这些。

    Databricks还在AWS之外提供了单独的无服务器spark解决方案。在我看来,它更复杂。它还允许自定义C扩展。

    大部分官方文档都集中在不同的数据处理API上,而不是apache Spark的内部。GitHub上有一些关于spark内部的好注释。我想每本好书都会涉及Spark的一些内部工作。AWS EMR只是一个自动火花集群与纱线编排器。(遗憾的是,从来没有读过关于spark的好书,到处都有一些信息,所以不能推荐一本)

  •  类似资料:
    • 2)对于intellij,当我在pyspark中安装并在1中进行必要的设置后,是否还需要进行额外的配置? 太感谢你了。我再次道歉,如果我问了一个愚蠢的问题,请原谅。

    • 从昨天开始,我的pySpark代码就面临着一个奇怪的行为。我正在用PyCharm和Spark1.5在windows上工作。 我有时会有代码工作....这使得运行不一致....如有任何建议,将不胜感激... 更新:在回顾问题之后,它看起来是完全相同的行为Matei描述如下。显然,在缩短输入csv文件时,问题得到了解决。

    • 我试图使用下面给出的代码在Google Colab上安装PySpark,但出现以下错误。 此代码已成功运行一次。但它在笔记本重启后抛出此错误。我甚至尝试过从不同的Google帐户运行它,但再次出现相同的错误。 (还有什么方法可以让我们在笔记本重新启动后不需要每次安装PySpark?) !apt get安装openjdk-8-jdk-headless-qq !wget-qhttp://apache.

    • 下面是一些示例代码: 这是我希望看到的输出:

    • 编写此自定义项是为了用变量替换列的值。Python 2.7;Spark 2.2.0 变量L_1到L_3更新了每行的列。我这样称呼它: 错误是:

    • 我正试图在PySpark上运行NuPIC,但我遇到了麻烦。有没有人知道我该怎么修好它? 当我不使用PySpark时,代码运行良好,但我现在尝试从Spark数据集运行它。 我试图使用目录中的源代码来运行它,因为通过安装Nupic包来运行它会导致一些其他错误。 谢谢你的帮助!! 我正在尝试运行这个函数 然而,我得到了这个错误,并不理解。 我想NuPIC无法访问frameworks/opf/htm_pr