当前位置: 首页 > 工具软件 > Apache Toree > 使用案例 >

hadoopde mapr_有关MapR数据平台上Apache Spark的十大问题

段干华晖
2023-12-01

hadoopde mapr

在过去的几周中,我们已经看到许多围绕Apache Spark的活动和动量。 在旧金山的Spark峰会上,我们宣布了在MapR平台上运行的企业级Spark发行版 ,并且在此活动中我们引起了很多兴趣。 客户越来越倾向于使用Spark作为大数据用例的主要计算引擎,上周我们在Converge社区举办了一个“向Spark提出任何要求”论坛时,我们得到了进一步的证明。 进行了一些精彩的讨论,我们的Spark专家回答了客户和合作伙伴的问题。 以下是其中一些讨论的摘要:

如何使用Spark(Java)写回MapR Streams

现在,我可以使用Spark从MapR流中读取内容。 但是现在我想使用Spark(和Java)写回它们。 几乎没有任何在线文档可提供给Scala,也没有任何Java可用。 我确实找到了一些Scala代码中提到的“ sendToKafka ”函数,但是对于Java来说,该函数不起作用 (因为它编写了DStream且我正在使用JavaDStream )。 我所寻找的只是用于MapR Streams和Spark的Java文档,或者只是一个使我能够将JavaDStream写入MapR Streams(最好使用Java)的函数。

答1:

  • 没有直接的方法可以将完整的DStream发送到Kafka。 设计模式将对来自传入DStream的RDD具有.foreach()。 您将使用MapR Streams(Kafka)API来实例化Producer,然后(通常)在.foreach()中的每个记录上使用Producer.send()。
  • 在Java中,您对DStream进行迭代,为每个消息调用Producer.send()方法。

答案2:目前,org.apache.spark.streaming.kafka.producer包中只有一个Scala生产者。 (火花1.6.1)

我们正在为Spark 1.5.2配置安全性,并且面临以下概述的一些挑战:

  1. 并非所有Spark Web UI都从http移动到https(例如:端口4040 / SparkHistoryServer等)。
  2. 在启动Spark – SQL和spark-shell时,我们面临很多问题:sqlcontext,hivemetastore,哨兵配置等。

请提供启用Spark安全性时要遵循的详细说明/步骤。 MapR 5.1群集是一个3节点安全群集,为所有组件启用了本机安全性。 我们的Spark集群在MapR 5.1的YARN模式下运行Spark。

答案:如果已将群集配置为安全群集,则无需更改任何其他配置。 在安装过程中执行的“ configure.sh”命令(或MapR安装程序)将为您配置YARN安全性。 通过扩展,用YARN执行的Spark也将是安全的。

在我们的应用程序中,我们有大量的“流数据”(即CSV文件每隔五分钟到达一次),我们希望存储所有数据直至达到使用期限,并形成实时RDD视图,可视化将通过钻取访问。

对于Spark应用程序,最佳存储方法是什么– Spark DataFrame,MapR-DB表或仅Parquet文件? 所有这些都可以通过Spark和Drill进行访问,但是如果我们只是基于几个子键进行常规的列查找,那么哪个键更可取呢?

答案1:基于该线程中的有限信息,并且鉴于您的常见查找是基于一组已知列的,因此您似乎希望将它们存储为Parquet文件。 钻头经过优化,可以读取木地板。 请分享有关SLA的更多信息,如果您打算将数据保留在内存中(例如,可以将其长时间保留在内存中吗?),这可能意味着使用Spark DataFrame。

答案2:如果您需要更新数据,则HBase的更新速度会更快。 如果您主要是想读取数据而不要更新数据,那么Parquet可以进行快速的列式读取优化。

我们想从独立的Java应用程序中使用Spark。 Java应用程序应生成一个临时表并启动Hive Thrift Server。 我们应该使用哪些类将Java应用程序连接到Spark? SparkLauncher? 是否有其他方法(SparkLauncher除外)而不使用spark-submit成功?

答:这在很大程度上取决于Spark应用程序的执行位置。 我假设Spark应用程序将在MapR集群上执行。 如果是这样,spark-submit是对Java应用程序执行此操作的方法。 Java应用程序在Spark集群上的执行方式不那么灵活。

我们想从HBase表中加载数据并将其转换为DataFrame以执行聚合。 由于Scala的case类的参数限制为22个,因此当列数大于22时如何创建模式? 当前,我们已经创建了一个Hive外部表并使用HiveContext查询以获取一个DataFrame。 有什么方法可以通过直接扫描HBase从RDD创建数据帧?

答案:当您有22列以上时,可以以编程方式指定架构。 可以通过三个步骤以编程方式创建DataFrame。

  1. 从原始RDD创建行的RDD。
  2. 在第1步中创建的RDD中,创建一个与StructType表示的模式匹配的行结构。
  3. 通过SQLContext提供的createDataFrame方法将模式应用于行的RDD。

当前,您无法通过使用当前版本扫描HBase来创建DataFrame。 没有正在处理的已发布模块。

