【问题标题】:is it possible to convert from hbase to spark rdd efficiency?是否可以从 hbase 转换为 spark rdd 效率?
【发布时间】:2018-04-05 21:57:56
【问题描述】:

我在 hbase 中有一个大型项目数据集,我想将其加载到 spark rdd 中进行处理。我的理解是 hbase 针对 hadoop 上的低延迟单项搜索进行了优化,所以我想知道是否可以有效地查询 hbase 中的 1 亿个项目(约 10Tb 大小)?

【问题讨论】:

  • 谢谢,这看起来是一个很棒的资源。
  • 你能提供更多细节吗?您的集群是什么样的,您在谈论哪种查询(按行键查找或您是否有其他条件),是否需要连接,...?一些基本技巧:使用大型扫描并使用 Spark(如果需要)进行过滤,而不是使用 HBase 过滤器,利用分区和托管。
  • 这是一个简单的键连接。如果一个 hbase 表可以作为 rdd 访问,那么我会这样做:val data = hbaseTable.keyBy(itemId).join(myRdd).map(_._2._1).

标签: hadoop apache-spark hbase rdd


【解决方案1】:

我们在 Splice Machine 遇到了这个确切的问题。根据我们的测试,我们发现了以下内容。

  1. 如果您尝试从 spark/mapreduce 执行远程扫描,HBase 会遇到性能挑战。

  2. 大型扫描会通过强制进行垃圾回收而损害正在进行的小型扫描的性能。

  3. OLTP 和 OLAP 查询和资源之间没有明确的资源管理分界线。

我们最终编写了一个自定义读取器,它直接从 HDFS 读取 HFile,并在扫描期间使用 memstore 执行增量增量。有了这个,Spark 可以为大多数 OLAP 应用程序运行得足够快。我们还分离了资源管理,因此 OLAP 资源通过 YARN(本地)或 Mesos(云)分配,因此它们不会干扰正常的 OLTP 应用程序。

祝你工作顺利。 Splice Machine 是开源的,欢迎您查看我们的代码和方法。

【讨论】:

    【解决方案2】:

    这里有一些关于使 Spark 和 HBase 协同工作的一般建议。

    数据托管和分区

    Spark 避免洗牌:如果您的 Spark 工作人员和 HBase 区域位于同一台机器上,Spark 将根据区域创建分区。 HBase 中良好的区域拆分将映射到 Spark 中的良好分区。 如果可能,请考虑处理行键和区域拆分。

    Spark 中的操作与 HBase 中的操作

    经验法则:仅使用 HBase 扫描,其他一切使用 Spark。

    为避免 Spark 操作中的混洗,您可以考虑在分区上工作。例如:您可以加入 2 个来自 HBase 扫描的 Spark rdd 的 Rowkey 或 Rowkey 前缀,而无需任何改组。

    Hbase 配置周数

    这个讨论有点老了(一些配置不是最新的)但仍然很有趣:http://community.cloudera.com/t5/Storage-Random-Access-HDFS/How-to-optimise-Full-Table-Scan-FTS-in-HBase/td-p/97

    下面的链接也有一些线索: http://blog.asquareb.com/blog/2015/01/01/configuration-parameters-that-can-influence-hbase-performance/

    您可能会发现多个来源(包括上述来源)建议更改扫描仪缓存配置,但这仅适用于 HBase

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多