通过多线程写入 HDFS 与使用 hbase / hive 等选项

writing to HDFS via multi threading vs using options like hbase / hive

我需要使用 JAVA API 以高效的方式批量写入 hadoop 系统。 只需检查此处的选项。

与使用 hbase / hive 等选项相比,通过多线程写入 HDFS 是一项昂贵的操作。

在回答问题之前,我觉得你对概念有点困惑。

Hadoop: MapReduce + HDFS (Distributed file System).

Hive 只是 HDFS 之上的一层。它根本不是文件系统。将 HDFS 与 Hive 进行比较没有意义。

HBase 是一个 non-relational 数据库,可以 运行 在 Hadoop 之上,并为您提供随机数据 access/querying 功能。 HDFS 本​​身不支持随机位置的 reads/writes。

引自 Hadoop - 权威指南

HDFS is built around the idea that the most efficient data processing pattern is a write-once, read-many-times pattern. A dataset is typically generated or copied from source, and then various analyses are performed on that dataset over time. Each analysis will involve a large proportion, if not all, of the dataset, so the time to read the whole dataset is more important than the latency in reading the first record.

我认为这篇文章 (Introduction to Hadoop HDFS) 会对你很有帮助。

更进一步并尝试回答您的问题,HBase 将数据存储为 key/value 对,就像在列数据库中一样。您可以将 Hbase 视为 Hadoop 环境的扩展,它允许您快速 read/write data.It 将数据存储在 HDFS 中。

部分功能:

  1. 对大数据集中的少量数据进行低延迟访问。您可以从十亿行中快速访问单行 table.
  2. 使用灵活的数据模型,数据由行键索引。
  3. 快速扫描 table 秒。

4.根据写入和总数据量进行扩展。

Hive 和 HBase 是两种不同的工具。 Hbase是数据库,Hive是查询引擎。 Hbase不同于hive和hadoop。

现在回答您的问题,您可以使用带有 Java API 的 mapreduce 写入 HDfS,并且如果您的程序对于您正在处理的数据非常高效。然后 map reduce 可以比 hive 更快。 主要原因是您在配置单元中编写的任何查询都会转换为 map reduce 程序。所以最后是 mapreduce 程序的效率,matters.Thus 如果你能写一个更好、更高效的程序,那么它会比 hive 查询更快。