将 HBase table 数据保存在特定的 HDFS 位置

Saving HBase table data in a particular HDFS location

在 Hive table 上,我可以创建外部 table 将数据保存在特定的 HDFS 位置。我想在 HBase 上做类似的事情,所以 HBase table 数据可以保存在外部 HDFS 位置。是否可以在类似于 Hive 的 HBase 上执行此操作?我想知道 HBase table 数据保存到 HDFS 的默认路径是什么?

谢谢

简短的回答是否定的,HBase 没有为您提供与 Hive 相同的外部 table 能力。

HBase 的设计与Hive 不同,使用不同的方法和软件来读写数据。 Hive 传统上使用 MapReduce 或 Tez 与 HDFS 中的数据交互,例如您的外部 tables,而 HBase 在集群上使用其 RegionServer 进程集合 运行。按照设计,RegionServers 在 HDFS 中共享一个目录树,它们在其中对文件进行操作。

hbase-site.xml配置文件中有一个名为hbase.rootdir的属性设置了所有HBase数据文件在HDFS中的根路径。 属性 看起来像这样:

<property>
  <name>hbase.rootdir</name>
  <value>hdfs://hostname:8020/hbase</value>
</property> 

(无需手动创建此目录,HBase 会自动创建。如果未设置此参数,则默认情况下所有数据将进入 hbase.tmp.dir 的子目录,通常为 /tmp 。)

但是,此配置设置 而非 类似于在 Hive 中创建外部 table。在将数据持久化到磁盘时,此 HDFS 路径由所有 RegionServer 共享。它不是您(用户)在读写数据时直接与之交互的目录。