当我使用DataFrame进行像sum之类的聚合时,会遇到双精度问题。 例如,不是913.76,而是返回913.7600000000001,而不是6796.25,而是返回6796.249999999995。 我正在使用BigDecimal的setScale(2,BigDecimal.RoundingMode.HALF_UP)方法来舍入该值。 有什么方法可以解决这个精度问题,而无需应用另一个舍入函数?

答:精度的下降与Java中数据类型之间的转换有关。 这是常见的情况,在数学上四舍五入是最常见的解决方案。 我将检查产生RDD的字段的实际数据类型,并完全匹配DataFrame类,以减少精度错误。

我们有一个集群,它是几年前在Spark流行和广泛使用之前创建的。 现在,我们面临着Spark暂存目录的磁盘空间较小的问题(如MapR文档所建议的,操作系统的磁盘空间较小,而MapR-FS的其余磁盘空间对于Spark而言则不太好)。 由于我们现在具有MapR-FS上的数据,因此从MapR-FS上窃取磁盘以进行Spartk scrach / tmp的过程非常缓慢/昂贵。 我们可以在MapR Community Edition 5.1上临时使用MapR-FS本地卷吗?

有一本手册,说明如何为Spark Standalone配置暂存目录:

MapR 5.1文档。 YARN上有Spark的相应文档吗?

答:是的,您可以将MapR-FS用于Spark本地目录,如5.1文档中所述。 但是,在MapR社区版中,这将通过单个NFS服务器实例发送所有暂存文件。 这种配置的性能将不如本地磁盘目录。

YARN上的Spark不使用Spark本地目录; 临时空间由YARN处理。 在MapR上,YARN目录已经在MapR-FS上。

我想知道与dev相关的Spark的典型管理员问题,而devops工程师可能需要执行除安装和配置之外的其他事情。 一些详尽的工作将不胜感激!

答:对于CI环境(Jenkins等),Spark将同时使用Java和Scala,因此需要安装全套Scala开发工具(Scala编译器)。 大多数Java Spark项目都是使用Maven构建的。 还有一些Scala项目可能也需要“ sbt”才能完成。

根据开发人员在集群中使用Spark的方式,您可能需要考虑对每个开发人员一次可以执行多少个执行程序和任务设置一些限制。 如果在YARN下运行Spark,则可以使用YARN队列来协助集群上的资源管理。

测试和测试用例可能不应在集群上运行,而应将Jenkins配置为使用“ local [2]” Spark主站。 当代码被调试并在本地Spark实例上运行时,您可以在整个集群上进行大规模测试。

我正在使用边缘节点(MapR客户端)和Spark 1.6.1,并使用YARN将任务分发到集群。 目前,我们正在运行临时分析任务,而不是生产重复任务。 我正在使用Jupyter创建和执行代码,并使用Apache Toree内核将其定向到Spark。 我拥有此配置,因此我选择了启动Spark的命令。 我没有直接访问集群或MapR客户端安装的权限,因此我必须提出支持请求才能进行任何修改MapR或Spark Client安装以及集群上的任何工作。

到目前为止,虽然我看到使用GraphFrames和spark-csv之类的东西的机会越来越多,但是我还没有使用Spark软件包。 我知道我必须使用–packages开关才能使用Spark软件包。 我希望我每次使用新软件包时都不必打入支持电话(使用Python或R时不必这样做)。

Spark程序包必须放在哪里?

答:两种基本方法:在Spark从站的类路径中或在提交供执行的自包含JAR中。 classpath不一定必须在/ opt / mapr中

Spark软件包是否必须位于我的边缘节点上或群集中的所有节点上?

程序包必须可用于 Spark集群中的所有节点。 在将软件包添加到Spark集群的所有情况下,spark-env.sh均可用于设置查找事物所需的几乎所有路径。

对于我目前的一位客户,我们正在寻求卸载多个PB有价值的数据。 由于确实需要快速访问所有数据,因此我们正在寻求Apache Spark 2.0实现。 DWH的部分工作是保留50多个来源中所有记录的历史记录。 这意味着随着时间的推移,我们将使用所有源数据构建一个相当大的ODS(采用“ SCD II型”结构)。 然后,该数据的一部分将用作Data Vault和最终报告的源。

我们有两个问题:

  1. ODS占我们容量的90%,并且是几个PB(没有错字,如数千GB)。 这正是Spark 2.0出现的地方,因为我们必须匹配数十亿条记录。
  2. 跟随来源。 我们目前有50多个源系统,另外还有40多个计划中。 我们大部分时间都在关注源的更改,即使这些更改与数据集市无关。 如果我们可以将数据从大型机转移到Hadoop + Spark解决方案,则可以从写模式切换到读模式,这意味着我们只需要花时间在相关数据上。

答:我们将很快发布开发预览。 GA可能会在社区GA之后的几周后发布。 再过几周的主要原因是要确保与其余Hadoop堆栈的强大互操作性。 Spark 2.0 GA本身可以确保Spark正常运行,但是互操作性测试可以揭示问题,因此我们需要花费几周的时间来确保强大的互操作性。

我们相信这在您使用Spark时很有用。 不要犹豫,在Converge社区与我们互动。

翻译自: https://www.javacodegeeks.com/2016/06/top-10-questions-apache-spark-mapr-data-platform.html

hadoopde mapr

 类似资料: