1、大数据与分布式计算 1HDFSHadoop Distributed File System2 1990年,一个普通的硬盘驱动器可存储1370 MB的数据并拥有4.4 MB/s的传输速度 ,所以,只需五分钟的时间就可以读取整个磁盘的数据。 20年过去了,1 TB级别的磁盘驱动器是很正常的,但是数据传输的速度却在100 MB/s左右。所以它需要花两个半小时以上的时间读取整个驱动器的数据。 从一个驱动器上读取所有的数据需要很长的时间,写甚至更慢。 如何解决?磁盘损坏数据丢失怎么办?如果需要存储计算1000T数据怎么办?3常用RAID技术4RAID类型访问速度访问速度数据可靠性数据可靠性磁盘利用率磁盘
2、利用率RAID0很快很低100%RAID1很慢很高50%RAID10中等很高50%RAID5较快较高(N-1)/NRAID6较快较(RAID5)高(N-2)/N5HDFS系统架构67什么是HDFS? Hadoop Distributed File SystemHadoop Distributed File System (HDFS) is the primary storage system used by Hadoop applications. HDFS creates multiple replicas of data blocks and distributes them on com
3、pute nodes throughout a cluster to enable reliable, extremely rapid computations.8HDFS设计目标 HDFS以流式数据访问模式存储超大文件,运行于商用硬件集群上。9 超大文件 流式数据访问一次写入多次读取 商用硬件10不适合HDFS的场景 低延迟的数据访问 大量小文件超过NameNode的处理能力 多用户任意写入修改文件11 HDFS为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制(replicas),并将它们放置在服务器群的计算节点中(compute nodes),Map
4、Reduce就可以在它们所在的节点上处理这些数据了。12设计目标假设:节点失效是常态理想: 1. 任何一个节点失效,不影响HDFS服务2. HDFS可以自动完成副本的复制13HDFS主要组件的功能 NameNodeDataNode 存储元数据 存储文件内容元数据保存在内存中文件内容保存在磁盘 保存文件,block ,datanode之间的映射关系维护了block id到datanode本地文件的映射关系14文件 文件切分成块(默认大小64M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3) NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文
5、件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等 DataNode在本地文件系统存储文件块数据,以及块数据的校验和 可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。15分而治之(Divide and Conquer)16分而治之(Divide and Conquer)17分而治之(Divide and Conquer)18MapReduce19MapReduce:大规模数据处理 处理海量数据(1TB) 上百/上千CPU实现并行处理 简单地实现以上目的 移动计算比移动数据更划算 分而治之(Divide and Conquer
6、)20MapReduce特性 自动实现分布式并行计算 容错 提供状态监控工具 模型抽象简洁,程序员易用21MapReduce它由称为map和reduce的两部分用户程序组成,然后利用框架在计算机集群上面根据需求运行多个程序实例来处理各个子任务,然后再对结果进行归并。2223WordCount24252627282930MapReduce31MapReduce 物理上32MapReduce333435Hive36373839 SQLSub-queries in from clauseEqui-joins Inner Left, Right, full OuterMulti-table Inser
7、tMulti-group-by40 ExtensibilityPluggable Map-reduce scriptsPluggable User Defined FunctionsPluggable User Defined Types Complex object types: List of MapsPluggable Data Formats Apache Log Format Columnar Storage Format41Hive QL JoinINSERT OVERWRITE TABLE pv_usersSELECT pv.pageid, u.ageFROM page_view
8、 pvJOIN user uON (pv.userid = u.userid);42Hive QL Join in Map Reducekeyvalue111111222pageid useridtime11119:08:0121119:08:1312229:08:14useridagegender11125female22232malepage_viewuserkeyvalue111222Mapkeyvalue111111111keyvalue222222ShuffleSortReduce43了解Hive的意义? Hive是一个很方便的工具,一般的业务人员就可以很快上手。 ? M/R任务的数
9、量控制着语句的执行时间。 ? 如何减少M/R的任务数量? ? 在写HQL时我们能做什么? ? Hive如何把HQL转化为M/R job。 ? Hive在转化过程中做了哪些优化。 44 Driver Compiler Hadoop Hive架构Client Metastore 4546Driver Compiler Hadoop Hive执行流程? 操作符(Operator)是Hive的最小处理单元 ? 每个操作符处理代表HDFS操作或MR作业 ? 编译器把Hive SQL转换成一组操作符 Client Metastore 47Hive操作符操作符TableScanOperator Reduce
10、SinkOperator JoinOperator SelectOperator FileSinkOperator FilterOperator GroupByOperator MapJoinOperator LimitOperator UnionOperator 描述从表中读取数据生成到reduce端的结果数据Join两份数据减少输出列生成结果,输出数据到文件过滤输入数据GroupBy分组操作MapJoin Hint或者由优化器决定采用MapJoin Limit限制行数操作Union操作48Hive执行流程? Hive通过ExecMapper和ExecReducer来执行MapReduce任
11、务。 ? 执行MapReduce时有两种模式 ?本地模式 ?分布式模式 Driver Compiler Hadoop Client Metastore 49Driver Compiler Hadoop Hive编译器Client Metastore 50Spark51Spark生态系统52SparkSpark是整个BDAS的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化
12、和压缩,并为运行在其上的上层组件提供API。其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。53Spark任务处理流程54Spark SQL Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark。之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不 维护一套Hive分支,而Spark SQL使用Catalyst做查询解析和优化器,并在底层使用Spark作为执行引擎实现SQL的Operator。用户可以在Spark上直接书写
13、SQL,相当于为Spark扩充了 一套SQL算子,这无疑更加丰富了Spark的算子和功能,同时Spark SQL不断兼容不同的持久化存储(如HDFS、Hive等),为其发展奠定广阔的空间。55Spark Streaming Spark Streaming通过将流数据按指定时间片累积为RDD,然后将每个RDD进行批处 理,进而实现大规模的流数据处理。其吞吐量能够超越现有主流流处理框架Storm,并提供 丰富的API用于流数据计算。56GraphX GraphX基于BSP模型,在Spark之上封装类似Pregel的接口,进行大规模同步全局的图 计算,尤其是当用户进行多轮迭代时,基于Spark内存计
14、算的优势尤为明显。57Tachyon Tachyon是一个分布式内存文件系统,可以理解为内存中的HDFS。为了提供更高的性 能,将数据存储剥离Java Heap。用户可以基于Tachyon实现RDD或者文件的跨应用共享, 并提供高容错机制,保证数据的可靠性。58Spark架构59Spark的基本组件。 ClusterManager:在Standalone模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器。 Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为 NodeManager,负责计算节点的控制。 Dr
15、iver:运行Application的main()函数并创建SparkContext。60 Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。 SparkContext:整个应用的上下文,控制应用的生命周期。 RDD:Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph。 DAG Scheduler:根据作业(Job)构建基于Stage的DAG,并提交Stage给TaskScheduler。 TaskScheduler:将任务(Task)分发给Executor执行。61
16、 SparkEnv:线程级别的上下文,存储运行时的重要组件的引用。SparkEnv内创建并包含如下一些重要组件的引用。MapOutPutTracker:负责Shuffle元信息的存储。BroadcastManager:负责广播变量的控制与元信息的存储。BlockManager:负责存储管理、创建和查找块。MetricsSystem:监控运行时性能指标信息。SparkConf:负责存储配置信息。62Spark运行逻辑 在Spark应用中,整个执行流程在逻辑上会形成有向无环图(DAG)。 Action算子触发之后,将所有累积的算子形成一个有向无环图,然后由调度器调度该图上的任务进行运算。Spark的调度方式与MapReduce有所不同。Spark根据RDD之间不同的依赖关系切分形成不同的阶段(Stage),一个阶段包含一系列函数执行流水线。6364