| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Hadoop总结 -> 正文阅读 |
|
[大数据]Hadoop总结 |
目录 ? 大数据概述大数据的4V:大量化、快速化、多样化、价值密度低。 大数据对思维方式的影响:颠覆了传统的思维方式——全样而非抽样、效率而非精确、相关而非因果 大数据对科学研究的影响:实验、理论、计算、数据 ? 三次信息化浪潮 第一次——1980——个人计算机为标志——解决信息处理——Intel、AMD、IBM 第二次——1995——互联网——信息传输——雅虎、谷歌 第三次——2010——物联网、云计算和大数据——信息爆炸——亚马逊、美团 ? 信息科技为大数据提供的技术
? 数据变革阶段 运营式系统阶段、用户原创内容阶段、感知式系统阶段。 ? 大数据发展三个阶段 萌芽期(第一):20世纪90年代至21世纪初——随着数据挖掘理论和数据库技术的逐步成熟,一批商业智能工具和知识管理技术开始被应用。如数据仓库、专家系统、知识管理系统等。 成熟期(第二):21世纪第一个十年——Web2.0应用迅速发展,非结构化数据大量产生,传统处理方法难以应对,带动了大数据技术的快速突破,大数据解决方案逐渐走向成熟,GFS和MapReduce等大数据技术受到追捧,Hadoop平台开始崭露头角。 大规模应用期(第三):2010年以后——大数据应用渗透各行各业,数据驱动决策,信息社会智能化程度大幅提高。 ? Hadoop大数据开发平台谷歌2004年“三驾马车”处理海量数据问题:GFS分布式文件系统、MapReduce大数据分布式计算框架、NoSQL数据库系统BigTable ? 大数据两个核心技术:分布式存储、分布式处理 分布式存储
分布式处理
? Hadoop:是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的, Hadoop特性:高扩展、高效性、高可靠、高容错、成本低。 Hadoop生态:
? Hadoop三种安装模式 单机模式:一台机器上运行。(真正单机) 伪分布式模式:一台机器上模拟一个小集群,依赖SSH,需要初始化文件系统,本地的input文件夹和HDFS的input文件夹都在同一台机器上,并不需要通过网络传输数据。(单机装多机) 完全分布式模式:存储采用分布式文件系统HDFS,而且HDFS的名称结点和数据结点位于不同机器上。(真正多机) ? 伪分布式安装
伪分布式安装是在一个单机上模拟一个分布式的环境,启动Hadoop时,HDFS和yarn都将启动。其中HDFS包括Namenode、Datanode、SecondaryNamenode。Yarn包括Resourcemanager、Nodemanager。伪分布式具备Hadoop的主要功能。 ? 伪分布式用途:常用于调试程序 ? Hadoop的版本 Hadoop2.0三大主要部分:HDFS、MapReduce、yarn。其中HDFS包括NN Federation和HA;MapReduce运行于Yean之上。 1.0到2.0版本差异: ? ? ? 资源管理YARNyarn——2.0的资源调度框架 MapReduce1.0既是一个计算框架,也是一个资源管理调度框架。到了Hadoop2.0后,其资源调度功能被分离形成Yarn,而被剥离了资源调度功能的MapReduce1.0变为2.0,只拥有计算功能。 总结:Yarn是纯粹的资源调度框架,MR2.0是纯粹的计算框架。 ? yarn的调度策略
? yarn的目标就是实现一个集群多个框架。即在一个集群上部署一个统一的资源调度框架yean,在yean之上可以部署其他各种计算框架。 ? yarn好处
? 分布式文件系统HDFS分布式文件系统 分布式文件系统指通过网络实现文件在多台主机上进行分布式存储的文件系统,一般采用“客户机/服务器”(CS)模式,客户端以特定的通信协议通过网络与服务器建立连接,提出文件访问请求,如GFS和HDFS。 注:分布式文件系统是大集合,HDFS是子集。 ? HDFS目标
? HDFS局限性
? HDFS存储的好处
? HDFS构造 块(HDFS的核心概念):HDFS默认一个块64MB,一个文件被分成多个块,以块作为存储单位。 名称结点(NameNode):负责管理分布式文件系统的命名空间,用两个文件保存了两个核心的数据结构(FSImage和EditLog)。 数据结点(DataNode):负责数据的存储和读取,会根据客户端或者是名称结点的调度来进行数据的存储和检索,并且向名称结点定期发送自己所存储的块的列表 第二名称结点(SecondaryNamenode):用来保存名称结点对HDFS元数据信息的备份,并减少名称结点重启的时间。 注:一个机架上可以放一个名称节点、多个数据节点。
? HDFS如何减轻中心结点的负担? 当客户端需要访问一个文件时,首先把文件名发送给名称结点,名称结点根据文件名找到对应的数据块(一个文件可能包括多个数据块),再根据每个数据块信息找到实际存储各个数据库的数据节点的位置,并把数据节点位置发送给客户端,最后客户端直接访问这些数据节点获取数据,在整个访问过程中,名称节点并不参与数据的传输。名称节点启动成功并进入正常运行状态以后,HDFS的更新操作都会被写入到EditLog,而不是直接写入FSImage。第二名称结点可以完成EditLog与FSImage的合并操作,减小EditLog文件大小,缩短名称结点重启时间。 ? HDFS对于冗余数据的保存 HDFS默认的冗余复制因子是3。其中,有两份副本放在同一个机架的不同机器上面,第三个副本放在不同机架的机器上面,这样既可以保证机架发送异常时的数据恢复,也可以提高数据读写性能。一般而言,如果是在集群内发起写操作请求,则把第一个副本放置在发起写操作请求的数据结点上,实现就近写数据。如果是来自集群外部的写操作请求,则从集群内部挑选一台磁盘不太慢,CPU不太忙的数据结点作为第一个副本的存放地。 ? ? 非关系型数据库NOSQL关系数据库和NoSQL(非关系数据库)的比较 关系数据库
NoSQL数据库
两者各有优缺点,彼此无法替代。 关系数据库应用场景:电信银行等领域的关键业务系统,需要保证强事务一致性。 NOSQL数据库应用场景:互联网企业、传统企业的非关键业务。 ? 采用混合架构
? NoSQL四大类型 文档数据库:以文档为数据库的最小单位,对文档以某种标准化格式封装,每个文档可能具有完全不同的结构,具有基于文档内容的索引和查询能力。如mongoDB。 图数据库:使用图作为数据模型来存储数据,可以高效地存储不同顶点之间的关系,专门用于处理具有高度相互关联关系的数据,可以高效地处理实体之间的关系。如InfiniteGraph。 键值数据库:使用键定位值,值对数据库而言是透明不可见的,不能对值进行索引和查询,只能通过键进行查询。如Redis。 列族数据库:采用列族数据模型,数据库由多个行构成,每行数据包含多个列族,不同的行可以具有不同数量的列族,属于同一列族的数据会被存放在一起。如HBase。
? NoSQL的三大基石 三大基石:CAP、BASE、最终一致性 CAP:CAP指的是Consistency一致性、Availability可用性、Partition Tolerance分区容错率。CA最简单的做法是把所有的事务放在同一台机器上,但这种做法会严重影响系统的可扩展性。CP当出现网络分区的情况时,受影响的服务需要等待数据一致,因此在等待期间就无法对外提供服务。AP允许系统返回不一致的数据。 BASE:并非表示“基础”。而是指Basically Available、Soft state、Eventual consistency。其中Basically Available表示基本可用(一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以使用,允许分区失败的情形出现)。Soft state表示软状态(和一致性相反,状态可以有一段时间不同步,具有一定的滞后性)。Eventual consistency表示最终一致性(后续的访问操作可能暂时读不到更新后的数据,但最终必须能读到)。
? 最终一致性 根据更新数据后各进程访问到数据的时间和方式的不同,可以区分为以下几种:
? ? 分布式数据库HBASEHbase简介 HBase是一个高可靠、高性能(可以支持PB级别的数据)、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化的松散数据。HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表,其运行在HDFS或Alluxio(读音:/a’la’so/)之上。
? Hbase和传统关系数据库的对比分析 HBase的出现原因:虽然已经有了HDFS和MapReduce,但是Hadoop主要解决大规模数据离线批量数据,没法满足大数据实时处理。 关系数据库:多种数据类型,使用传统的关系数据模型,非常多的数据操作,支持多表连接,基于行存储,可以构建多个索引提高查询效率,更新操作会覆盖旧值,很难实现横线扩展和纵向扩展。 HBase:只有字符串类型,有多种操作,但是要避免多表连接(表中数据过多,若多表连接时间复杂度很高),基于列存储,只有行键索引,更新时生成新版本保留旧版本,可以轻易在集群中增加或者减少硬件数量来实现性能的压缩。 ? Hbase数据模型 表:Hbase采用表来组织数据,表由行和列组成,列划分为若干个列族。 行:每个Hbase表由若干行组成,每个行有一个行键。 列族:一个Hbase表被分组成许多列族的集合,它是基本的访问控制单元。 列限定符(列):列族里的数据通过列来定位。 单元格:在Hbase表中,通过行、列族和列限定符确定一个单元格,单元格存储的数据类型被视为字节数组byte[]。 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本用时间戳进行索引。 总结:一言蔽之,行键确定行,列族确定大概方位,列确定具体列的位置,上面三者所确定的具体位置即为单元格,单元格可以多版本,确定版本可以用时间戳。 批处理和MapReduce分布式并行编程 批处理计算:解决针对大规模数据的批量处理需求,MapReduce是最具有代表性和影响力的大数据批处理技术,用于大规模数据集的并行运算。 MR设计理念:计算向数据靠拢而非数据向计算靠拢(要完成一次数据分析时,选择一个计算节点,把运行数据分析的程序放到计算节点上运行,然后把它涉及的数据,全部从各个不同节点上面拉过来,传输到计算发生的地方)。 传统并行计算框架:使用共享内存并行计算模型,容错性差;使用刀片服务器、高速网、SAN、价格贵、扩展性差;编程难度高;适用于实时细粒度计算,属于计算密集型。 MR:使用非共享式并行计算模型,容错性好;普通PC机即可并行,扩展性好;编程简单;适用于非实时批处理计算,属于数据密集型。
? Split MR基本处理单位为Split。Split是为逻辑概念,只记录数据元信息,划分数据为多少个Split由用户自己决定。
? Map和Reduce MapReduce的任务被抽象为两个函数:Map和Reduce。其中Map的功能是将一个键值对输出分为一堆的键值对输出。至于要分为多少由用户决定,这是一个分片split的过程。而Reduce是一个汇总的过程,Map将一个任务分成多个子任务进行处理后,Reduce将结果进行简单求和。 如:输入<行号,”a,b,c”>则map后输出<”a”,1><”b”,1><”c”,1>。 如:输入<”a”,<1,1,1>>则Reduce后输出<”a”,3> ? ? 任务的数量 Map任务的数量 Hadoop为每个split创建一个Map任务,split的多少决定了Map任务的数目。大多数情况下,理想的分片大小是一个HDFS块。 Reduce的数量
注:MapReduce过程中用户无法参与,也无法从一台机器中发送消息给另一台。
? Shuffle过程 Shuffle就是指将Map后的数据进行分区、排序、合并、归并的过程,中文叫做洗牌。 从图中可以看出,Shuffle分为Map端的Shuffle和Reduce端的Shuffle。 ? MapShuffle MapShuffle的过程是这样的:首先将数据转换为key-value的形式后切分为多个Map任务,一个map任务需要分配一定的缓存,一般默认100MB。一旦缓存过多,则启动溢写功能, 将缓存中的数据通过分区、排序、合并后,需要通过归并形成一个大的文件放在本地磁盘。 注:溢写功能并非缓存达到100MB后才启动,否则后续源源不断的数据无处可放。故一般设置溢写比例为0.8。分区时,一般采用哈希函数,分区的作用是适配多个Reduce任务。排序后可以合并,合并就是如<”a”,1>,<”a”,1>变为<”a”,2>的过程,这样一些重复的键值对可以合并为一个,大大减少溢写到磁盘的数据量。需要注意的是,合并不是必须的,也就是说,要视具体问题来看,合并不能改变最终结果。文件归并时,如果溢写的文件数量大于预定值(默认是3)则可以再次启动Combiner合并,少于3则不需要(因为合并也是一个耗时的过程)。 ? ReduceShuffle JobTracker作为作业监视器,一直在监视作业的情况。一旦Map过程处理完成,则Reduce端会被其通知来取走属于自己需要处理的一份,取走后进行合并(combine)和归并(merge)。 注:一个Reduce端可能处理来自多个map端的数据,一个map端可能产生多个Reduce端处理的数据。合并和归并也是不一样的,合并时<”a”,1><”a”,1>-><”a”,2>,归并时<”a”,<1,1>>。 ? MapReduce阶段
? 类序列化(JavaSE的知识补充) 当要在进程间传递对象或持久化对象的时候,就需要序列化对象成字节流,反之当要接收到或从磁盘读取的字节流转换为对象,就要进行反序列化。 Writable是Hadoop的序列化格式,Hadoop定义了这样一个Writable接口。一个类要支持可序列化只需实现这个接口即可。 ? ? 数据仓库查询分析和HiveHive简介
总结:Hive是一个可以提供有效合理直观组织和使用数据的分析工具。 ? Hive特性 采用批处理方式处理海量数据 Hive提供了一系列对数据进行提取、转换、加载ETL的工具 ? Hive与传统数据库的对比分析 Hive的用户体验在很多方面和传统的关系数据库相似,但是它底层依赖的是HDFS和MapReduce,所以在很多方面又有别于传统数据库。 ? Hive中SQL查询转换为MR作业的过程 输入SQL-》转换为抽象语法树-》转换为查询块-》转换为逻辑查询计划-》重写逻辑查询计划-》转为物理查询计划-》选择最优查询策略 ? ? 基于内存计算的SparkSpark简介 2013年,Spark加入Apache孵化器项目后发展迅猛,如今已经成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop、Spark、Storm)。 注:Hadoop是离线批处理框架,Spark是基于内存计算的实时数据分析框架,Storm是数据流分析框架。 ? Spark特点
? Scala简介 Scala是一门现代的多范式编程语言,运行于Java平台,并兼容现有的Java 程序。 注:多范式指的是可以支持多种编程风格,如函数式编程、面向对象编程。 ? Scala特性
? Spark和Hadoop的对比 Hadoop的缺点
Spark相对于Hadoop MR的优点
? Spark的基本概念 RDD(Resillient Distributed Dataset,弹性分布式数据集):一种高度受限的共享内存模型,是一个分布式对象集合,本质上是一个只读的分区记录集合,不同分区可以被保存到集群中不同的结点上,从而可以进行分布式计算 DAG(Directed Acyclic Graph,有向无环图):反映了RDD之间的依赖关系 Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,也可以叫TaskSet,代表了一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集
? RDD的运行原理 设计背景 许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,共同之处是,不同计算机阶段之间重用中间结果。 目前的MR框架都是把中间结果写入到HDFS中,带来的大量的数据复制、磁盘IO和序列化开销 RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换形成依赖关系,可以实现管道化,避免中间数据存储。 ? RDD概念
? RDD的执行过程
? 以上一系列操作被称为一个Lineage(血缘关系),即DAG拓扑排序的结果。这样做的优点是惰性调用、管道化(流水线化)、避免同步等待、不需要保存中间结果、每次操作变得简单。
? 阶段的划分
? ? Hadoop和Spark的联合部署 由于Hadoop生态系统中的一些组件实现的功能,目前还是无法由Spark取代,比如Storm,现有的Hadoop组件开发的应用,完全转移到Spark上需要一定的成本。
? 流计算和Flink基本概念
对静态数据和流数据采用两种不同的计算方式 批量计算:充裕时间处理静态数据,如Hadoop 实时计算:即流计算;实时获取来自不同数据源的海量数据经过实时分析处理,获得有价值的信息。 注:流数据不适合采用批量计算,因为流数据不适合用传统关系模型建模。流数据必须采用实时计算,因为实时计算响应时间为毫秒级。数据量少时,不是问题,但是,在大数据时代,数据格式复杂、来源众多、数据量巨大,对实时计算提出了很大的挑战。因此,针对流数据的实时计算——流计算应运而生。 ? 流计算 流计算秉承一个及基本理念,即数据的价值随着时间的流逝而降低,如用户点击流。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎。也就是说,一个流计算系统应该达到如下要求:
? Storm简介
? Storm设计思想 Storm主要术语包括Streams、Spouts、Bolts、Topology和StreamGroupings Streams
Spout
Bolt
Topology
? Spark Streaming设计 Spark Streaming最主要的抽象是DStream,即将连续的数据流按照时间片(如一段一秒)拆分为离散的数据流,每一段数据转换为Spark的RDD,并且对DStream的操作都最终转变为相应的RDD操作。(这实际上借鉴了操作系统中的时间片轮转法)。 ? Spark Streaming和Storm的对比 两者最大的区别在于,Spark Streaming无法实现毫秒级的流计算,而Storm可以实现。 Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎可以用于实时计算,另一方面,相比于Storm,RDD数据集更容易做高效的容错处理 Spark Streaming采用的小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法,因此,方便了一些需要历史数据和实时数据联合分析的特定应用场合。 ? Spark Streaming和Storm的应用场景 从编程的灵活性来讲,Storm是比较理想的选择,它使用Apache Thrift,可以用任何编程语言来编写拓扑结构。 当需要在一个集群中把流计算和图计算、机器学习、SQL查询分析等进行结合时,可以选择Spark Streaming,因为在Spark上可以统一部署SparkSQL,Spark Streaming、MLlib、GraphX等组件,提供便捷的一体化编程模型 大部分应用场景都不需要毫秒级的响应,因此SparkStreaming在企业还是比较流行,Spark Streaming无法实现毫秒级的流计算,当需要使用毫秒级的流计算时,人们也会选择流行的Flink而非过时的Storm。 ? Spark流计算组件的演进和Structured Streaming
? 为什么设计Structured Streaming
? Flink简介
? Flink是理想的流计算框架
? Kafka消息队列
? ? 图计算和PREGEL图结构数据
? 图计算通用软件 一次BSP(Bulk Synchronous Parallel Computing Model,“大同步”模型)计算过程包括一系列全局超步(所谓的超步就是计算中的一次迭代),每个超步主要包括三个组件: 局部计算:每个参与的处理器都有自身的计算任务,它们只读取存储在本地内存中的值,不同处理器的计算任务都是异步并且独立的。 通讯:处理器群相互交换数据,交换的方式是,由一方发起推送(put)和获取(get)操作。 栅栏同步:当一个处理器遇到“路障”,会等到其他所有处理器完成它们的计算步骤;每一次同步也是一个超步的完成和下一个超步的开始。 ? Pregel简介
? Pregel图计算模型
? 顶点之间的消息传递 采用消息传递模型主要基于以下两个原因: 消息传递具有足够的表达能力,没有必要使用远程读取或共享内存的方式 有助于提升系统整体性能。大型图计算通常是由一个集群完成的,集群环境中执行远程数据读取会有较高的延迟;Pregel的消息模式采用异步和批量的方式传递消息,因此可以缓解远程读取的延迟。 ? Hadoop常用命令总结启动Hadoop所有进程
注:一般不推荐使用start-all.sh来启动,因为开源框架中内部命令有很多问题。 ? 对HDFS的文件操作 注:由于是对Hdfs操作,故命令基本上前面都带有hdfs dfs,后面跟的基本上都是一些linux指令,大同小异不过多赘述,以下列举一些常用的。 查看指定目录下内容 hdfs dfs -cat [file_path] ? 将本地文件或文件夹存储到hadoop hdfs dfs -put [本地地址/目录] [hadoop目录] ? 将hadoop上某个文件down至本地已有目录下 Hadoop dfs -get [文件目录] [本地目录] ? 删除hadoop上指定文件或文件夹 hdfs dfs -rm [文件地址/文件夹地址] ? 在hadoop指定目录内创建新目录 hdfs dfs -mkdir -p /user/[目录名] ? 在hadoop指定目录下新建一个空文件 hdfs dfs -touchz /user/[文件名] ? 重命名Hadoop上某个文件 hdfs dfs -mv /user/[文件地址] ? 杀死hadoop作业 Hadoop job -kill [job-id] ? 查看帮助 hdfs dfs -help ? 查看HDFS支持的所有命令 hdfs dfs ? Hadoop框架控制 节点添加 添加一个新的DataNode节点,先在新加节点上安装好Hadoop,要和NameNode使用相同的配置(可以直接从NameNode复制),修改HADOOPHOME/conf/master文件,加入NameNode主机名。然后在NameNode节点上修改HADOOP_HOME/conf/slaves文件,加入新节点名,再建立新加节点无密码的SSH连接,运行启动命令为:/usr/local/hadoop$bin/start-all.sh ? 负载均衡 HDFS的数据在各个DataNode中的分布可能很不均匀,尤其是在DataNode节点出现故障或新增DataNode节点时。新增数据块时NameNode对DataNode节点的选择策略也有可能导致数据块分布不均匀。用户可以使用命令重新平衡DataNode上的数据块的分布:/usr/local/hadoop$bin/start-balancer.sh ? 退出安全模式 NameNode在启动时会自动进入安全模式。安全模式是NameNode的一种状态,在这个阶段,文件系统不允许有任何修改。 ????? 系统显示Name node in safe mode,说明系统正处于安全模式,这时只需要等待几十秒即可,也可通过下面的命令退出安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode leave ? 进入安全模式 在必要情况下,可以通过以下命令把HDFS置于安全模式:/usr/local/hadoop$bin/hadoop dfsadmin -safemode enter ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 12:49:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |