@R星校长
hadoop 第一天
Hadoop一共六天课程:
- 分布式存储 两天
- MapReduce计算 两天
- 案例 两天
第一天内容安排
- 1T文件操作(训练)
- hadoop起源(了解)
- HDFS架构(重点)
- 数据块副本放置策略(重点)
- HDFS的权限(了解)
- hadoop的安全模式(理解)
- HDFS写文件流程(重点)
- HDFS读文件流程(重点)
- 伪分布式搭建(熟练)
热身1T文件操作的思考:
- 分治思想
- 单机处理大数据的问题
- 集群分布式处理大数据的辩证
分治思想引入案例
- 十万个元素(数字或单词)需要存储,如何存储?
- 如果想查找某一个元素,最简单的遍历方式的复杂度是多少?
- 如果我们期望复杂度是O(4)呢?
• 分而治之的思想非常重要,常见于以下技术:
1. Redis集群
2. Hadoop
3. Hbase
4. ElasticSearch
单机处理大数据的问题
需求:
有一个非常大的文本文件,里面有非常多的行,只有两行内容一样,它们出现在未知的位置,需要查找到它们。硬件:单台机器,而且可用的内存很少,也就 500MB。
• 假如 IO 速度是 500MB/S
• 1T 文件读取一遍需要约 30 分钟
• 循环遍历需要 N 次 IO 时间
• 分治思想可以使时间降为 2 次 IO
• 思考:
• 如何让时间变为分钟、秒级别
• 假如 IO 速度是 500MB/S
• 1T 文件读取一遍需要约 30 分钟
• 如何对 1TB 文件进行排序
方式 1:外部有序,内部无序。
逐一读入内存排序
方式 2:逐一读取 500M 排序,内部有序, 外部无序 ,然后进行归并排序
需求:
• 有一个非常大的文本文件,里面有几百亿行,只有两行内容一样,它们出现在未知的位置,需要查找到它们。
• 分钟、秒级别完成
• 硬件:*台机器,而且可用的内存 500MB。
由于涉及到计算机之间文件传输,千兆带宽,100MB/s
拉取网卡 100MB/S
之前忽略了上传时间:1TB/100MB = 10000S /3600S = 3H
集群分布式处理大数据的辩证
• 2000 台真的比一台快吗?
• 如果考虑分发上传文件的时间呢?
• 如果考虑每天都有 1TB 数据的产生呢?
• 如果增量了一年,最后一天计算数据呢?
• 1天 2*30=1H 3H1M2S
• 2天 2H 3H1M4S
• 3天 3H 3H1M6S
• 4天 4H 3H1M8S
hadoop起源
发展历史
- 2002年10月,Doug Cutting 和 Mike Cafarella 创建了开源网页爬虫项目 Nutch。
- 2003年10月,Google 发表 Google File System 论文。
- 2004年7月,Doug Cutting 和 Mike Cafarella 在 Nutch 中实现了类似 GFS 的功能,即后来 HDFS 的前身。
- 2004年10月,Google 发表了 MapReduce 论文。
- 2005年2月,Mike Cafarella 在 Nutch 中实现了 MapReduce 的最初版本。
- 2005年12月,开源搜索项目 Nutch 移植到新框架,使用 MapReduce 和 NDFS 在 20 个节点稳定运行。
- 2006年1月,Doug Cutting 加入雅虎,Yahoo! 提供一个专门的团队和资源将 Hadoop 发展成一个可在网络上运行的系统。
- 2006年2月,Apache Hadoop 项目正式启动以支持 MapReduce 和 HDFS 的独立发展。
- 2006年3月,Yahoo! 建设了第一个 Hadoop 集群用于开发。
- 2006年4月,第一个 Apache Hadoop 发布。
- 2006年11月,Google 发表了 Bigtable 论文,激起了 Hbase 的创建。
- 2007年10月,第一个 Hadoop 用户组会议召开,社区贡献开始急剧上升。
- 2007年,百度开始使用 Hadoop 做离线处理。
- 2007年,中国移动开始在“大云”研究中使用 Hadoop 技术。
- 2008年,淘宝开始投入研究基于 Hadoop 的系统——云梯,并将其用于处理电子商务相关数据。
- 2008年1月,Hadoop 成为 Apache 顶级项目。
- 2008年2月,Yahoo! 运行了世界上最大的 Hadoop 应用,宣布其搜索引擎产品部署在一个拥有 1 万个内核的 Hadoop 集群上。
- 2008年4月,在 900 个节点上运行 1TB 排序测试集仅需 209 秒,成为世界最快。
- 2008年8月,第一个 Hadoop 商业化公司 Cloudera 成立。
- 2008年10月,研究集群每天装载 10TB 的数据。
- 2009 年3月,Cloudera 推出世界上首个 Hadoop 发行版—— CDH(Cloudera’s Distribution including Apache Hadoop)平台,完全由开放源码软件组成。
- 2009年6月,Cloudera 的工程师 Tom White 编写的《 Hadoop 权威指南》初版出版,后被誉为 Hadoop 圣经。
- 2009年7月 ,Hadoop Core 项目更名为 Hadoop Common ;
- 2009年7月 ,MapReduce 和 Hadoop Distributed File System (HDFS) 成为 Hadoop 项目的独立子项目。
- 2009年8月,Hadoop 创始人 Doug Cutting 加入 Cloudera 担任首席架构师。
- 2009年10月,首届 Hadoop World 大会在纽约召开。
- 2010年5月,IBM 提供了基于 Hadoop 的大数据分析软件 —— InfoSphere BigInsights,包括基础版和企业版。
- 2011年3月,Apache Hadoop 获得 Media Guardian Innovation Awards 媒体卫报创新奖
- 2012年3月,企业必须的重要功能 HDFS NameNode HA 被加入 Hadoop 主版本。
- 2012年8月,另外一个重要的企业适用功能 YARN 成为 Hadoop 子项目。
- 2014年2月,Spark 逐渐代替 MapReduce 成为 Hadoop 的缺省执行引擎,并成为 Apache 基金会顶级项目。
- 2017年12月,Release 3.0.0 generally available
核心组件
- hadoop 通用组件 - Hadoop Common
包含了其他 hadoop 模块要用到的库文件和工具 - 分布式文件系统 - Hadoop Distributed File System (HDFS)
运行于通用硬件上的分布式文件系统,高吞吐,高可靠 - 资源管理组件 - Hadoop YARN
于 2012 年引入的组件,用于管理集群中的计算资源并在这些资源上调度用户应用。 - 分布式计算框架 - Hadoop MapReduce
用于处理超大数据集计算的 MapReduce 编程模型的实现。 - Hadoop Ozone: An object store for Hadoop.
- Hadoop Submarine: A machine learning engine for Hadoop
hadoop 关联项目
- Apache Ambari 是一种基于 Web 的工具,支持 Apache Hadoop 集群的供应、管理和监控。 Apache Ambari 支持 HDFS、MapReduce、Hive、Pig、Hbase、Zookeepr、Sqoop 和 Hcatalog 等的集中管理。也是 5 个顶级 hadoop 管理工具之一。
- Avro™: 数据序列化系统
- Cassandra 是一套开源分布式 NoSQL 数据库系统。它最初由 Facebook 开发,用于储存收件箱等简单格式数据,集 GoogleBigTable 的数据模型与 Amazon Dynamo 的完全分布式的架构于一身, Facebook 于 2008 将 Cassandra 开源。
- chukwa 是一个开源的用于监控大型分布式系统的数据收集系统。这是构建在 hadoop 的 HDFS 和 MapReduce 框架之上的,继承了 hadoop 的可伸缩性和健壮性。Chukwa 还包含了一个强大和灵活的工具集,可用于展示、监控和分析已收集的数据。
- hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 sql 查询功能,可以将 sql 语句转换为 MapReduce 任务进行运行。
- Mahout 提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout 包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
- Apache Pig 是一个高级过程语言,适合于使用 Hadoop 和 MapReduce 平台来查询大型半结构化数据集。通过允许对分布式数据集进行类似 SQL 的查询,Pig 可以简化 Hadoop 的使用。
- Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark 是 UC Berkeley AMP lab 开源的类 Hadoop MapReduce 的通用并行框架,拥有 MapReduce 所具有的优点;但是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS ,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。
- Tez 是 Apache 最新的支持 DAG 作业的开源计算框架。它允许开发者为最终用户构建性能更快、扩展性更好的应用程序。Hadoop 传统上是一个大量数据批处理平台。但是,有很多用例需要近乎实时的查询处理性能。还有一些工作则不太适合 MapReduce ,例如机器学习。Tez 的目的就是帮助 Hadoop 处理这些用例场景。
- ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- HBase 是一个分布式的、高可靠性、高性能、面向列、可伸缩的分布式存储系统,该技术来源于 Fay Chang 所撰写的 Google 论文 “ Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统(File System)所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。
HDFS架构
前提和设计目标
- 硬件错误
a) 硬件错误是常态而不是异常。
b) HDFS 可能由成百上千的服务器所构成,单机故障概率的存在意味着总有一部分服务器不工作的。
c) 错误检测和快速自动恢复是 HDFS 最核心架构目标。 - 流式数据访问
a) 运行在 HDFS 上的应用需要流式访问它们的数据集。
b) HDFS 的设计重点是批处理,而不是交互处理。是高吞吐量而不是低延迟。
c) 为了提高数据的吞吐量,在关键方面修改 POSIX 的语义。 - 大规模数据集
a) HDFS 上的一个典型文件大小一般都在 G 字节至 T 字节。TB PB ZB
b) HDFS 支持大文件存储。
c) 单一 HDFS 实例能支撑数以千万计的文件。 - 简单的一致性模型
a) HDFS 应用遵循 “ 一次写入多次读取 ” 的文件访问模型。
b) 简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
c) Map/Reduce 应用或者网络爬虫应用都非常适合这个模型。 - 移动计算比移动数据更划算
a) 降低网络阻塞的影响,提高系统数据的吞吐量。
b) 将计算程序发送到数据所在的主机,比 GB 级别 TB 级别的数据移动更便捷。 - 异构软硬件平台间的可移植性
a) HDFS 在设计的时候就考虑到平台的可移植性。
b) 这种特性方便了 HDFS 作为大规模数据应用平台的推广。