24

据我了解,Hadoop 是一个分布式存储系统。但是我真正不明白的是,我们可以用 Hadoop 替换普通的 RDBMS(MySQL、Postgresql、Oracle)吗?或者 Hadoop 只是另一种类型的文件系统,我们可以在其上运行 RDBMS?

另外,Django 可以与 Hadoop 集成吗?通常,Web 框架(ASP.NET、PHP、Java(JSP、JSF 等))如何与 Hadoop 集成?

我对 Hadoop 与 RDBMS 有点混淆,我将不胜感激。(对不起,我多次阅读文档,但可能由于我缺乏英语知识,我发现文档大部分时间有点混乱)

4

4 回答 4

26

什么是 Hadoop?

想象一下下面的挑战:你有很多数据,我的意思是至少有 TB。您想要转换这些数据或提取一些信息并将其处理成一种格式,以便您可以使用它来进行索引、压缩或“消化”。

Hadoop 能够并行化这样的处理作业,并且最好的部分来了,它负责处理文件的冗余存储、在集群上的不同机器上分配任务等事情(是的,你需要一个集群,否则 Hadoop 是无法弥补框架的性能损失)。

如果您首先看一下 Hadoop 生态系统,您会发现 3 个大术语:HDFS(Hadoop 文件系统)、Hadoop 本身(使用 MapReduce)和 HBase(“数据库”有时是列存储,并不完全适合)

HDFS 是 Hadoop 和 HBase 使用的文件系统。它是主机上常规文件系统之上的一个额外层。HDFS 将上传的文件分割成块(通常为 64MB),并在集群中保持它们可用,并负责它们的复制。

当 Hadoop 获得要执行的任务时,它会获取 HDFS 上输入文件的路径、所需的输出路径、一个 Mapper 和一个 Reducer 类。Mapper 和 Reducer 通常是在 JAR 文件中传递的 Java 类。(但使用Hadoop Streaming,您可以使用任何您想要的命令行工具)。调用映射器来处理输入文件的每个条目(通常按行,例如:“如果该行包含错误的 F* 字,则返回 1”),输出被传递到化简器,后者将单个输出合并为所需的其他格式(例如:数字相加)。这是获得“坏词”计数器的简单方法。

很酷的事情:映射的计算是在节点上完成的:你线性地处理块,你只需将半消化(通常更小)的数据通过网络移动到减速器。

如果其中一个节点死亡:另一个节点具有相同的数据。

HBase 利用文件的分布式存储并存储其表,在集群上分成块。与 Hadoop 不同,HBase 提供对数据的随机访问。

如您所见,HBase 和 Hadoop 与 RDMBS 完全不同。HBase也缺乏很多RDBMS的概念。使用触发器、preparedstatements、外键等对数据进行建模并不是 HBase 想做的事情(我对此不是 100% 确定,所以请纠正我 ;-))

Django 可以与 Hadoop 集成吗?

对于 Java,这很简单:Hadoop 是用 Java 编写的,所有的 API 都在那里,可以随时使用。

对于 Python/Django,我(还)不知道,但我确信您可以使用 Hadoop 流/Jython 作为最后的手段。我发现了以下内容:Mappers和 Reducers 中的 Hadoopy和Python

于 2012-10-01T10:52:35.473 回答
8

Hue,Hadoop 的 Web UI 是基于 Django 的

于 2015-03-23T21:41:39.747 回答
4

Django 可以连接大多数 RDMS,因此您可以将它与基于 Hadoop 的解决方案一起使用。

请记住,Hadoop 有很多东西,所以具体来说,您需要低延迟的东西,例如 HBase,不要尝试将它与 Hive 或 Impala 一起使用。

Python 有一个基于节俭的绑定,happybase,它可以让你查询 Hbase。

于 2014-08-06T23:04:35.803 回答
1

Django 与 Hadoop 集成的基本 (!) 示例 [删除链接]

我使用 Oozie REST api 来执行作业,并使用“hadoop cat”来获取作业结果(由于 HDFS 的分布式特性)。更好的方法是使用 Hoop 之类的东西来获取 HDFS 数据。无论如何,这不是一个简单的解决方案。

PS 我已重构此代码并将其放入https://github.com/Obie-Wan/django_hadoop。现在它是一个单独的 django 应用程序。

于 2013-05-07T11:22:03.480 回答