为什么我们创建RDD来保存Hbase中的数据?有没有其他方法在Hbase中保存数据?

时间:2016-07-29 12:05:05

标签: hadoop apache-spark hbase

我是Bigdata,Hadoop和Spark的新手。我来自Java背景。

所以我试图理解为什么人们总是创建RDD来保存HBASE中的数据集。任何人都可以详细告诉我。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

在Spark中,一切都归结为RDD。即包括数据帧。 AFAIK,Spark和hbase没有其他选项,如果你使用spark作为分布式框架通过RDD实现其目标

  • 不可变
  • 分区
  • 容错
  • 由粗粒度操作创建
  • Lazily评估
  • 可以坚持

不变性和分区 RDD由分区的记录集合组成。分区是RDD中并行性的基本单元,每个分区是数据的一个逻辑分区,它是不可变的,并通过现有分区上的一些转换创建。可模糊性有助于实现计算的一致性。

如果需要,用户可以根据他们想要连接多个数据集的键来定义自己的分区标准。

粗粒度操作(转换和操作) 粗粒度操作是应用于数据集中所有元素的操作。例如 - 将对RDD分区中的所有元素执行的map,filter或groupBy操作。

转型和行动

只能通过从稳定存储(如HDFS / Hbase)读取数据或通过现有RDD上的转换来创建RDD。 RDD上的所有计算都是转换或动作。 enter image description here

容错

由于RDD是通过一组转换创建的,它会记录这些转换,而不是实际数据。这些转换的图形产生一个RDD称为Lineage Graph。

Scala的

firstRDD=spark.textFile("hdfs://...")
secondRDD=firstRDD.filter(someFunction);
thirdRDD = secondRDD.map(someFunction);
result = thirdRDD.count()

enter image description here

懒惰的评估 Spark首次在动作中使用它时会懒惰地计算RDD,以便它可以进行管道转换。因此,在上面的示例中,只有在调用count()动作时才会评估RDD。

持久性 用户可以指出他们将重用哪些RDD并为他们选择存储策略(例如,内存存储或磁盘等)。

RDD的这些属性使它们可用于快速计算。

请参阅Source : what is RDD and Why we need it