当前位置: 首页 > news >正文

【赵渝强老师】大数据技术的理论基础

在这里插入图片描述

  大数据平台所要解决的问题是数据的存储和数据的计算,其核心思想采用的是分布式集群的思想。另一方面,分布式集群的思想在Google的技术系统中得到了很好的应用。因此Google将其核心技术的思想以论文的形式公开发表出来,这就是"Google的三驾马车",即:Google的文件系统、MapReduce分布式计算模型和BigTable大表。这三篇论文奠定了大数据生态圈体系中的技术核心,从而有了基于Java的实现框架------Hadoop生态圈体系。进一步发展起来了后续的Spark生态圈体系和Flink生态圈体系。

  因此,在学习大数据生态圈体系的具体内容之前,有必要对Google的这三篇论文有一个比较清楚的了解,这对于后续进一步掌握大数据平台的生态圈体系非常重要。本小节将为详细介绍这三篇论文的核心思想及其实现原理。

  视频讲解如下:

大数据技术的理论基础

【赵渝强老师】大数据技术的理论基础

一、Google的文件系统

  Google文件系统GFS,即:Google File System是一个典型的分布式文件系统,也是一个分布式存储的具体实现方式。在日常的工作和生活中所使用的的网盘也是一个典型的分布式文件系统。下图展示了GFS的基本架构。
在这里插入图片描述

  将数据存入一个分布式文件系统中,需要解决两方面的问题:如何存储海量的数据和如何保证数据的安全。如果有了解决的方案,就能够实现一个分布式文件系统来存储大数据,并且保证数据的安全。而解决的方案便是采用分布式集群的方式,即采用多个节点组成一个分布式环境来解决这两个问题,下面分别进行讨论实现的细节,从而引出Hadoop中的分布式文件系统HDFS(Hadoop Distributed File System)的基本架构和实现原理。

二、MapReduce分布式计算模型

  大数据的存储可以采用分布式文件系统来存储,那么如何解决大数据的计算问题呢?跟大数据存储的思想一样,由于数据量庞大,无法采用单机环境来完成计算任务。既然单机环境无法完成任务,那么就可以采用多台服务器一起执行任务,从而组成一个分布式计算的集群完成大数据的计算任务。基于这样的思想,Google提出了MapReduce分布式计算模型的方式处理大数据。

提示:MapReduce是一种计算模型,它跟具体的编程语言没有关系。

  Hadoop体系中实现了MapReduce的计算模型。由于Hadoop是采用Java实现的框架,因此开发的MapReduce程序也将是一个Java程序。众所周知,MongoDB也支持MapReduce的计算模式,而MongoDB中的编程语言是JavaScript,所以在MongoDB中开发MapReduce程序需要书写JavaScript代码。

  MapReduce的核心思想其实就只有6个字,即:先拆分、再合并。通过这样的方式,不管得到的向量矩阵有多大都可以进行计算。拆分的过程叫做Map;而合并的过程叫做Reduce。如下图所示:

在这里插入图片描述

  上图中的示例假设有一个庞大的矩阵要进行计算。由于无法在一台计算机上完成,因此将矩阵进行拆分,首先将其拆分为4个小矩阵,只要拆分到足够小让一台计算机能够完成计算即可。每台计算机计算其中的一个小矩阵得到部分的结果。这个过程就叫做Map,如图中的实线方框的部分。将Map输出的结果在进行聚合操作的二次计算,从而得到大矩阵的结果,这个过程叫做Reduce,如图中的虚线方框的部分。

  下图展示了在Hadoop中执行MapReduce任务的输出日志信息。

在这里插入图片描述

提示:通过输出的日志可以看出任务被拆分成了两个阶段,即:Map阶段和Reduce阶段。当Map执行完成后,接着执行Reduce。

三、BigTable大表

  BigTable大表的思想是Google的"第三驾马车"。正因为有了这样的思想就有了Hadoop生态圈体系中的NoSQL数据库HBase。

