1、Hadoop概述 Hadoop介绍 Hadoop原理 Hadoop编程,提纲,Hadoop是一个开源的、可靠的、可扩展的分布式并行计算框架 主要组成:分布式文件系统HDFS和MapReduce算法执行 作者:Doug Cutting 语言:Java,支持多种编程语言,如:Python、C+,Hadoop概述,Hadoop是Google的集群系统的开源实现 Google集群系统:GFS(Google File System)、MapReduce、BigTable Hadoop主要由HDFS(Hadoop Distributed File System Hadoop分布式文件系统)、MapRedu
2、ce和HBase组成 Hadoop的初衷是为解决 Nutch 的海量数据爬取和存储的需要 Hadoop于2005年秋天作为 Lucene的子项目Nutch的一部分正式引入Apache基金会。 名称起源: Doug Cutting儿子的黄色大象玩具的名字,Hadoop起源,Hadoop概述 Hadoop介绍 Hadoop原理 Hadoop编程,提纲,什么是大数据,数据集主要特点 Volume: 数量量从TB到PB级别 Variety: 数据类型复杂,超过80%的数据是非结构化的 Velocity:数据量在持续增加(两位数的年增长率) 其他特征 数据来自大量源,需要做相关性分析 需要实时或者准实时
3、的流式采集,有些应用90%写vs.10%读 数据需要长时间存储,非热点数据也会被随机访问,大数据处理的需求和特点,大数据VS传统数据,并行关系数据库vs MPP/Hadoop,多个独立的关系数据库服务器,访问共享的存储资源池 优势 采用多个关系数据库服务器,多个存储,与原有的架构相比,扩展了存储容量和计算能力 劣势: 计算与存储分离,数据访问存在竞争和带宽瓶颈 支持的关系数据库服务器数量有限 只能向上扩展,不能横向扩展 适合复杂的需要事务处理的应用,由大量独立的服务器通过网络互连形成集群,每个服务器带存储。 优势:计算与存储融合,支持横向扩展,更好的扩展性 劣势:解决数据冲突时需要节点间协作
4、适用范围: 数据仓库和离线数据分析(MPP, Hadoop/HBase) 大规模在线实时应用(单行事务处理能满足的场景)(HBase),MPP vs. Hadoop/Hive/HBase,Hadoop生态圈,Core:一套分布式文件系统以及支持Map-Reduce的计算框架 Avro:定义了一种用于支持大数据应用的数据格式,并为这种格式提供了不同的编程语言的支持 HDFS:Hadoop分布式文件系统 Map/Reduce:是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集 ZooKeeper:是高可用的和可
5、靠的分布式协同系统 Pig:建立于 Hadoop Core之上为并行计算环境提供了一套数据工作流语言和执行框架 Hive:是为提供简单的数据操作而设计的下一代分布式数据仓库。它提供了简单的类似SQL的语法的HiveQL语言进行数据查询 HBase:建立于 Hadoop Core之上提供一个可扩展的数据库系统 Flume:一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据 Mahout:是一套具有可扩充能力的机器学习类库 Sqoop:是Apache下用于RDBMS和HDFS互相导数据的工具,Hadoop子项目,Hadoop概述 Hadoop介绍 Hado
6、op原理 Hadoop编程,提纲,设计目标 错误检测和快速自动恢复 硬件故障是常态而非异常 为流式数据访问优化 针对支持大数据集 单个文件大小有数GB或者TB 可提供高聚合带宽访问可能够扩展至数千个节点 简化“一致性”模型 一次写入、多次读,写入过程可能并发 移动“计算”比移动“数据”更便宜 主要特点 使用低成本存储和服务器构建 存放PB级别的海量数据 高可扩展性,实际生产环境扩展至4000个节点 高可靠性和容错性,数据自动复制,可自我修复 高带宽,高并发访问,对于延迟不敏感 面向批处理,HDFS-分布式文件系统,数据分布与复制,HDFS基本设计,数据块:文件被划分为固定大小的数据块进行存储
7、数据块缺省为64M,远大于一般文件系统数据块大小 减少元数据的量 有利于顺序读写(在磁盘上顺序存放) 可靠性:数据通过副本的方式保存在多个数据节点上 默认3个副本 副本选择会考虑机架信息以防止整个机架同时掉电系统设计优化:用单个管理节点来保存文件系统元数据和管理/协调,HDFS基本设计,数据缓存:DataNode没有数据缓存 由于文件的访问是扫描式的,不具有局部性 访问方式 读、写、文件改名、删除等 文件内容不允许覆盖更新 提供一个特殊的访问接口:追加append,HDFS体系结构,中心目录服务器 (NameNode) 管理大量数据服务器(DataNode) NameNode 管理元数据 (文
8、件目录树, 文件-块映射,块-数据服务器映射表, etc.) DataNode 负责存储数据、以及响应数据读写请求 客户端与NameNode交互进行文件创建/删除/寻址等操作, 之后直接与DataNodes交互进行文件I/O,什么是MapReduce编程模型?,Map(映射):对一些独立元素组成的 列表的每一个元素进行指定的操作,可 以高度并行。 Reduce(化简):对一个列表的元素进行合并。 一个简单的MapReduce程序只需要指定map()、reduce()、输入和输出,剩下的事由框架帮你搞定。,MapReduce计算框架,为离线数据分析而设计,基本上是个利用数据并行性进行分布运算而后
9、汇总结果的计算框架 分析问题能够被并行化,且输入数据集可以被切分 一个Map函数,在第一阶段计算对一个Reduce函数,在第二阶段用于汇总Map函数的结果,MapReduce举例,代码举例,MapReduce 应用场景,视频分析和检索 推荐引擎 数据分析手段 全文挖掘 建立索引 图形创建和分析 模式识别 协同过滤 情感分析 风险评估,HBase分布式数据库,HBase是一个按列存储的、多维表结构的实时分布数据库, 为高速在线数据服务而设计 表: (行,列族,列名,版本名) 值 主要特点 NoSQL 面向列、可压缩,有效降低磁盘I/O,提高利用率 多维表,四个维度,其中三个维度可变,适合描述复杂
10、嵌套关系 灵活的表结构,可动态改变和增加(包括行、列和时间戳),为多列族设置不同复制因子 支持单行的ACID事务处理 分布式系统 高性能,支持高速并发写入和高并发查询 可扩展,数据自动切分和分布,可动态扩容,无需停机 高可用性,建立在HDFS分布式文件系统之上,HBase软件架构,HBase组件交互,一个管理服务器(HBase Master) 控制多个数据服务器(RegionServer) HMaster负责表的创建、删除和维护,以及region的分配和负载平衡 Region Server负责管理维护region、以及响应读写请求 客户端与HMaster进行有关表的元数据的操作, 之后直接读写
11、Region Servers,HBase特性,Hadoop Hbase:NoSql databse 基本的数据库操作CRUD 强一致性 无SQL语言支持 稀疏的多维映射表 列存储 只用rowkey来定位 每行可以有不同列 数据有多个版本 非常高的读写数度,为写特别优化 高效随机读取 对于数据的某一个子集能够进行有效扫面,HBase特性2,分布式的多层次映射表结构 具有容错性,能够将数据持久化到非易失存储中 使用HDFS做底层存储,可以用Hadoop的压缩codec减少空间占用 自动水平扩展 只需要新加入的节点即可提高存储容量和吞吐量 服务器能够被动态加入或者删除(用以维护和升级) 服务器自动调
12、整负载均衡,Hive数据仓库,Hive是一个建立在hadoop/hbase之上的数据仓库,用于分析结构化海量数据 采用HDFS或HBase进行数据存储 采用Map/Reduce进行数据操作 基本特点: 提供类似于SQL的查询语言 针对海量数据的高性能查询和分析系统 命令行接口,JDBC/ODBC 提供灵活的扩展性 复杂数据类型,扩展函数和脚本等,Hive应用范围举例,日志分析:日志分析可以优化系统,获知用户行为,也可以获知数据的统计信息 数据挖掘:通过结构化数据的挖掘,能够获得原先使用者没有意识的信息 文档索引:可以对一系列文档进行分析,并形成文档的索引结构,不一定是完整的排序表,可能是关联信
13、息的索引 商业智能信息处理:可以对商业信息进行查询分析,从中可以获得一些只能决策的信息 及时查询以及数据验证:数据分析人员可能临时需要验证数据的特性,需要查询引擎迅速进行数据分析,Hive QL,类SQL,和SQL有80%以上的相似度 有大量扩展 不支持DELETE,UPDATE 不支持TRANSACTION 目前不支持in操作,但支持join Inner join,outer join,left semi join(in的替代品) Join实现:普通join,Map join,Bucket Map join,Hive分区和桶,Partitions:数据表可以按照某一个字段的值划分Partit
14、ions 例如,通过日期的方式将数据表进行划分;如果需要查询某天的数据,那么只需要读取相应的Partitions就可以了 分区数量不固定 每个分区是一个目录Buckets:数据存储的桶 建表时指定桶个数,每个桶是一个文件,桶内可以排序 数据按照某个字段的hash值后放入某个桶中 对于数据的抽样、特定join的优化很有意义,Hive分区举例,以日志为例,按日期和国家分区: CREATE TABLE logs(timestamp BIGINT,line STRING) PARTITIONED BY (date STRING, country STRING)获取分区表: Hiveshow parti
15、tions log; date=2013-02-26/country=China 查询分区: SELECT timestamp, date, line FROM logs where country=China 这时候,将只扫面country=China的分区的文件,而不用扫面其他的文件,提高查询效率hive支持动态分区,Hive及时查询,将hive Ql利用Hbase的coprocessor执行 支持的语言特性: 简单select Group by汇总 Order by及top N 字符串,数字,算术,逻辑运算符 Rowkey自动过滤机制(包括模糊查询)比MapReduce方式快310X,Z
16、ookeeper分布式协作服务,一个高可用的分布式数据管理与系统协调框架 基于对Paxos算法的实现 强一致性 设计目标 接口简单,允许多个分布的进程基于一个共享的,类似标准文件系统的树状名称空间进行协作 高效 可靠,ZooKeeper提供的保证,序列一致性: 数据更新会依照client发送的次序来进行。 原子性: 更新要么成功,要么失败.不存在部分结果。 唯一系统镜像: client总是会看到一致的视图,而不管它是连接到具体哪个zookeeper server。 可靠性: 一旦更新完成, 它会持续保存直到有另外的client重写。 及时: 客户端视图会在一定的时间间隔内进行更新。,ZooKeeper典型应用场景,数据发布与订阅(配置中心) 负载均衡 命名服务(Naming Service) 分布式通知/协调 集群管理与Master选举 分布式锁 分布式队列,机器学习Mahout,源于Apache Lucene的子项目 基于Hadoop的可扩展的机器学习工具库,算法不局限于Hadoop 面向开发人员的java库,无UI/Server/Installer 核心算法使用MapReduce实现 弹性好,擅长海量数据处理 目前主要实现了四大类算法:推荐引擎,聚类,分类以及频繁项集分析 项目开源(Apache许可)、开放(Apache社区) 已有大量常用机器学习算法实现,谢谢!,