Apache 项目和大数据世界

The Apache Projects and Big Data World

我是一名经验丰富的 LAMP 开发人员,在 php、nginx、haproxy、redis、mongodb 和 aws 服务方面拥有丰富的经验。每当 table 出现大数据需求时,我都会使用 AWS Web 服务,并且最近开始阅读有关大数据的内容,希望自己使用该技术,而不是使用托管服务进行大数据处理、流处理等。

然而,这与学习 LAMP 的旅程不同,并且由于用例的性质,很难为新手找到好的资源。特别适合那些没有接触过 Java 生态系统的人。 (据我了解 Java 软件几乎涵盖了流行的大数据堆栈)。在谈论大数据时,下面的软件列表几乎无处不在,但很难掌握每个软件的概念,每个项目主页上的描述也很模糊。

例如"Cassandra",表面上它是存储时间序列数据的好数据库,但是当阅读更多关于分析的内容时,就会出现其他堆栈,hadoop、pig、zookeeper 等

简而言之,这些软件的作用是什么?在大数据的背景下,其中一些项目具有相同的方面,那么它们为什么共存呢?有什么好处?什么时候用什么?

至于 hadoop,您必须了解,Hadoop 可以表示两件事,具体取决于上下文。有点像 "Linux" 这个词,如果你熟悉的话。

  • 只有核心:真正的"Hadoop"只是一个文件系统,用于分散存储非常大的文件+通过Map/Reduce对这些文件的请求框架。
  • 整个生态系统:这包括核心和所有其他已放在 hadoop 上进行数据分析的工具。 Flume、Hbase、Hive、Kafka、Spark、Zookeeper 都是属于这一类的术语。 Flink 也可能是,我不确定。

Cassandra 可能也属于第二类,因为"Hadoop integration was added way back in version 0.6 of Cassandra".

要更好地了解整个生态系统,您必须understand how this is all structured:

从下到上:

  • 底层:这里有分布式文件系统和 Map/Reduce 请求框架。 HDFS是文件系统的名称,你也会经常看到这个名词。在 HDFS 之上,您可以使用 HBase,这是一个在 HDFS 之上的面向列的数据库。
  • 中间层,执行引擎:在中间我们有几个不同的引擎,可以查询hadoop文件系统的信息。其实有人把Map/Reduce放在第二层,因为现在Hadoop环境也包括了Tez和Spark。我认为,Tez 通过使用图表执行 map/reduce 来加速查询。 Spark 是一个内存引擎。
  • 顶层,用户抽象:在执行引擎之上你有用户API/abstractions。这包括 apache Hive(SQL 类似查询)和 Pig(在我看来是 SQL 和编程语言的混合体)。但也有更专业的抽象,如 MLlib,它是一个在 hadoop 系统之上使用 Spark 作为中间层的机器学习库。

除此之外,我们还有针对整个生态系统的管理工具。管理服务器,管理任务执行顺序(作业调度)等。这里是Kafka和Zookeeper所属的地方。

¹ 我目前不明白 HBase 与 ORC 文件或 Parquet 之间的关系。