2013-10-01 193 views
1

我是Hadoop的新手,想知道Hadoop在场景中的工作原理。Hadoop与关系数据库

在创建Dynamic Web项目的过程中,我通过发送来自Java/C#的查询来存储和获取来自MySQL数据库的数据。

我在项目中使用Hadoop服务,hadoop提供任何构建数据库系统,我们可以存储数据并在需要时检索数据,而不是使用外部数据库。

在此先感谢。

+0

您在项目中使用哪种hadoop服务? –

回答

4

Hadoop不提供任何内置数据库。这仅仅是两件事情:

  • 分布式FS(HDFS
  • 分布式处理框架
的MapReduce我称之为 MR短。)

我假设你需要非常快速的反应,因为你正在处理一个Web服务。恕我直言,Hadoop(HDFS准确)或任何其他财务报表,在这种情况下不会是合适的选择。原因是HDFS缺乏随机/读取功能,这对于任何Web项目都非常重要。

对于Hive也是如此。虽然它以类似于RDBMS的方式管理数据,但它实际上不是RDBMS。底层存储机制仍然是HDFS文件。此外,当您发出Hive查询来提取结果时,查询首先会将转换为MR作业,然后生成结果导致响应速度缓慢。

你最安全的选择是去HBase。当你的数据需要随机,实时读/写访问时,这绝对是一个更好的选择,就像你的情况一样。虽然它不是Hadoop平台的一部分,但是它已经建立在与Hadoop一起使用的基础上。在您现有的HDFS集群之上运行,可以直接通过不同的HBase API(适合您的情况)或通过MR(不适用于实时内容,适用于需要批量处理大量数据的情况)。易于安装和使用,无需额外的基础设施。

这里需要注意的一点是,HBase是NoSQL DB,不遵循RDBMS约定和术语。所以,你最初可能需要在你的设计上做一些工作。

除了HBase,你还有其他一些选择,如Cassandra,这也是一个NoSQL DB。

HTH

0

Hadoop作业使用InputFormat创建InputSplit s。尽管大多数示例使用文件输入并使用HDFS片段作为输入拆分,但该概念是抽象的,可以映射到其他输入。一个典型的例子是现有的DataDrivenDBInputSplit,它表示表格中的一组行。这种输入格式/输入拆分是Sqoop用于读取数据库输入的内容。

它的要点是,绝对有可能使用数据库作为您的工作输入,您必须意识到您将实现的目标是释放一群计算节点,以满足关系数据库的要求,行。它很可能是您的后端可能无法处理负载,或者最多只能缓慢处理。 Hadoop的强大功能来自处理与简化的本地存储访问的集成,您明确要求放弃。

首先,我会建议您阅读有关Sqoop的更多信息,以及它可以做什么,它很可能已经可以做到您想要的。

1

Hadoop Core不包含任何数据库。

Hadoop Wiki

数据库是美妙的。针对 索引/调整的数据库发出SQL SELECT调用,响应以毫秒为单位返回。 想要更改该数据吗? SQL UPDATE和更改是在。Hadoop不 不这样做。

Hadoop 存储文件中的数据,并且没有索引他们。如果你想 找到一些东西,你必须运行一个MapReduce作业,通过所有的 数据。这需要时间,并且意味着您不能直接使用Hadoop 作为数据库的替代品。在Hadoop工作的地方,数据对于数据库来说太大(即您已达到技术限制 ,而不仅仅是您不想为数据库许可证支付),数据 的位置太大。对于大数据集,重建索引的成本非常高,您不能轻松索引更改的数据。由于许多机器试图写入数据库,因此无法锁定它。在这里,分布式文件系统中与模糊相关的 文件的想法可以工作。

有一个高性能的列表数据库在 Hadoop HDFS:Apache HBase之上运行。这是保持从原始数据中提取结果 的好地方。

你也可以使用Apache Hive,它给你像关系数据库(尽管有缺点)的感觉,如MySQL。在幕后,它使用Mapreduce来帮助您利用Hadoop处理大数据。 请注意,Hive不适用于OLTP工作负载,不提供实时查询或行级更新

+0

谢谢这对我有帮助。 – Awinash