【发布时间】:2020-12-18 05:45:51
【问题描述】:
在 Hive 表上,我可以创建将数据保存在特定 HDFS 位置的外部表。我想在 HBase 上做类似的事情,以便 HBase 表数据可以保存在外部 HDFS 位置。是否可以在类似于 Hive 的 HBase 上执行此操作?我想知道 HBase 表数据保存在 HDFS 上的默认路径是什么?
谢谢
【问题讨论】:
在 Hive 表上,我可以创建将数据保存在特定 HDFS 位置的外部表。我想在 HBase 上做类似的事情,以便 HBase 表数据可以保存在外部 HDFS 位置。是否可以在类似于 Hive 的 HBase 上执行此操作?我想知道 HBase 表数据保存在 HDFS 上的默认路径是什么?
谢谢
【问题讨论】:
简短的回答是否定的,HBase 没有提供与 Hive 相同的外部表功能。
HBase 的设计与 Hive 不同,并且使用不同的方法和软件来读取和写入数据。 Hive 传统上使用 MapReduce 或 Tez 与 HDFS 中的数据进行交互,例如您的外部表,而 HBase 使用其在集群上运行的 RegionServer 进程的集合。按照设计,RegionServer 共享 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 中创建外部表。在将数据持久化到磁盘时,此 HDFS 路径由所有 RegionServer 共享。它不是您(用户)在读写数据时直接与之交互的目录。
【讨论】: