什么是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采取一些措施。我找到了以下内容:Hadoopy和Python中的Mappers和Reducers。