• 1. 云计算之Hadoop报告人:赵辉 指导老师:杨树强
  • 2. 报告内容Hadoop核心 Hadoop dfs(Hdfs) MapReduce 分布式并行计算模型 Hadoop扩展 Hadoop base(Hbase)基于hadoop核心的高扩展性分布式数据库 Pig-一种高级数据流语言和并行计算的执行框架,也基于hadoop核心 Hive-建立在hadoop之上的数据仓库基础设施,提供数据摘要,adhoc querying,数据集分析。
  • 3. Hadoop DFS(HDFS)
  • 4. HDFS:技术背景数据海量化趋势催生了DFS应用 单机无法存放,大数据集被分割存储 文件系统对跨机器的数据集进行统一管理 实现的复杂度远大于本地存储系统,例如:错误处理 HDFS是一种实现 超大文件的存储,流式数据访问,运行于普通商业集群。
  • 5. HDFS:假设与目标视硬件出错为正常的情况,目标是透明容错 超大文件,典型的文件规模GB或者TB级 流式读写,主要应用是批处理而非交互式,目标是高数据吞吐率
  • 6. HDFS:基本概念HDFS块 组成HDFS文件,分布存储 典型块大小为64MB或128MB 副本 块级,相同的块存储在不同的结点 Namenode HDFS的主结点,提供名字服务,管理文件系统 核心数据结构:fsimage和editlog Datanode HDFS的从结点,提供块存储服务
  • 7. HDFS:体系结构
  • 8. HDFS:访问接口Java客户端:Java API 非java客户端:Thrift服务 C客户端:通过系统提供的C库,libhdfs。 Filesystem in Userspace(Fuse):Hadoop提供了Fuse-DFS模块,实现对HDFS的挂载和标准化访问 HTTP接口:只读访问 WEBDAV:对HTTP的扩展,支持对文件的编辑、hdfs文件挂载和标准化访问,处于开发阶段 FTP接口:使用FTP协议与HDFS进行交互,处于开发阶段
  • 9. HDFS数据流:读
  • 10. HDFS数据流:写
  • 11. HDFS:错误处理Datanode出错 处理:标记该数据机状态为宕机,从有效IO列表中清除,将其上所有数据块标记为不可读,复制数据块 Namenode出错 核心数据结构(FsImage和Editlog)出错 多副本同步,元数据可用(SecondNamenode) 机器错误要采取人工干预(单点失效)
  • 12. HDFS:数据完整性CRC校验和保证数据完整性 CRC32 实现机制 客户端写一个块之前会计算其对应的校验和。 校验和文件和数据块存储在datanode的相同目录下。 客户端读取数据块并读取其校验和文件,进行校验。 校验失败则尝试其他副本。
  • 13. HDFS:总结HDFS被设计为支持在普通商业集群上进行的大规模数据处理: 允许组件频繁失效 优化了对超大文件的访问 定制化的文件系统接口,与标准接口有类似 简单的解决方案使系统工作更高效(如:单主) 实现了单个集群数TB级数据的可靠存储
  • 14. MapReduce
  • 15. MapReduce:技术背景概念上简单的计算 倒排索引、统计某天最频繁查询的集合等 分布环境下变得复杂 表现在:分解、并行、保证可靠性 解决方案: MapReduce 封装复杂度,框架自动化处理 提供简单接口:用户实现可变的业务逻辑
  • 16. MapReduce:用户接口map (in_key, in_value) -> (out_key, intermediate_value) list reduce (out_key, intermediate_value list) ->out_value list
  • 17. MapReduce:基本概念Job:一个MapReduce程序 Task:job的组成部分 maptask:完成部分数据的转换,用户实现的map接口负责数据的转换逻辑。 Reducetask:完成对中间结果的规约,用户实现的reduce接口负责数据的规约逻辑 Jobtracker:主控结点 Tasktracker:task的执行结点
  • 18. MapReduce :体系结构主从式结构 主结点“jobtracker” 接受用户提交的MR job 分派map任务和reduce任务 监管tasks和tasktrackers,重新执行失效任务 从结点“tasktrackers” 按照jobtracker的要求执行map或者reduce任务 管理存储,传输中间结果
  • 19. MapReduce:基本原理
  • 20. MapReduce例子:词频统计map(String input_key, String input_value): // input_key: document name // input_value: document contents for each word w in input_value: emit(w, 1); reduce(String output_key, Iterator intermediate_values): // output_key: a word // output_values: a list of counts int result = 0; for each v in intermediate_values: result += v; emit(output_key, result);
  • 21. MapReduce :总结在很多应用领域mapreudce都发挥了不错的效果 极大简化了大规模计算 用户只需关注实际问题,mapreduce库处理执行环境相关的复杂问题
  • 22. Hadoop base(HBASE)
  • 23. Hbase:技术背景数据集规模不断增大,已呈PB级 传统数据库扩展昂贵,分布复杂 一般的商业硬件便宜且具有不错的性能 交互式和批处理两方面应用需求(hadoop只支持批处理,流式访问,无法提供低延迟需求)
  • 24. Hbase:项目简介建模在谷歌bigtable上的分布式数据库 Bigtable: A Distributed Storeage System for Structured Data by Chang et al.(OSDI2006) 结构化数据以键值对形式存储在基于列存储的表中 实现海量数据的在线访问 交互式需求,这是与mapreduce的差异 工程目标:按需扩展的数据存储 PB级数据跨数千台普通商业服务器存储 Hadoop扩展子项目 构建在Hadoop核心之上,存储依赖于HDFS,可以作为Mapreduce的输入和输出 数据冗余存储,保证可靠性,可以实现按需扩展,自动负载均衡等
  • 25. Hbase:限制没有表连接操作 不具备复杂的查询引擎(键值对查询) 不支持事务 列没有类型 没有SQL,没有ODBC/JDBC接口等等。 总之,它不能取代RDBMs
  • 26. Hbase:适用情况数据规模很大,web规模 基本的数据访问需求 只有CRUD及行范围的表扫描 主键是意味着主要 不需要RDBMS的模式 即:大表,稀疏存储 没有表连接,但能在大表中选择某些行以及某些列 记录项具有版本特性 典型应用是webtable
  • 27. Webtable:概念视图Row KeyTime StampColumn ContentsColumn AnchorColumn “mime”“com.cnn.www”T9Anchor:cnnsi.comCNNT8Anchor:my.look.caCNN.COMT6“.. “Text/htmlT5“.. “t3“.. “
  • 28. Webtable:物理视图Row KeyTime StampColumn: ContentsCom.cnn.wwwT6“..”T5“..”T3“..”Row KeyTime StampColumn: AnchorCom.cnn.wwwT9Anchor:cnnsi.comCNNT5Anchor:my.look.caCNN.COMRow KeyTime StampColumn: mimeCom.cnn.wwwT6text/html
  • 29. Hbase:数据模型表由行/列/时间戳三维组成 记录项通过行+列+时间戳进行索引 记录项是无类型的字节数组 行可以是任意的文本值:例如URL 行按照词典序排序 行更新是原子的,即使有上千个列 列聚集成列族 列名由作为前缀的列族名和分类限定词组成 如attribute:mimetype, attribute:language 列族中所有成员具有相似的特性,存储在一个目录下 列族要在定义表模式时指定,之后不可改变,列成员可变 表被划分为很多region Region由开始键+结束键表示 Region是分布的最小单位
  • 30. (本页无文本内容)
  • 31. Hbase实现:元数据表META表 Meta表存储了用户region相关的信息 Region开始结束行,对应regionserver的地址以及可用状态 Meta表由meta region组成,随用户region增加而增加 ROOT表 单region 存储所有meta region和regionserver的映射关系 Meta和root中每行为1K 默认region大小为256MB
  • 32. Hbase实现:region数据结构Hlog 预写日志,记录提交的region更新操作 Memcache regionserver对region更新的缓存 Store集合 Region的持久化存储,一个store集合对应一个列族 Memcache达到阈值就刷一个索引文件到store集合中
  • 33. Hbase实现:系统结构
  • 34. Hbase访问:客户端Java客户端 通过Hbase提供的java API 非Java客户端 通过Thrift server和REST server Shell(类SQL shell):通过HQL MR通过TableInput/OutputFormat接口
  • 35. Hbase访问:元数据客户端通过ZK获取root表信息 访问root表获取meta region的信息 访问meta region,获取用户region的信息 客户端直接访问用户region所在的region server 客户端缓存元数据信息 缓存失效则重新获取元数据
  • 36. Hbase访问:读写写请求 写请求首先提交到预写日志Hlog 同一region服务器上所有region的写请求提交到同一Hlog 数据写入region服务器的memcache Cache满则将其内容持久化到文件系统 Hlog存储在HDFS上,为了容错 读请求 首先查找memcache 找不到需要的数据则查找store集合 在store集合中按照从新到旧的顺序查找
  • 37. Pig:技术背景对海量数据的按需分析应用需求不断增加,尤其对于大规模web应用 并行数据库产品(如Teradata)提供了一种解决方案,但扩展开销太过昂贵 很多程序员习惯于过程式数据分析,这也是mapreduce之所以流行的原因之一 MapReduce很强大,但存在缺陷: 抽象层次过低,单输入两阶段数据流不够灵活,导致大量定制的客户代码,难以维护和重用。
  • 38. Pig:Pig LatinPig Latin是一种关注数据流的代数式语言,其优势在于: 提供一种高级声明式语言SQL和低级过程式mapreduce编程模型的良好折中 提高了生产率,测试结果表明: 10行Pig Latin≈200行java 4小时编写的java,Pig Latin只需15分钟 简化编程难度,适于所有程序员 提供公用操作子(join、group、filter、sort等)
  • 39. Pig:系统组成
  • 40. Pig:工作机制Pig Latin代码提供分析处理的业务逻辑 编译器进行各种检查,将Pig Latin代码转化为MapReduce执行计划,并对其进行优化 Hadoop集群服务器负责任务的具体执行,并向Pig返回执行结果
  • 41. Pig:适合的应用Web日志处理 Web搜索引擎中的数据处理 跨大数据集的按需分析查询 大规模数据处理算法的快速原型构建
  • 42. Hive:技术背景工业界为实现BI而收集和处理的数据规模不断曾大,以致传统的数据仓库解决方案开销太大。 Hadoop作为mapreduce的开源实现,已经非常成熟,广泛流行。可以很好的利用普通商业硬件实现海量数据的存储和处理。 但mapreduce编程模型的抽象层次较低,编程模型的限制过于严格,不利于灵活式的数据分析处理。
  • 43. Hive:简介Facebook实现的建立在Hadoop之上的开源数据仓库解决方案 支持类SQL的查询语言-HiveQL 查询语言会被Hive编译器编译成mapreduce任务,任务由执行引擎调度,具体执行在底层的hadoop集群。
  • 44. Hive:适合的应用日志处理 文本挖掘 文档索引 面向客户的商务智能(例如,谷歌分析 ) 预测模型, 假设检验
  • 45. Hive:发展状况该项目由facebook发起,facebook和其他社区的很多志愿者投入到Hive的开发之中 目前Facebook的Hive可容纳超过2PB数据,每天至少处理5000多次查询请求 下一步发展 将HiveQL从SQL的子集发展为其超级 将编译器的优化规则从基本规则扩展为基于代价和自适应的优化规则,以提供更高效的执行计划 探索更高效的数据存放策略,以提高扫描性能 提供JDBC/ODBC驱动以实现与商业BI工具更好的集成
  • 46. 谢谢!