是否可以将HBase数据存储在AWS S3上用于在线应用?如何?

Is it possible to store HBase data on AWS S3 for online application? How?

我是 AWS 的新手。我计划使用 HBase 作为我系统的数据库,并将其安装在 EC2 上并将其实际数据文件安装在 S3 上,因为存储成本较低并且与 EMR 具有良好的集成。我不想将 Amazon EMR 仅用于 HBase,它可以 24/7 全天候使用并避免额外费用。但稍后会用它进行一些分析。知道如何为此类设置配置 HBase 吗?

HBase 可以使用 Hadoop 支持的任何文件系统,包括 S3,但如果不使用 EMR,它会太慢。

要使用 S3 作为数据源,您需要将 Hadoop 文件系统配置为 s3。

hbase-site.xml 可能如下所示:

<configuration>

<property>
    <name>hbase.rootdir</name>
    <value>s3://ebucketrkr.s3.amazonaws.com:80/</value>
  </property>



</configuration>

hadoop-site.xml 可能如下所示:

<configuration>
<property>
  <name>fs.default.name</name>
  <value>s3://hbase</value>
</property>

<property>
  <name>fs.s3.awsAccessKeyId</name>
  <value>id</value>
</property>

<property>
  <name>fs.s3.awsSecretAccessKey</name>
  <value>pass</value>
</property>

</configuration>

不,你不能。这不是性能,而是 HBase 如何实现更新的原子提交:它依赖于重命名是 O(1) 原子事务,与 create(path, overwrite=false) 相同。 由 Hadoop s3a 客户端实现的重命名很慢并且不是事务:它们是目录内容的一个接一个副本。至于 create-no-overwrite,它是先检查后写入;容易出现竞争状况。哦,还有最终的一致性,尤其是在列表中。

除了 S3 本身提供管理这些操作所需的锁定和租赁的特殊情况外,您不得尝试将 S3 用作 HBase 的后备存储。 Azure 具有这些功能; EMR 可能,它仍然是 Hadoop S3A 的一项正在进行的工作,即使在那里,目标也不是 HBase 在 S3 之上,它是 Hive 和 Spark 工作的更快提交。

我是作为当前维护 Hadoop 的 S3a 客户端的人写这篇文章的:我是根据代码库的知识以及 HBase 工作所需的知识来发言的。

更新:2018 年 11 月 Amazon EMR 支持使用 S3 作为目的地

你有一些信息here:

现在可以使用 S3 作为 HBase 的存储。

When you run HBase on Amazon EMR version 5.2.0 or later, you can enable Amazon S3 storage mode, which offers the following advantages:

The HBase root directory is stored in Amazon S3, including store files (HFiles) and table metadata. This data is persistent outside of the cluster, available across Amazon EC2 Availability Zones, and you don't need to recover using snapshots or other methods. With store files in Amazon S3, you can size your Amazon EMR cluster for your compute requirements instead of data requirements, with 3x replication in HDFS.

Finra 也这样做了,描述为 here