据我了解,Hadoop 是一个分布式存储系统。但是我真正不明白的是,我们可以用 Hadoop 替换普通的 RDBMS(MySQL、Postgresql、Oracle)吗?或者 Hadoop 只是另一种类型的文件系统,我们可以在其上运行 RDBMS?
还有,Django可以和Hadoop集成吗?通常,Web 框架(ASP.NET、PHP、Java(JSP、JSF 等))如何与 Hadoop 集成?
我对 Hadoop 与 RDBMS 之间的关系有点困惑,如果有任何解释,我将不胜感激。 (抱歉,我看了很多遍文档,但可能是因为我的英语知识不足,我发现文档大部分时间都有些困惑)
最佳答案
什么是 Hadoop?
想象一下以下挑战:您有大量数据,我的意思是至少有 TB 级的数据。您想要转换此数据或提取一些信息并将其处理成一种格式,以某种方式进行索引、压缩或“消化”,以便您可以使用它。
Hadoop 能够并行处理这样的处理工作,而且最好的部分来了,它负责文件的冗余存储、在集群上的不同机器上分配任务等事情(是的,你需要一个集群,否则 Hadoop 无法补偿框架的性能损失)。
如果您首先了解 Hadoop 生态系统,您会发现 3 个大术语:HDFS(Hadoop 文件系统)、Hadoop 本身(使用 MapReduce)和 HBase(“数据库”有时是列存储,并不完全适合)
HDFS 是 Hadoop 和 HBase 使用的文件系统。它是主机上常规文件系统之上的额外层。 HDFS 将上传的文件分成 block (通常为 64MB),并使它们在集群中可用并负责复制。
当 Hadoop 获得要执行的任务时,它会获得输入文件在 HDFS 上的路径、所需的输出路径、映射器和 reducer 类。 Mapper 和 Reducer 通常是在 JAR 文件中传递的 Java 类。(但是使用 Hadoop Streaming 您可以使用任何您想要的命令行工具)。映射器被调用来处理输入文件的每个条目(通常按行,例如:“如果该行包含错误的 F* 字,则返回 1”),输出被传递给缩减器,缩减器将单个输出合并为所需的其他格式(例如:添加数字)。这是获得“坏词”计数器的简单方法。
很酷的事情:映射的计算是在节点上完成的:你线性地处理 block ,你只通过网络将半消化的(通常较小的)数据移动到缩减器。
如果其中一个节点死亡:还有另一个具有相同数据的节点。
HBase 利用文件的分布式存储并存储其表,在集群上分成 block 。与 Hadoop 不同,HBase 提供对数据的随机访问。
如您所见,HBase 和 Hadoop 与 RDMBS 有很大不同。 HBase 也缺少很多 RDBMS 的概念。使用触发器、准备语句、外键等对数据建模并不是 HBase 被认为要做的事情(我对此不是 100% 确定,所以请纠正我 ;-))
Django 可以与 Hadoop 集成吗?
对于 Java,这很简单:Hadoop 是用 Java 编写的,所有 API 都已准备就绪,可以使用。
对于 Python/Django,我还不知道(还),但我相信在万不得已的情况下,您可以使用 Hadoop 流式处理/Jython 做一些事情。 我发现了以下内容:Hadoopy和 Python in Mappers and Reducers .
关于django - Hadoop和Django,有可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12667868/