今天带大家了解一下我们正在使用的大数据技术栈的一些基本概念。不用担心,这不会花费太多时间,但理解核心思想是必要的。
大数据技术栈,它是用于处理大规模数据的一组技术和工具的组合。这个技术栈包括各种用于存储、处理、分析和可视化大数据的组件和平台。如果您有关于大数据技术栈的具体问题或需要进一步的解释,请留言。
HDFS基础知识
HDFS(Hadoop分布式文件系统)是一种设计用于运行在许多物理服务器上的分布式文件系统。因此,在HDFS中,文件是一种抽象,它隐藏了在多个节点之间存储和复制数据的复杂性。为什么我们需要HDFS?有一些原因如下:
硬盘驱动器会发生故障。这是我们不得不应对的现实。如果一个文件分布在多个节点之间,个别故障不会影响整个数据。此外,在HDFS中数据是复制的。因此,即使发生硬盘故障,信息仍然可以从其他来源恢复。
HDFS允许将不太强大的机器构建成一个庞大的系统。例如,如果您有100个每个拥有1TB磁盘存储的节点,那么您就拥有100TB的HDFS空间。如果复制因子等于3,那么可以存储一个大小为33TB的单个文件。
更不用说许多本地文件系统不支持如此大的文件,即使您有足够的磁盘空间也不行。
如果您按顺序读取文件,需要时间N。但是,如果文件分为10个块分布在10个节点之间,您可以在N/10的时间内获取其内容!因为每个节点都可以并行读取块。因此,HDFS不仅关乎安全性,还关乎速度。
文章中没有提到网络通信所花费的时间。但即使文件很大,这部分时间只是一个很小的部分。
Apache Hive基础知识
Apache Hive是运行在HDFS上的数据库工具,它允许使用HQL(类似SQL的语言)来查询数据。
常规数据库(例如PostgreSQL、Oracle)充当本地文件系统的抽象层。而Apache Hive充当了对HDFS的抽象层。就是这样。
Apache Spark基础知识
Apache Spark是一个用于操作和转换大量数据的平台。其关键思想是,Apache Spark的工作节点在多个节点上运行,并将中间结果存储在内存中。它是用Scala编写的,同时也支持Java和Python。请看下面的图表,这是Apache Spark批处理作业的常见表示形式。
Apache Spark加载数据来自数据生产者,对数据进行一些操作,然后将结果传送给数据消费者(在我们的情况下,Apache Hive是数据生产者,Aerospike是数据消费者)。Apache Spark应用程序是一个常规的.jar文件,其中包含了转换逻辑。看一下下面的示例:
这个示例描述了Apache Spark的典型工作流程:
这个示例展示了Apache Spark的分布式数据处理能力,它可以高效地处理大规模数据集。Apache Spark应用程序通常是包含数据处理逻辑的常规.jar文件,这些逻辑将数据从数据生产者(例如Apache Hive)加载、转换,并将结果传递给数据消费者(例如Aerospike)。
这种能力使Apache Spark成为处理大规模数据和执行复杂数据操作的强大工具,尤其适用于数据分析、机器学习等领域。
这个流程类似于Java Stream API,但不同之处在于每个Lambda表达式都在工作节点上执行。因此,Spark将代码传输到远程机器,执行计算,并返回结果。如果有足够多的工作节点,可以处理以TB甚至ZB为单位的大量数据。
Apache Spark采用将代码传递到数据的方式,这种方法有一些缺点,当我们深入开发时可以进行讨论。
另一个重要的方面是“惰性求值”(laziness)。就像Java Stream API一样,Apache Spark在调用终端操作之前不会启动任何计算。在这种情况下,reduceByKey是终端操作。其他操作构建了流水线规则,但不触发任何计算。这种惰性求值使Spark能够优化计算,仅执行必要的部分,以提高性能和效率。
Apache Spark的工作流程和惰性求值确实与Java Stream API有相似之处,但也有一些关键差异,特别是在分布式环境中运行时。以下是一些关键点:
至于Apache Spark将代码传输到数据的方法,确实有一些潜在的挑战,包括数据传输和维护复杂性。
在开发和配置Spark应用程序时,需要考虑这些因素,并选择适当的策略来处理数据和计算。这些都是在实际开发和部署中需要仔细考虑的问题。