Hadoop大数据原理(1) - 架构演进

1. 软件的发展

  传统的软件开发已经经历了非常久的时间,从C/S到B/S架构的演进是过去20年以来感受比较强的一个变化。逐渐开始“轻”客户端,“重”服务端,使得软件服务的升级和维护变得越来越便利,当然这样的便利性也带来了一些问题,那就是当客户端访问数据量大的时候,服务端可能无法承受而崩溃,导致服务无法使用,数据库异常等问题。

  当然,随着互联网的发展,B/S架构能够面向未知的用户群体,实现用户量的疯狂扩张,用户只需要操作系统和浏览器就能够进行服务访问。

  近10年还有一个明显的改变就是,大家开始从PC向手机端迁移,根据摩尔定律,手机能够进行越来越强大的计算,现在几乎人手1部手机,我们进入了移动互联网时代。

  社会发展越来越科技化,视频监控等信息采集这些基础设施越来越完善,运营商/软件企业能够获取到越来越多的数据(不讨论脱敏与否,也不讨论大数据分析和画像能够对脱敏数据的某些数据进行恢复和精确搜索到具体的人或事物),数据开始呈指数增长。

  数据越来越多,对我们分析数据的要求也越来越高了,以前我们传统的软件,都是主要考虑进行纵向提高服务器的配置,商业级的服务器不够用,就升级小型机,小型机不够用,就升级中型机,还不够,升级大型机,升级超级计算机。虽然根据摩尔定律,硬件的处理能力每18个月翻一倍,总能造出更强大的计算机。但是这些年,软件的增长速度目前比硬件更快,大多数软件工程师接到需求后,并没有那么多合适的硬件来支撑自己的服务要求,所以这种思路并不适合互联网的技术要求。Google、Facebook、阿里巴巴这些网站每天需要处理数十亿次的用户请求、产生上百 PB 的数据,不可能有一台计算机能够支撑起这么大的计算需求。

  互联网公司开始换一种思路来解决问题,从过去的纵向提高计算机处理能力,变为横向扩展计算机,目前的互联网巨头们,都经历了这样的成长过程。

2. 大数据技术的出现

  两台计算机要想合作构成一个系统,必须重新进行架构设计。就是现在互联网企业广泛使用的:负载均衡、分布式缓存、分布式数据库、分布式服务等各种分布式系统。

  当这些分布式技术满足互联网的日常业务需求时,对离线数据和存量数据的处理就被提了出来,当时这些分布式技术并不能满足要求,于是大数据技术就出现了。

  大数据技术更为关注数据,所以相关的架构设计也围绕数据展开,如何存储、计算、传输大规模的数据是要考虑的核心要素。

3. 移动计算

  在大数据行业,有一句耳熟能详的话,移动计算比移动数据更划算

  下面介绍移动计算程序到数据所在位置进行计算是如何实现的:

  1. 将待处理的大规模数据存储在服务器集群的所有服务器上,主要使用 HDFS 分布式文件存储系统,将文件分成很多块(Block),以块为单位存储在集群的服务器上;

  2. 大数据引擎根据集群里不同服务器的计算能力,在每台服务器上启动若干分布式任务执行进程,这些进程会等待给它们分配执行任务;

  3. 使用大数据计算框架支持的编程模型进行编程,例如 Hadoop 的 MapReduce 编程模型,或者 Spark 的 RDD 编程模型;

  4. 应用程序编写好以后,进行打包,MapReduce 和 Spark 都是在 JVM 环境中运行,所以打包出来的是一个 Java 的 JAR 包;

  5. 用 Hadoop 或者 Spark 的启动命令执行这个应用程序的 JAR 包,首先执行引擎会解析程序要处理的数据输入路径,根据输入数据量的大小,将数据分成若干片(Split),每一个数据片都分配给一个任务执行进程去处理;

  6. 任务执行进程收到分配的任务后,检查自己是否有任务对应的程序包,如果没有就去下载程序包,下载以后通过反射的方式加载程序。到这里,最重要的一步,也就是移动计算就完成了。

  7. 加载程序后,任务执行进程根据分配的数据片的文件地址和数据在文件内的偏移量读取数据,并把数据输入给应用程序相应的方法去执行,从而实现在分布式服务器集群中移动计算程序,对大规模数据进行并行处理的计算目标。

4. 编程框架Hadoop

  大数据技术将移动计算这一编程技巧上升到编程模型的高度,并开发了相应的编程框架,使开发人员只需关注大数据的算法实现,不必关注如何将这个算法在分布式的环境中执行,极大地简化了大数据的开发难度,统一了大数据的开发方式,使大数据的开发门槛直线下降,这也让更多的大数据工程师将精力集中到业务和分析中去,全力去挖掘数据的价值。

  Hadoop是一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。它由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

  Hadoop实现了一个分布式文件系统,其中一个组件是HDFS(Hadoop Distributed File System)。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问文件系统中的数据。

  Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。

  Hadoop 依赖于社区服务,生态很好,任何人都可以使用。

  Hadoop主要有以下几个优点:

  1. 高可靠性:按位存储和处理数据能力的高可靠性;

  2. 高扩展性:在可用的计算机集群间分配数据并完成计算任务的,这些集群可方便灵活的方式扩展到数以千计的节点;

  3. 高效性:能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快;

  4. 高容错性:自动保存数据的多个副本,并且能够自动将失败的任务重新分配;

  5. 低成本:集群允许通过部署普通廉价的机器组成集群来处理大数据,以至于成本很低。看重的是集群整体能力;

  Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上是非常理想的。Hadoop上的应用程序也可以使用C++语言编写。

猜你喜欢

转载自blog.csdn.net/initiallht/article/details/124720256