(一)HDFS总体架构

1、背景

海量的非结构化数据,几乎没法梳理成一个个的字段,来存储在关系型数据库中。所以实际应用中,对于这类数据需要考虑数据如何存储。数据如何计算的问题。

2、hadoop两个核心

  • HDFS(以分布式方式来存储海量数据)
  • MapReduce(以HDFS上的数据为基础进行计算)

3、大数据特点

  • Volume(大量)
  • Velocity(持续高速增长)
  • Variety(多样性)
  • value(价值密度低,数据很多但真正有价值的数据少)
  • Veracity(真实性)

4、Hadoop版本

hadoop有第一代和第二代,第二代与第一代最显著的特点是:第二代比第一代多了一个资源调度框架(yarn)。

hadoop第二代上可以跑多种计算框架,例如spark,MapReduce等。

目前3.0版本已经发布。

5、HDFS架构

如图:

  • 分布式存储数据:一个文件拆分成了四块,分别保存在机架1中的四台服务器中(datanode
  • 引入namenode:若要获取文件,需要知道该文件拆成哪些块,分别保存在哪等。namenode就是专门管理文件块信息。
  • 避免namenode单点故障:有一个SecondaryNameNode服务作为namenode的备用。
  • 引入副本冗余机制:此处采用三副本机制(磁盘利用率1/3),以黄色块为例,在机架1的第四台服务器上保本一个副本,在机架2的第一台服务器上保存了一个副本,以防机架1全部宕机。

namenode作用:

  • namenode数据在内存中,供客户端快速查询。为防数据丢失,也会在磁盘保存镜像文件。
  • 管理整个分布式文件系统的元数据信息,一个文件多大,有几块,每个块多大,分别存储在那些节点等。
  • 管理整个集群的状态,比如所有datanode时间间隔会向namenode发起一个心跳包,namenode时间间隔内没有收到心跳包,则判定为该datanode宕机。

1.0版本namenode单点故障解决方案:

  • SecondaryNameNode是1.0版本的方案
  • 针对hdfs的操作,会有对应的操作记录。每时间间隔,SecondaryNameNode会把操作记录和当前镜像文件合并,生成最新的镜像文件。同时把数据同步给自己
  • SecondaryNameNode不是实时热备,可能会造成元数据的丢失。

2.0版本namenode单点故障解决方案

  • 考虑到1.0版本的弊端,2.0版本提供实时热备,解决方案如下图
  • 但是使用伪分布模式搭建hadoop,还是会使用SecondaryNameNode机制处理

### 大数据技术总体架构设计与实现 #### 架构概述 大数据平台的构建涉及多个层次的设计,从底层的数据存储到顶层的应用服务。个典型的大数据架构可以分为以下几个主要部分: 1. **数据采集层** 数据采集是整个流程的第步,负责收集来自不同源的数据。这些数据可能来自于日志文件、数据库记录或是通过API接口获取的信息。为了确保高效性和可靠性,在这阶段通常会采用分布式消息队列系统来缓冲传入的数据流[^2]。 2. **数据存储层** 存储层决定了如何保存所捕获的数据。考虑到成本效益及性能因素,可以选择HDFS (Hadoop Distributed File System) 或者其他NoSQL数据库作为持久化解决方案。对于结构化程度较高的关系型数据,则可考虑使用传统的关系型数据库管理系统(RDBMS)[^3]。 3. **计算框架层** 计算框架提供了强大的批处理能力和实时数据分析能力。MapReduce 是最早被广泛接受的种编程模型,它允许编写简单而有效的算法来进行大规模行运算;除此之外还有Spark这样的内存计算引擎,能显著提高迭代式工作负载的速度和效率[^4]。 4. **资源管理层** 随着集群规模的增长,有效管理硬件资源变得至关重要。YARN(Yet Another Resource Negotiator),Kubernetes等工具可以帮助管理员动态分配CPU/GPU时间片给不同的作业任务,监控其执行状态以优化整体利用率。 5. **应用服务层** 应用层面主要是指那些直接面向用户的前端界面或者后台逻辑模块。它们依赖于上述各层所提供的基础设施和服务支持完成特定业务目标——比如推荐系统的个性化商品展示、金融风控中的信用评分预测等等。 ```java // Java代码片段展示了简单的MapReduce WordCount例子 public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` #### 技术选型考量 当决定具体采用哪些技术和组件时,需综合评估当前项目的实际需求以及未来扩展的可能性。例如,如果侧重于低延迟查询响应,则应优先考察具备快速读取特性的NoSQL方案;而对于复杂事件处理场景而言,Storm或Flink可能是更好的选择因为二者都擅长流式数据加工转换操作[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值