提示:NoSQL数据库泛指所有的非关系型数据库。NoSQL数据库有很多种,比如:Hadoop体系中的HBase;基于内存的Redis和基于文档的MongoDB。而NoSQL数据库从某种程度上说也是属于大数据体系中的组成部分。

  那么什么是BigTable大表呢?简单来说就是把所有的数据存入一张表中,这样做的目的就是为了提高查询的性能。但是这也将违背关系型数据库范式的要求。在关系型数据库中需要遵循范式的要求来减少数据的冗余。减少数据冗余的好处是节约了存储的空间,但是会影响性能。例如:在关系型数据库中执行多表查询会产生笛卡尔积。因此,关系型数据库的出发点是通过牺牲性能,达到节约存储空间的目的。这样设计是有实际意义的,因为在早些年的时候,存储的介质是比较昂贵的,需要考虑成本的问题。而大表的思想正好与其相反,它是把所有的数据存入一张表中。大表的思想是通过牺牲存储空间来达到提高查询性能的目的。

  HBase就是BigTable大表思想的一个具体实现,并且它是一个列式存储的NoSQL数据库适合执行数据的分析和处理。简单来说就是适合执行查询操作。下图展示了HBase的表结构。
在这里插入图片描述

  HBase的表由列族组成,图中的"emp"和"dept"都是列族,列族中包含列。创建表的时候必须创建列族,不需要创建列。当执行插入语句插入数据到列族中的时候,需要指定rowkey和具体的列。如果列不存在,HBase会自动创建相应的列,再把数据插入到对应的单元格上。

提示:rowkey相当于关系型数据库的主键。但是与主键不同的是,rowkey与关系型数据库类似不允许为空,但是可以重复的。如果rowkey重复了,表示相同的rowkey是同一条记录。

  例如,如果要得到上图所示的表结构和数据,可以在HBase中执行下面的语句。

#创建employee表,包含两个列族:emp和dept
create 'employee','emp','dept'
#插入数据
put 'employee','7839','emp:ename','KING'
put 'employee','7839','emp:job','PRESIDENT'
put 'employee','7839','emp:hiredate','17-11月-81'
put 'employee','7839','emp:sal','5000'
put 'employee','7839','dept:deptno','10'
put 'employee','7839','dept:dname','ACCOUNTING'
put 'employee','7839','dept:loc','NEW YORK'

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一夜之间删库跑路?Runway到底在做什么?
  • 数据结构---顺序表---单链表
  • C# SM2 SM3 SM4 使用
  • 创意微型学生机床工具——金属车床
  • 58、Python之函数高级:不定参数的函数,写出更加通用的装饰器
  • 超声波的应用
  • AOP和注解的配合使用(封装通用日志处理类)
  • 2 html5 浏览器已经支持的新API
  • 腾讯云技术深度解析:AI代码助手与微服务架构的实践应用
  • 服务器数据恢复—如何应对双循环RAID5阵列的数据丢失问题?
  • 【初出江湖】分布式之什么是分布式存储?
  • P-Tuning v2:一种普遍有效的提示调整方法
  • 三分钟搭建线上RAG应用,实现定制化的知识库问答
  • 解锁企业微信营销新纪元:智驭未来,让每一次触达都精准高效!
  • Tensorflow实现深度学习8:猫狗识别
  • [译] React v16.8: 含有Hooks的版本
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • HashMap ConcurrentHashMap
  • Laravel 中的一个后期静态绑定
  • MySQL QA
  • MySQL-事务管理(基础)
  • SQLServer之索引简介
  • tab.js分享及浏览器兼容性问题汇总
  • Twitter赢在开放,三年创造奇迹
  • Vue UI框架库开发介绍
  • 安装python包到指定虚拟环境
  • 读懂package.json -- 依赖管理
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 官方解决所有 npm 全局安装权限问题
  • 基于Android乐音识别(2)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • puppet连载22:define用法
  • 如何用纯 CSS 创作一个货车 loader
  • ​插件化DPI在商用WIFI中的价值
  • ​香农与信息论三大定律
  • #14vue3生成表单并跳转到外部地址的方式
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (7)svelte 教程: Props(属性)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (算法)区间调度问题
  • (一)Thymeleaf用法——Thymeleaf简介
  • .Net 6.0--通用帮助类--FileHelper
  • .net6+aspose.words导出word并转pdf
  • .NET6实现破解Modbus poll点表配置文件
  • .NET单元测试
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter