Hadoop和Django,是否可行?

27

根据我的理解,Hadoop是一种分布式存储系统。然而我并不是很明白的是,我们是否可以用Hadoop替换普通的关系型数据库(如MySQL、PostgreSQL、Oracle)?还是说Hadoop只是另一种文件系统,我们可以在其上运行关系型数据库?

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

我有些困惑于Hadoop和关系型数据库之间的区别,如果有解释的话,我会非常感激。(对不起,我已经多次阅读了文档,但也许由于我在英语方面的知识有限,我发现大部分时间文档都有些令人困惑)


我并没有使用过Hadoop,只是阅读了其首页。我认为它只是一个文件系统的解决方案,不能代替关系型数据库,并且可能与关系型数据库协同工作效果不佳。我认为将数据库放在跨多个计算机分布的逻辑驱动器上会导致严重的性能问题,如果你要尝试的话需要更多的研究。 - dokkaebi
Hadoop适用于普通大文件,没有索引。如果您需要对数据进行随机访问,则需要使用HBase。它们都建立在HDFS之上,该系统在集群中管理大型文件。稍后我会给出更好的解释 :-) - romedius
@romedius,请您快点吧,我等不及了 :)。目前我阅读的所有资料都让我更加困惑。 - Haikal Nashuha
4个回答

27

什么是Hadoop?

想象一下以下的挑战:你有很多数据,当我说很多时,至少是以TB为单位。您想将这些数据转换或提取一些信息并处理成索引、压缩或以某种方式“消化”的格式,以便您可以使用它。

Hadoop能够并行处理此类处理任务,并且最好的部分在于,它会处理文件的冗余存储、集群中不同机器之间的任务分配等问题(是的,您需要一个集群,否则Hadoop无法弥补框架的性能损失)。

如果您首次查看Hadoop生态系统,则会发现3个大术语:HDFS(Hadoop文件系统)、Hadoop本身(带有MapReduce)和HBase(有时称为列存储的“数据库” ,但不完全匹配)

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

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

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

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

HBase利用文件的分布式存储并将其表分割成块存储在集群上,与Hadoop相比,HBase可以随机访问数据。

正如您所见,HBase和Hadoop与RDMBS非常不同。此外,HBase缺少许多RDBMS概念。使用触发器、preparedstatements、外键等来建模数据不是HBase的设计目的(对此我不是100%确定,如果有错误请指出;-))

Django能够与Hadoop集成吗?

对于Java来说很容易:Hadoop是用Java编写的,所有API都已经准备好供使用。

对于Python/Django我还不知道,但我确信您可以使用Hadoop Streaming/Jython采取一些措施。我找到了以下内容:HadoopyPython中的Mappers和Reducers


很棒的解释。所以,出于好奇,HBase 更像 RDMS 吗?(我指学习曲线,熟悉程度等) - Haikal Nashuha
2
HBase可以被视为数据库(它是NoSQL!耶!),而Hadoop本身更像是一个庞大的数据处理引擎,建立在分布式文件系统之上。有些人滥用HBase和Hadoop来进行数据仓库的使用案例。如果这是正确的方法,那就是另一种讨论的部分。 - romedius
只是好奇,你用什么类型的技术与HBase配对?JSP?JSF? - Haikal Nashuha
@Haikal,我发现MongoDB比HBase更容易使用,但是在扩展方面遇到了问题,因为我不信任/不喜欢它的分片机制和MongoDB的恶劣写锁(全局/集合级别)。MongoDB感觉像带有json文档和基本分片支持的MySQL。 - Gattster
@Gattster 这可能是一个新手问题,但你使用什么服务器端处理框架?Java EE(JSF,JSP)? - Haikal Nashuha
显示剩余3条评论

8

4

请记住,Hadoop有很多用途,因此特别注意选择低延迟的解决方案,例如HBase,不要尝试使用Hive或Impala。

Python具有基于thrift的绑定,happybase,可让您查询Hbase。


1

这是 Django 与 Hadoop 集成的基本示例![链接已删除]

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

P.S. 我已经重构了这段代码,并将其放入 https://github.com/Obie-Wan/django_hadoop 中。 现在它是一个独立的 Django 应用程序。


你如何使用它?你能添加一些文档吗? - lizzie
已更新README文件。欢迎在Github上添加问题问题。祝你好运! - Obie-Wan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接