Lambda Architecture of Big Data
Lambda架构是一种用于处理大数据的数据处理架构,它结合了传统的批处理管道和快速的实时流管道,以便进行数据访问。Lambda架构包含传统的批处理数据管道和用于实时数据的快速流管道,以及用于响应查询的serving层。Lambda架构的主要组件包括:
数据源:数据可以来自各种来源,通常是流式源,如Apache Kafka。数据同时传送到批处理层和速度层,以便进行并行索引。
批处理层:这一层将所有进入系统的数据保存为批量视图,以便进行索引。输入数据被保存为类似于系统记录更改/更新的模型,通常是逗号分隔值(CSV)格式的文件。数据被视为不可变和仅追加,以确保所有传入数据的可信历史记录。
服务层:这一层逐步索引最新的批量视图,以便用户可以查询。这一层还可以重新索引所有数据以修复编码错误或为不同的用例创建不同的索引。服务层的关键要求是以极其并行化的方式进行处理,以最小化索引数据集的时间。
速度层:这一层通过实时处理数据流来索引尚未完全索引的最新数据。这包括服务层当前正在索引的数据,以及当前索引作业开始后到达的新数据。由于预计最新数据添加到系统和最新数据可供查询之间存在一定的延迟(由于批处理索引工作所需的时间),速度层负责索引最新数据,以缩小这一间隙。
查询:这一组件负责向服务层和速度层提交最终用户查询,并整合结果。这使最终用户可以对所有数据进行完整查询,包括最近添加的数据,从而提供一个几乎实时的分析系统。
Lambda架构的优势包括:
降低延迟:通过批处理层和服务层对原始数据进行索引,速度层通过流处理技术立即对最新数据进行索引,从而缩小了不可分析数据的时间窗口,降低了延迟。
数据一致性:Lambda架构消除了分布式系统中常见的数据不一致风险。由于数据是按顺序处理的,索引过程可以确保批处理和速度层中的数据反映了最新状态。
可扩展性:Lambda架构不指定要使用的确切技术,而是基于可扩展的分布式技术,可以通过简单地添加更多节点来扩展。
容错性:Lambda架构基于支持容错的分布式系统,因此如果发生硬件故障,其他节点可以继续工作。
人为容错性:由于原始数据用于索引,因此它充当了可分析数据的记录系统,所有索引都可以从该数据集重新创建。这意味着如果索引代码中存在任何错误或遗漏,可以更新代码,然后重新运行以重新索引所有数据。
Lambda架构有时被批评为过于复杂。每个管道都需要自己的代码库,并且必须保持同步,以确保在查询涉及两个管道时产生一致准确的结果。
参考:
Architecture of Hadoop
Hadoop是一个用于存储和分析大规模数据的软件框架。它由Google创建,旨在处理大型数据集,现在被各种公司广泛使用于数据存储、处理和分析。Hadoop特别适用于数据科学家,提供了一种安全高效的方式来管理大规模数据集。许多大型公司如FAANG公司、Twitter、Yahoo、LinkedIn等都在其组织中使用Hadoop来处理大数据。例如,Facebook使用Hadoop来管理和分析大量用户数据,从而改善用户体验、个性化内容推荐,并根据全面的数据分析优化广告定位。
Hadoop架构包括四个主要组件:HDFS(Hadoop分布式文件系统)、MapReduce、YARN(Yet Another Resource Negotiator)和Hadoop Common。让我们逐一探讨这些组件。
HDFS(Hadoop分布式文件系统) HDFS是Hadoop的基石,是一个分布式文件系统,旨在实现可扩展性、容错性和高可用性。其架构涉及主节点和从节点,具体是NameNode和DataNode。HDFS的结构围绕主节点和从节点展开,主要是NameNode和DataNode。
NameNode和DataNode:NameNode作为Hadoop集群中的主节点,监督DataNode(从节点)。其主要作用是管理元数据,如跟踪用户活动的事务日志。NameNode指导DataNode执行创建、删除和复制等操作。DataNode作为从节点,负责在Hadoop集群中存储数据。建议使用存储容量较大的DataNode来容纳大量文件块。
MapReduce MapReduce是Hadoop架构的重要组件,旨在以分布式和并行的方式处理和分析大规模数据。与传统的串行处理不同,MapReduce将任务分为两个主要阶段:Map和Reduce。
YARN(Yet Another Resource Negotiator) YARN是Hadoop框架中的重要组件,负责资源管理和作业调度。它将这些功能分离,使用全局资源管理器和应用程序管理器来管理各个应用程序。NodeManager监视容器资源使用情况,为ResourceManager提供数据,以便有效分配CPU、内存、磁盘和连接性。
Hadoop Common Hadoop Common是Hadoop生态系统中至关重要但经常被忽视的组件。它作为提供各种Hadoop模块正常运行所需的实用程序和共享库的基础层。Hadoop Common包括关键库和实用程序,如用于执行MapReduce任务和管理分布式文件系统的Java存档(JAR)文件。
总的来说,Hadoop架构提供了一个强大的平台,用于存储和处理大规模数据。它是处理来自各种来源(包括数据库、Web服务器和文件系统)的数据的关键解决方案。 Hadoop架构的四个主要组件各自发挥着管理和处理大规模数据集的关键作用。
参考:
HDFS High Availability Architecture
HDFS高可用性架构是Hadoop分布式文件系统(HDFS)的一个重要特性,用于解决Hadoop集群中的单点故障问题。在Hadoop 2.x中引入了高可用性功能,允许在同一集群中运行两个冗余的NameNode,以实现主/备份配置和热备份。这意味着如果活动的NameNode出现故障,备用的NameNode将接管责任并继续为客户端请求提供服务。
HDFS高可用性架构的实现涉及以下关键方面:
架构:
在典型的高可用性集群中,两个或更多独立的机器被配置为NameNode。任何时候,只有一个NameNode处于活动状态,其他的处于备用状态。
活动的NameNode负责集群中的所有客户端操作,而备用的NameNode只是作为一个从节点,维护足够的状态以提供快速故障转移(如果需要)。
为了保持备用节点与活动节点的状态同步,当前的实现要求这些节点可以访问共享存储设备上的目录(例如来自NAS的NFS挂载)。
数据一致性:
保持活动节点和备用节点的元数据一致性非常重要。这样可以在故障转移后将Hadoop集群恢复到崩溃前的相同命名空间状态。
为了实现快速故障转移,备用节点必须具有关于集群中块位置的最新信息。为了实现这一点,DataNode被配置为知道所有NameNode的位置,并向所有NameNode发送块位置信息和心跳。
切分脑问题:
为了确保在HA集群中只有一个NameNode处于活动状态,管理员必须为共享存储配置至少一种隔离方法。这是为了防止所谓的“切分脑”情况,即集群被分成多个较小的集群,每个集群都认为自己是唯一的活动集群。
自动故障转移:
Apache Zookeeper是一个提供HDFS高可用性集群自动故障转移能力的服务。它维护与NameNode的会话。在发生故障时,会话将过期,并且Zookeeper将通知其他NameNode启动故障转移过程。
总的来说,HDFS高可用性架构通过引入主/备份配置和热备份的方式,解决了Hadoop 1.x中单点故障的问题。这使得Hadoop集群能够在不同的故障情况下保持可用性,确保数据对用户始终可访问。
参考:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/
https://hadoopabcd.wordpress.com/2015/02/19/hdfs-cluster-high-availability/