前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据技术栈的一些基本概念

大数据技术栈的一些基本概念

作者头像
coderidea
发布2023-09-07 09:17:54
2390
发布2023-09-07 09:17:54
举报
文章被收录于专栏:coderidea

今天带大家了解一下我们正在使用的大数据技术栈的一些基本概念。不用担心,这不会花费太多时间,但理解核心思想是必要的。

大数据技术栈,它是用于处理大规模数据的一组技术和工具的组合。这个技术栈包括各种用于存储、处理、分析和可视化大数据的组件和平台。如果您有关于大数据技术栈的具体问题或需要进一步的解释,请留言。

HDFS基础知识

HDFS(Hadoop分布式文件系统)是一种设计用于运行在许多物理服务器上的分布式文件系统。因此,在HDFS中,文件是一种抽象,它隐藏了在多个节点之间存储和复制数据的复杂性。为什么我们需要HDFS?有一些原因如下:

  1. 1.硬件故障:

硬盘驱动器会发生故障。这是我们不得不应对的现实。如果一个文件分布在多个节点之间,个别故障不会影响整个数据。此外,在HDFS中数据是复制的。因此,即使发生硬盘故障,信息仍然可以从其他来源恢复。

  1. 2.非常大的文件:

HDFS允许将不太强大的机器构建成一个庞大的系统。例如,如果您有100个每个拥有1TB磁盘存储的节点,那么您就拥有100TB的HDFS空间。如果复制因子等于3,那么可以存储一个大小为33TB的单个文件。

更不用说许多本地文件系统不支持如此大的文件,即使您有足够的磁盘空间也不行。

  1. 3.读取速度:

如果您按顺序读取文件,需要时间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的典型工作流程:

  1. 1.加载数据:首先,使用sc.textFile("hdfs://raw_data.txt")从HDFS中加载名为raw_data.txt的文本文件的内容。这将创建一个JavaRDD<String>对象,表示文件中的文本数据。
  2. 2.数据处理:接下来,我们对加载的文本数据执行一系列操作:
    • flatMap操作将每一行文本拆分成单词,并将这些单词扁平化,以便进一步处理。
    • mapToPair操作将每个单词映射为一个键-值对,其中键是单词本身,值为1,表示每个单词出现一次。
    • reduceByKey操作按键对值进行归约,将相同单词的值相加以计算每个单词的总数。这是一个典型的单词计数操作。
  3. 3.保存结果:最后,使用counts.saveAsTextFile("hdfs://words_count.txt")将计算结果保存到HDFS中的words_count.txt文件中。

这个示例展示了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有相似之处,但也有一些关键差异,特别是在分布式环境中运行时。以下是一些关键点:

  1. 分布式执行:Apache Spark将计算分发到多个工作节点,每个节点上都会执行代码片段(如Lambda表达式)。这允许并行处理大规模数据集,因为每个节点都可以在本地执行计算。
  2. 数据分区:Apache Spark将数据分成多个分区,每个分区在不同的节点上处理。这种分区策略可以确保数据局部性,最大程度地减少了数据传输开销。
  3. 惰性求值:与Java Stream API类似,Apache Spark采用了惰性求值的策略。这意味着在遇到终端操作之前,诸如reduceByKey之类的操作不会立即执行。相反,它们构建了计算流水线,直到终端操作触发时才执行实际计算。这有助于优化计算,只执行必要的部分,提高了性能和效率。
  4. 并行性:Apache Spark的并行性非常高,如果具有足够数量的工作节点,可以处理大规模数据,甚至达到TB或ZB级别。

至于Apache Spark将代码传输到数据的方法,确实有一些潜在的挑战,包括数据传输和维护复杂性。

在开发和配置Spark应用程序时,需要考虑这些因素,并选择适当的策略来处理数据和计算。这些都是在实际开发和部署中需要仔细考虑的问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coderidea 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档