使用 Azure HDInsight IO 缓存提升 Apache Spark 工作负载的性能

注释

  • IO 缓存支持至 Spark 2.3,Spark 2.4(HDInsight 4.0)和 Spark 3.1.2(HDInsight 5.0)将不再支持。

IO Cache 是 Azure HDInsight 的数据缓存服务,旨在提升 Apache Spark 作业的性能。 IO 缓存还支持Apache TEZApache Hive 工作负载,这些工作负载可以在 Apache Spark 集群上运行。 IO Cache 使用了一个名为 RubiX 的开源缓存组件。 RubiX 是一个本地磁盘缓存,用于访问云存储系统数据的大数据分析引擎。 RubiX 在缓存系统中独树一帜,因为它使用 Solid-State 驱动器(SSD),而不是为缓存目的预留操作内存。 IO缓存服务在集群的每个工作节点上启动和管理RubiX元数据服务器。 它还配置集群的所有服务以实现 RubiX 缓存的透明使用。

大多数SSD提供的带宽超过每秒1GByte。 这种带宽,加上操作系统内存文件缓存,提供了足够的带宽来加载大数据计算处理器,如Apache Spark。 将可用内存留给 Apache Spark,用于处理高度依赖内存的任务,例如混洗操作。 独占使用操作内存使Apache Spark实现资源的最佳利用。

注释

IO 缓存目前使用 RubiX 作为缓存组件,但未来版本可能会有所变化。 请使用 IO 缓存接口,不要直接依赖 RubiX 实现。 目前 IO 缓存仅支持 Azure BLOB 存储。

Azure HDInsight IO 缓存的优势

使用 IO Cache 可以提升从 Azure Blob 存储 读取数据的作业性能。

使用 IO 缓存时,你不需要对 Spark 作业做任何更改就能看到性能提升。 当 IO 缓存被禁用时,这段 Spark 代码会远程从 Azure Blob 存储 读取数据: spark.read.load('wasbs:///myfolder/data.parquet').count()。 当激活IO缓存时,同一行代码会导致IO缓存读取。 在接下来的读取中,数据会从SSD本地读取。 HDInsight集群上的工作节点配备了本地连接的专用SSD硬盘。 HDInsight IO 缓存利用这些本地 SSD 进行缓存,提供最低的延迟并最大化带宽。

入门

Azure HDInsight IO Cache 在预览中默认已停用。 IO 缓存可在运行 Apache Spark 2.3 的 Azure HDInsight 3.6+ Spark 集群上使用。 要在HDInsight 4.0上激活IO缓存,请执行以下步骤:

  1. 在网络浏览器中,转到 https://CLUSTERNAME.azurehdinsight.cn,其中 CLUSTERNAME 是您群集的名称。

  2. 选择左侧的 IO缓存 服务。

  3. 选择 操作 (HDI 3.6中的服务操作 )并 激活

    在 Ambari 中启用 IO 缓存服务。

  4. 确认集群上所有受影响的服务已重启。

注释

虽然进度条显示已激活,但IO缓存实际上只有在你重启其他受影响的服务后才会被启用。

故障排除

启用 IO 缓存后,运行 Spark 作业时可能会出现磁盘空间错误。 这些错误发生是因为Spark还使用本地磁盘存储来存储洗牌操作中的数据。 一旦启用 IO 缓存,Spark 存储空间减少,SSD 空间可能会耗尽。 IO 缓存使用的空间默认为 SSD 总空间的一半。 IO 缓存的磁盘空间使用在 Ambari 中是可配置的。 如果出现磁盘空间错误,减少用于IO缓存的SSD空间并重启服务。 要更改 IO 缓存的空间设置,请执行以下步骤:

  1. 在Apache Ambari中,选择左侧的 HDFS 服务。

  2. 选择配置高级选项卡。

    编辑 HDFS 高级配置。

  3. 向下滚动并展开 自定义核心站点 区域。

  4. 查找 属性 hadoop.cache.data.fullness.percentage

  5. 更改框中的值。

    编辑 IO 缓存满度百分比。

  6. 选择右上角的保存

  7. 选择重启>重启所有受影响的项

    Apache Ambari 会重启所有受影响的服务。

  8. 选择 确认 重启全部

如果不行,关闭IO缓存。

后续步骤

想了解更多关于 IO 缓存的信息,包括性能基准测试,请参阅以下博客文章:Apache Spark 作业在 HDInsight IO 缓存下提升高达 9 倍速度