大数据与分布式计算
• Apache Log Format • Columnar Storage Format
Hive QL – Join
INSERT OVERWRITE TABLE pv_users SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (erid = erid);
Spark任务处理流程
Spark SQL
• Spark SQL提供在大数据上的SQL查询功能,类似于Shark在 整个生态系统的角色,它们可以统称为SQL on Spark。之前 ,Shark的查询编译和优化器依赖于Hive,使得Shark不得不 • 维护一套Hive分支,而Spark SQL使用Catalyst做查询解析和 优化器,并在底层使用Spark作为执行引擎实现SQL的 Operator。用户可以在Spark上直接书写SQL,相当于为 Spark扩充了 • 一套SQL算子,这无疑更加丰富了Spark的算子和功能,同 时Spark SQL不断兼容不同的持久化存储(如HDFS、Hive等 ),为其发展奠定广阔的空间。
– Hadoop Distributed File System (HDFS) is the primary storage system used by Hadoop applications. HDFS creates multiple replicas of data blocks and distributes them on compute nodes throughout a cluster to enable reliable, extremely rapid computations.
111 <2,25>
Map
user
userid age
111 222 25 32
Shuffle Sort
key
111
Reduce
key222 222ge源自derfemale male
value
<2,25> <2,32>
value
<1,1> <2,32>
222
了解Hive的意义
• Hive是一个很方便的工具,一般的业务人员 就可以很快上手。 • M/R任务的数量控制着语句的执行时间。 • 如何减少M/R的任务数量? • 在写HQL时我们能做什么? • Hive如何把HQL转化为M/R job。 • Hive在转化过程中做了哪些优化。
Spark Streaming
• Spark Streaming通过将流数据按指定时间片 累积为RDD,然后将每个RDD进行批处 • 理,进而实现大规模的流数据处理。其吞吐 量能够超越现有主流流处理框架Storm,并 提供 • 丰富的API用于流数据计算。
GraphX
• GraphX基于BSP模型,在Spark之上封装类似 Pregel的接口,进行大规模同步全局的图 • 计算,尤其是当用户进行多轮迭代时,基于 Spark内存计算的优势尤为明显。
文件
• 文件切分成块(默认大小64M),以块为单位,每 个块有多个副本存储在不同的机器上,副本数可在 文件生成时指定(默认3) • NameNode是主节点,存储文件的元数据如文件名, 文件目录结构,文件属性(生成时间,副本数,文件权 限),以及每个文件的块列表以及块所在的 DataNode等等 • DataNode在本地文件系统存储文件块数据,以及块 数据的校验和 • 可以创建、删除、移动或重命名文件,当文件创建 、写入和关闭之后不能修改文件内容。
• Extensibility
– Pluggable Map-reduce scripts – Pluggable User Defined Functions – Pluggable User Defined Types
• Complex object types: List of Maps
– Pluggable Data Formats
Spark运行逻辑
• 在Spark应用中,整个执行流程在逻辑上会形成 有向无环图(DAG)。 • Action算子触发之后,将所有累积的算子形成 一个有向无环图,然后由调度器调度该图上的 任务进行运算。Spark的调度方式与MapReduce 有所不同。Spark根据RDD之间不同的依赖关系 切分形成不同的阶段(Stage),一个阶段包含 一系列函数执行流水线。
– 本地模式 – 分布式模式
Metastore
Client
Driver
Hadoop
Compiler
Hive编译器
Client
Metastore
Driver
Hadoop
Compiler
Spark
Spark生态系统
Spark
Spark是整个BDAS的核心组件,是一个大数据分布式编程框 架,不仅实现了MapReduce 的算子map函数和reduce函数及计算模型,还提供更为丰富 的算子,如filter、join、 groupByKey等。Spark将分布式数据抽象为弹性分布式数据 集(RDD),实现了应用任务调 度、RPC、序列化和压缩,并为运行在其上的上层组件提供 API。其底层采用Scala这种函数式语言书写而成,并且所提 供的API深度借鉴Scala函数式的编程思想,提供与Scala类似 的编程接口。
Compiler
Hive操作符
操作符
TableScanOperator ReduceSinkOperator JoinOperator
描述
从表中读取数据 生成到reduce端的结果数据 Join两份数据 减少输出列 生成结果,输出数据到文件 过滤输入数据 GroupBy分组操作 MapJoin Hint或者由优化器决定采用MapJoin Limit限制行数操作 Union操作
WordCount
MapReduce
MapReduce
• 物理上
MapReduce
Hive
• SQL
– Sub-queries in from clause – Equi-joins
• Inner • Left, Right, full Outer
– Multi-table Insert – Multi-group-by
常用RAID技术
RAID类型
访问速度
数据可靠性
磁盘利用率
RAID0
很快
很低
100%
RAID1
很慢
很高
50%
RAID10
中等
很高
50%
RAID5
较快
较高
(N-1)/N
RAID6
较快
较(RAID5)高
(N-2)/N
HDFS系统架构
什么是HDFS?
• Hadoop Distributed File System
Hive QL – Join in Map Reduce
page_view
pageid userid
1 2 111 111 key value
key
value
time
9:08:01 9:08:13
111 111 222
<1,1> <1,2> <1,1>
111 111
<1,1> <1,2>
1
222
9:08:14
大数据与分布式计算
HDFS
Hadoop Distributed File System
1990年,一个普通的硬盘驱动器可存储1370 MB的数据并拥有4.4 MB/s的传输速度 ,所以,只需五分钟的时间就可以读取整个磁 盘的数据。 20年过去了,1 TB级别的磁盘驱动器是很正常的,但是数据传输的速 度却在100 MB/s左右。所以它需要花两个半小时以上的时间读取 整个驱动器的数据。 从一个驱动器上读取所有的数据需要很长的时间,写甚至更慢。 如何解决? 磁盘损坏数据丢失怎么办? 如果需要存储计算1000T数据怎么办?
Hive架构
Client
Metastore
Driver
Hadoop
Compiler
Hive执行流程
• 操作符(Operator)是Hive的最小处理单元 • 每个操作符处理代表HDFS操作或MR作业 • 编译器把Hive SQL转换成一组操作符
Client
Metastore
Driver
Hadoop
Tachyon
• Tachyon是一个分布式内存文件系统,可以 理解为内存中的HDFS。为了提供更高的性 • 能,将数据存储剥离Java Heap。用户可以基 于Tachyon实现RDD或者文件的跨应用共享 , • 并提供高容错机制,保证数据的可靠性。
Spark架构
Spark的基本组件。
• ClusterManager:在Standalone模式中即为Master (主节点),控制整个集群,监控Worker。在 YARN模式中为资源管理器。 • Worker:从节点,负责控制计算节点,启动 Executor或Driver。在YARN模式中为 NodeManager,负责计算节点的控制。 • Driver:运行Application的main()函数并创建 SparkContext。
分而治之(Divide and Conquer)
MapReduce特性
• • • • 自动实现分布式并行计算 容错 提供状态监控工具 模型抽象简洁,程序员易用
MapReduce
它由称为map和reduce的两部分用户程序组成 ,然后利用框架在计算机集群上面根据 需求运行多个程序实例来处理各个子任 务,然后再对结果进行归并。
HDFS设计目标
• HDFS以流式数据访问模式存储超大文件,运 行于商用硬件集群上。