Hadoop-详细介绍
更新时间 2021-08-30 18:57:14    浏览 0   

TIP

本文主要是介绍 Hadoop-详细的初步知识体系 。

# Hadoop-详细介绍

# 1.1 大数据概念介绍

# 1.1.1 什么是大数据

大数据(Big Data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低四大特征。大数据包括结构化、半结构化和非结构化数据,非结构化数据越来越成为数据的主要部分。

具体来说,比如电商网站的用户浏览行为记录、购买行为记录,社交网站的用户行为数据记录、用户关系数据,通信行业的用户通信行为记录、上网行为记录,APP应用的用户行为数据,交通部门的海量探测数据、路况监控数据,政府部门的民生数据,舆情数据等,由于用户基数大,因而形成的数据动辄日增数百T甚至P级别数据,这些都是真实、物化、具体的大数据。

# 1.1.2 什么是大数据技术

处理数据需要技术,而在处理规模不同的数据集时,就算处理需求一致,由于存储难度不同,计算难度不同,所使用的技术也妥妥不同。在进行大规模数据处理时,基本上都需要解决两个核心问题。

  1. 数据存储

由于大数据动辄好几百T,甚至上P级别,如果用一个单机文件系统或者一个单机数据库,都无法胜任。因此,在大数据技术体系中,一般都是采用分布式存储:将数据(文件)分散到一个集群上的N多台机器上存储。

  1. 数据运算

首先理解一下什么叫运算。比如,某大型电商网站有大量的用户浏览行为记录,需要从这些记录日志中分析出以下信息:

    1. 最热门的Top N个商品;
    1. 用户浏览网站的平均深度;
    2. 用户浏览商品时的路径;

这些数据分析需求,最终都需要转化成运算程序来实现。而在海量数据的场景下,单机资源(无论是CPU,还是内存)配置到极限,也无法在合理的限定时间内运算出结果,所以,在大数据技术体系下,数据运算主要通过运算资源(计算节点)的水平扩展来实现,即使用分布式集群运算系统。

# 1.2 快速入门Hadoop

# 1.2.1 Hadoop简介

Hadoop是一套开源的用于大规模数据集的分布式存储和处理的工具平台。它最早由Yahoo的技术团队根据Google所发布的公开论文思想用JAVA语言开发,现在则隶属于apache基金会。

Hadoop以分布式文件系统HDFS(Hadoop distributed file system)和Map Reduce分布式计算框架为核心,为用户提供了底层细节透明的分布式基础设施。

HDFS的高容错性、高伸缩性等优点,允许用户将Hadoop部署在廉价的硬件上,构建分布式文件存储系统。

Map Reduce分布式计算框架则允许用户在不了解分布式系统底层细节的情况下开发并行、分布式的应用程序,充分利用大规模的计算资源,解决传统高性能单机无法解决的大数据处理问题。

总之,Hadoop是目前分析海量数据的首选工具,并已经被各行各业广泛应用于以下场景:

  • 大数据量存储:分布式存储(各种云盘,百度,360~还有云平台均有Hadoop应用)
  • 日志处理: Hadoop擅长这个
  • 海量计算: 并行计算
  • ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
  • 使用HBase做数据分析:用扩展性应对大量读写操作—Facebook构建了基于HBase的实时数据分析系统
  • 机器学习:比如Apache Mahout项目(Apache Mahout简介 常见领域:协作筛选、集群、归类)
  • 搜索引擎:Hadoop + lucene实现
  • 数据挖掘:目前比较流行的广告推荐
  • 用户行为特征建模
  • 个性化广告推荐

# 1.2.2 Hadoop技术生态

自2008年成为Apache基金会的顶级项目后,经过长时间的发展,围绕着Hadoop又出现了大量的开源扩展技术框架,从而形成了一个庞大的Hadoop技术生态体系。

下面我们来看一下它的技术生态图:

wxmp

图1.1 Hadoop技术生态图

# 1.3、Hadoop技术生态圈的核心框架组件简介:

# 1.3.1 HDFS/Map Reduce

这两个组件是Hadoop本身的两个核心组件,HDFS提供分布式文件系统,Map Reduce则提供分布式运算程序编程框架;

# 1.3.2 Hive

由于直接基于Map Reduce开发数据处理、分析的分布式运算程序技术门槛高,开发效率低,而Hive则提供了一个SQL脚本到Map Reduce运算程序之间的转换桥梁,用户可以基于Hive编写类SQL脚本即可快速实现各类数据统计分析开发需求。

# 1.3.3 HBASE

由于HDFS是只能追加数据的文件系统,它不允许数据的修改。所以,Apache HBase由此而诞生。

HBase运行在HDFS之上,是一个分布式的,随机访问的,面向列的数据库系统,它允许应用程序开发人员直接读写HDFS数据。只是,HBase并不支持SQL语句。所以,它也是NOSQL数据库的一种。然而,它提供了基于命令行的界面以及丰富的API函数来操作数据。

# 1.4、Hadoop技术生态圈的外围框架组件简介如下:

# 1.4.1 ZooKeeper

Zookeeper是Hadoop生态圈中一个非常基础的服务框架,是各分布式框架公用的一个分布式协调服务系统。它通过为各类分布式框架提供状态数据的记录和监听,来让各类分布式系统的开发变得更加便捷。

# 1.4.2 Mahout

Mahout是一个开源的机器学习库,它能使Hadoop用户高效地进行诸如数据分析,数据挖掘以及集群等一些列操作。

Mahout对于大数据集特别高效,它提供的算法经过性能优化能够在HDFS文件系统上高效地运行MapReduce框架。

# 1.4.3 Ambari

Ambari提供一套基于网页的界面来管理和监控Hadoop集群。让Hadoop集群的部署和运维变得更加简单。它提供了一些列特性,诸如:安装向导,系统警告,集群管理,任务性能等。

# 1.4.4 Avro

如何用过其它编程语言来有效地组织Hadoop的大数据,Avro便是为了这个目的而生。Avro提供了各个节点上的数据的压缩以及存储。

基于Avro的数据存储能够轻松地被很多脚本语言诸如Python,或者非脚本语言如Java来读取。

另外,Avro还可被用来MapReduce框架中数据的序列化。

# 1.4.5 Sqoop

Sqoop被用来在各类传统的关系型数据库(比如MYSQL、ORACLE等数据库)和Hadoop生态体系中的各类分布式存储系统(比如HDFS、Hive、HBASE等)之间进行数据迁移。从而可以让开发人员快速地加载业务系统数据库中的数据到Hadoop中综合其他日志数据进行分析,并能方便地将分析结果导出到关系型数据库中以便查询分析和数据可视化。

# 1.4.6 Flume

Flume常被用来进行日志的采集、汇聚,它能从各类数据源中读取数据后汇聚到诸如HDFS、HBASE、Hive等各种类型的大型存储系统中。并且,在使用Flume时,用户几乎不用进行任何编程,只需要将数据源和汇聚存储系统的属性配置在Flume的配置文件中,即可快速搭建起一个大型分布式数据采集系统。

# 典型大数据处理系统架构图

Hadoop技术生态中的组件众多,上文中所介绍的组件可以说也只是沧海一粟,不过大量的组件是在一些小众的特定场景中使用,而大部分时候,下图中的组件搭建的数据处理系统即可胜任绝大多数处理需求。

wxmp

典型大数据处理系统架构图

# 1.5 Hadoop核心组件介绍:分布式文件系统HDFS

为了存储海量的数据,以及对海量数据进行分布式并行处理,自然会想到将单机文件系统扩展到多台机器上,HDFS就是Hadoop技术体系中用来将文件存储在多台服务器上的分布式文件系统。

HDFS的总体设计思想:分而治之——将大文件、大批量文件,分布式存放在大量独立的服务器上,以便于采取分而治之的方式对海量数据进行运算分析。

上述描述可参见下图:

wxmp

Hdfs组件架构图

# 1.6 分布式运算框架Map Reduce

# 一、 分布式并行计算的思想

MAPRECUE是一个用于开发分布式并行数据处理程序的编程框架,要理解Map Reduce,需要先理解分布式并行运算思想。

大数据时代的数据分析任务比传统的数据分析任务要复杂,涉及的数据量更大,比如要分析汇总某个大型零售商在全国的销售数据,查看某个搜索引擎的特定词条的访问日志,对大量互联网浏览用户进行属性分析和用户画像等。

通常来讲,我们的计算机可以同时干很多事儿,比如听音乐,编辑Word文档,下载电影,这些都可以同时进行,为什么呢?因为这些程序任务所处理的数据量规模小。而对于大规模的数据处理任务来说,就不是一台计算机同时做许多任务了,而是许多计算机同时做一件任务的逻辑关系。假如你写了一个程序,然后让你的计算机来处理一个比较大的数据量(例如把百度百科上所有的词条分析一遍……),那么你的计算机需要很长很长的时间来做这件事…大多数情况下,数据还没跑完,你的计算机就被累死了(死机……)。那么怎么办?就有人考虑到了用许多台计算机来同时完成这个任务,这就引入了并行计算的概念。

许多计算机同时做一件复杂的任务,涉及很多问题。比如,这个任务首先要分解成许多子任务,然后这些小的子任务要在这些电脑上面去分配,然后这些电脑完成了任务之后反馈的结果还要汇总,同时还要考虑如果这些电脑的故障异常等问题怎么去解决……MapReduce就是这样的一个编程模型,一个复杂的任务按照这个抽象的模型去实现,就可以有效进行并行计算。

# 二、 MAP REDUCE的设计思想

这个编程模型究竟是怎样的呢?它实际上说了这样一个事儿:已知手头上有许许多多(几万也许,甚至几十万…)PC计算机,每一个可能都是普通配置,但是如果这些PC机团结协作起来,可以PK一个大型的工作站。现在有个复杂的任务,需要处理海量的数据。数据在哪里?数据实际上是随机分布式地存储于这些PC服务器上的。我们不需要统一地把数据一起存到一个超大的硬盘上,数据可以直接散布在这些PC服务器上,这些PC服务器自身不仅是许许多多个处理器,也是许许多多个小硬盘。

提示

请读者联想,此处的分布式存储,是否就是本书前文所述的HDFS?

HDFS对外有着统一的访问接口和独立的目录结构,而存储于其中的文件则正是随机分布式地存储于HDFS系统内众多的DataNode中。

这些PC服务器分为三类,第一类称为MRAppMaster(只有一个运行实例),MRAppMaster是负责调度的,相当于工地的工头。第二类叫Worker(根据数据规模可以由大量运行实例),相当于干活儿的工人。Woker进一步分为两种,一种Worker叫MAP TASK,另一种叫REDUCE TASK。假设我们有一个巨大的数据集,里面有海量规模的元素,元素的个数为M,每个元素都需要调用同一个函数进行逻辑处理。于是:

    1. MRAppMaster将M分成许多小份(数据切片,MAP REDUCE中称为:FileSplit),然后每一个数据切片指派给一个MAP TASK来处理;
    1. MAP TASK处理完后,将自己所负责的数据切片的处理结果传给REDUCE TASK;
    1. REDUCE TASK统计汇总各个MAP TASK传过来的结果,得到最后的任务的结果。
    1. 当然,这是最简单的表述,因为实际上MRAppMaster的任务分配过程是很复杂的,会考虑任务时间?任务是否出错?网络通讯负担等等许多问题,这里不作详述。

举例来说,统计一系列文档中的词频。文档数量规模很大,有1000万个文档,英文单词的总数可能只有3000(常用的)。于是:

    1. 使用10000台PC服务器运行Map Task,100台PC服务器运行Reduce Task。
    1. 每个Map Task做1000个文档的词频统计,完成之后将中间结果分发给100个Reduce Task做汇总

提示

此处的数据分发其实是整个mapreduce流程中的一个核心关键点,这个过程称为数据的shuffle,shuffle的机制既要考虑将数据尽可能均匀分发给reduce task,又要保证将需要进行聚合统计的数据发给同一个reduce task。在mapreduce中,数据的传递基本单位是一个Key-Value对,而默认的shuffle逻辑是将数据的key的hashCode对reduce task的数量进行模除取余,根据余数来将数据分发给相应编号的reduce task。

比如,map task处理后得到一个中间结果数据:key为单词hello,value为词频980,reduce task的数量为5,而"hello".hashCode()%5 = 3,则可知,hello单词相关的数据都将发给编号为3的reduce task机器。

  1. 100个Reduce Task 计算机把各自收到的数据做最终的汇总处理分析,得到最终统计结果

其实MapReduce讲的就是分而治之的程序处理理念,把一个复杂的任务划分为若干个简单的任务分别来做。另外,就是程序的调度问题,哪些任务给哪些Map Task来处理是一个着重考虑的问题。MapReduce的根本原则是信息处理的本地化,哪台PC持有相应要处理的数据,哪台PC就负责处理该部分的数据,这样做的意义在于可以减少网络通讯负担。

wxmp

MapReduce分布式数据处理示意图

# 1.7 分布式资源调度平台Yarn

分布式并行数据处理程序开发好后,需要运行在一个大规模的集群当中,而通常,一个大规模集群在同一时间可能需要为很多个数据处理任务所共享,此时,就会面临如何分配运算资源给每一个数据处理任务的问题。

Yarn就是一个为分布式运算程序提供统一调度和运算资源分配的资源调度平台,它能将集群的资源统一管理起来,根据集群的资源状态,分配用来计算的机器,或者等待其他计算任务计算完毕再分配任务。

简单来说,利用Map Reduce开发的分布式数据处理程序,需要运行在Yarn平台之上。

wxmp

Yarn集群资源调度机制示意图

如图中所示:

Yarn中包含Resource Manager和Node Manager两类角色,Resource Manager负责统筹规划,而Node Manager则负责提供运算资源。

MapReduce程序则包含MRAppMaster和众多的Map task及Reduce Task。它们都运行在Node Manager所提供的运算资源容器Container中。只是,MapReduce程序一旦运行起来之后,Yarn中的各类软件成员是不会干预MapReduce程序的运行逻辑的。

# 参考文章

  • https://zhuanlan.zhihu.com/p/61613198
更新时间: 2021-08-30 18:57:14
  0
手机看
公众号
讨论
左栏
全屏
上一篇
下一篇
扫一扫 手机阅读
可分享给好友和朋友圈