什么是 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。