将数据从 hdfs 导入到 hbase 是不是会创建一个副本

Posted

技术标签:

【中文标题】将数据从 hdfs 导入到 hbase 是不是会创建一个副本【英文标题】:does importing data from hdfs to hbase create a copy将数据从 hdfs 导入到 hbase 是否会创建一个副本 【发布时间】:2015-02-01 19:32:42 【问题描述】:

我对 Hbase 概念非常陌生。我知道 HBase 的底层文件系统只有 HDFS。

我只是想了解,如果在单个集群中我已经在 HDFS 中有一些数据。我尝试将其导入 HBase(使用 Pig/Hive 脚本),它是否会以 Hbase 支持(HFiles)的形式在 HDFS(因为 HBase 的底层文件系统是 HDFS)中创建相同数据的另一个副本?

或者它会创建对相同 HDFS 数据的引用?

【问题讨论】:

【参考方案1】:

是的,它会将导入数据的副本存储在 HDFS 中(作为 StoreFiles/HFiles),因为 HBase 只能使用自己的文件集进行操作。也许你会觉得这个nice overview 很有趣。

您可以直接对存储在 HDFS 中的数据进行操作,而无需使用 EXTERNAL HIVE table 将其导入 HBase:

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '<hdfs_location>';

在 Hadoop 世界中,拥有相同数据的多个副本(尽管格式不同)应该不是问题,因为存储不被视为限制因素,它价格便宜且易于扩展,因为它基于商用硬件。事实上,如果您有足够的输入数据,很常见的是,您的 Hive/Pig/MapReduce 作业仅用于处理您的作业就需要数百甚至数千 GB(中间数据)。

【讨论】:

以上是关于将数据从 hdfs 导入到 hbase 是不是会创建一个副本的主要内容,如果未能解决你的问题,请参考以下文章

使用BulkLoad从HDFS批量导入数据到HBase

如何通过 hdfs 导入/导出 hbase 数据(hadoop 命令)

Sqoop_具体总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入导出

导入 HDFS 数据至 HBase

我用sqoop从oracle导入数据到hdfs时,总是报 表或视图不存在错误,求解答...

将 HBase 数据导出到 RDBMS