Hadoop和Django,有可能吗?
Posted
技术标签:
【中文标题】Hadoop和Django,有可能吗?【英文标题】:Hadoop and Django, is it possible? 【发布时间】:2012-09-21 23:35:35 【问题描述】:据我了解,Hadoop 是一种分布式存储系统。但是我真正不明白的是,我们可以用 Hadoop 替换普通的 RDBMS(mysql、Postgresql、Oracle)吗?或者 Hadoop 只是另一种类型的文件系统,我们可以在其上运行 RDBMS?
另外,Django 可以与 Hadoop 集成吗?通常,Web 框架(ASP.NET、php、Java(JSP、JSF 等))如何与 Hadoop 集成?
我对 Hadoop 与 RDBMS 有点混淆,如果有任何解释,我将不胜感激。 (对不起,我看了很多遍文档,但可能是因为我的英文知识不够,我发现文档大部分时间有点混乱)
【问题讨论】:
我没用过Hadoop。我刚看了头版。我认为这只是一个文件系统解决方案。它不会取代 RDBMS,并且可能无法很好地与 RDBMS 一起使用。我认为将数据库放在分布在多台机器上的逻辑驱动器上会导致严重的性能问题;如果您要尝试,则需要进行更多研究。 Hadoop 适用于普通的大文件并且没有索引。如果你想随机访问你需要 HBase 的数据。它们都建立在 HDFS 之上,HDFS 管理集群中的大文件。稍后我会给出更好的解释:-) @romedius,我等不及了 :)。到目前为止,我读过的所有读物都让我更加困惑。 【参考方案1】:什么是 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 作为最后的手段。 我发现了以下内容:Hadoopy 和 Python in Mappers and Reducers。
【讨论】:
P.s.:我稍后会添加一些链接:-) 很棒的解释。那么,出于好奇,HBase 是否更可能与 RDMS 相同? (我的意思是学习曲线、熟悉度等) HBase 可以被认为是一个数据库(它的 NoSQL!耶!),Hadoop 本身更像是分布式文件系统之上的巨大数据处理引擎。有些人滥用 Hbase 和 Hbase 进行数据仓库用例。如果这是正确的方法是另一个讨论的一部分。 +1 获取详细说明。使用 HBase 和使用 MongoDB 一样简单吗? 从未使用过 MongoDB,所以我不知道 ;-)【参考方案2】:Hue,Hadoop 的 Web UI 是 based on Django!
【讨论】:
【参考方案3】:Django 可以连接大多数 RDMS,因此您可以将它与基于 Hadoop 的解决方案一起使用。
请记住,Hadoop 有很多东西,所以具体来说,您需要低延迟的东西,例如 HBase,不要尝试将它与 Hive 或 Impala 一起使用。
Python 有一个基于节俭的绑定,happybase,它可以让你查询 Hbase。
【讨论】:
【参考方案4】:Django 与 Hadoop 集成的基本 (!) 示例 [删除链接]
我使用 Oozie REST api 来执行作业,并使用“hadoop cat”来获取作业结果(由于 HDFS 的分布式特性)。更好的方法是使用 Hoop 之类的东西来获取 HDFS 数据。无论如何,这不是一个简单的解决方案。
附:我重构了这段代码并将其放入https://github.com/Obie-Wan/django_hadoop。 现在它是一个单独的 django 应用程序。
【讨论】:
你如何使用它?你能添加一些文档吗? 更新了自述文件。随意在 github 上添加您的问题。祝你好运。以上是关于Hadoop和Django,有可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
apache spark可以在没有hadoop的情况下运行吗?
Hadoop hadoop.tmp.dir 配置的目录下数据可以删除吗?