Hadoop系列之大数据启蒙

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: Hadoop系列之大数据启蒙

1 大数据启蒙

1.1 分治思想

在认识分治思想之前,让我们先来看这样一个需求:

  • 我有一万个元素(比如数字或单词)需要存储,如果查找某一个元素,最简单的遍历方式复杂度是多少呢?
  • 更进一步,如果我期望的复杂度是O(4)呢?

对于第一个需求,我们很容易就能想到可以用数组或者是链表来存储,这样查找某一个元素的时间复杂度分别是O(logn)和O(n):


image.jpg


image.jpg


那么对于第二个需求,我们应该如何实现呢?

如果你有学过数据结构,那你一定很快就能想到可以用散列表这种结构来实现这个需求,使用2500个长度为4(抛开数据分布不平衡的因素)的链表来存储这10000个元素,在查找的时候,首先通过hash值与2500取模定位到所在的链表数组,然后就能以O(4)的复杂度来查找这个元素了,如下图所示:


image.jpg


上述案例中的散列表就体现出了一种分治思想,分而治之的思想非常重要,它被运用在了很多场景中,比如:

  • Redis集群
  • ElasticSearch
  • Hbase
  • HaDoop生态

1.2 单机处理大数据问题

继续来看这样一个需求:

  • 有一个非常大的文本文件,里面有很多很多的行,只有两行一样,它们出现在未知的位置,需要查找到它们。
  • 给定的硬件只有一台单机,而且可用的内存很少,也就几十兆。

现在我们来分析一下这个问题,假设这个文件有1T大小,I/O速度是500MB每秒,那么1T文件读取一遍需要约30分钟,循环遍历(逐行两两比对)需要N次I/O时间(总共需要30 * N 分钟),使用分治思想可以使时间为2次I/O(也就是1个小时左右)。
那么如何利用分治思想呢?我这里提供一种思路:可以计算每一行的hash值,然后对一个基数(比如2000)取模,将文件散列成2000个小文件块(这些文件块小到可以放到内存里),这样会花费一次I/O,也就是30分钟,我们可以知道的是,哈希运算和取模运算都是稳定的运算(两个相同的值无论经过多少次运算,得到的结果总是一样的),因此相同的两行,它们的计算结果一定会相同,也就是说,它们一定会被散列到同一个文件块中,这样再遍历每一个文件块(1次I/O)就能找到某个文件块中重复的两行。


image.jpg


tips:内存寻址比I/O寻址快10万倍。

现在让我们来考虑另一个问题:如果1T的文件中放的都是数值且都是乱序的,现在我们希望把这些数值做一次全排序,我们应该如何来实现呢?

我们都知道哈希这种运算是无序的,因此在这个需求中就不再适用了,这时我们可以使用另一种方式:读取一行中的数值,如果它在某个选定的范围内(假设是1~100),就将它发送到0号小文件块中,如果它在101~200之内,就将它发送到1号小文件块中...依此类推,直到文件中的所有数值都被发送到一个个小的文件块中。这样耗费一次I/O时间可以使得这些数值做到外部(文件块之间)有序,内部(某个文件块中)无序。这时如果我们切分的文件块足够小,我们就可以将它放到内存中做一次排序,这样就能使得数值在每个文件块中也是有序的,从而实现了使用两次I/O完成了所有数值的全排序。


image.jpg


我们也可以先读取一个小文件块大小(比如50M)的数值进行排序,这样我们就能得到n多个内部有序,外部无序的小文件块,学过算法的同学都知道有一种算法可以用于外部排序——对,那就是归并排序,因此我们可以使用归并排序对这n多个小文件块进行排序,这样也能使用两次I/O完成数值的全排序。


内部排序然后外部归并排序.jpg


外部归并排序过程.jpg


如果你理解了上面的东西,让我们再来做进一步思考:如果把时间变成分钟、秒级,应该如何做到呢?很显然在单机、硬件条件有限的情况下是绝无可能做到的,这也是单机在面临大数据问题的瓶颈所在(内存大小、I/O速度),这个时候集群分布式的优势就体现出来了。


分布式集群解决查找重复行问题.jpg


1.3 集群分布式处理大数据的辩证思考

  • 2000台机器真的比一台机器速度快吗?
  • 如果考虑分发上传文件的时间呢?
  • 如果考虑每天都有1T数据的产生呢?
  • 如果增量了一年,最后一天计算数据呢?

让我们对上述问题进行逐一解答,首先2000台机器不一定比一台机器速度快,如果只有1T的数据需要处理,那么由于集群分布式需要先将文件分发上传到2000台机器中,这个过程消耗的网卡I/O(网络I/O比磁盘I/O速度还要慢)传输时间是非常多的,因此这种情况下并不能体现出集群分布式的优势。但是如果考虑每天都会有1T的数据产生,这些数据增量了一年,这个时候集群分布式在处理这些数据的计算时的长处就能充分发挥出来了。在处理增量数据时,集群分布式处理数据的时长并不会随着数据量的增长而有着明显的增长,但是单机在数据量逐渐增长的情况下处理数据所耗费的时间会越来越多。数据量越大,集群分布式的优势就会越明显。

1.4 结论

总而言之,从上述的分析我们可以得知,大数据技术关注的重心主要有下面几点:

  • 分而治之
  • 并行计算
  • 计算向数据移动
  • 数据本地化读取

2 Hadoop初识

2.1 Hadoop 之父 Doug Cutting

Doug Cutting是一位软件设计师,也是开源搜索技术的倡导者和创造者。他创建了Lucene,并与Mike Cafarella一起创建了Nutch,这两个都是开源搜索技术领域的项目,这些项目现在由Apache Software Foundation管理。Cutting和Cafarella也是Apache Hadoop的共同创始人。                                                 -- 摘自维基百科

  • Hadoop的发音是 [hædu:p]
  • Cutting儿子对玩具小象的昵称
  • Nutch
  • Lucene
  • Avro
  • Hadoop

2.2 Hadoop的时间简史

  • 《The Google File System 》 2003年
  • 《MapReduce: Simplified Data Processing on Large Clusters》 2004年
  • 《Bigtable: A Distributed Storage System for Structured Data》 2006年
  • Hadoop由 Apache Software Foundation 于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。
  • 2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目中。
  • Cloudera公司在2008年开始提供基于Hadoop的软件和服务。
  • 2016年10月hadoop-2.6.5
  • 2017年12月hadoop-3.0.0
  • hadoop.apache.org

2.3 Hadoop项目/生态

Hadoop项目包含了这些模块:

  • Hadoop Common:给其他Hadoop模块提供支撑的基础功能类库。
  • Hadoop Distributed File System (HDFS™):提供对应用程序数据的高吞吐量访问的分布式文件系统。
  • Hadoop YARN:作业调度和集群资源管理框架。
  • Hadoop MapReduce:基于YARN的大型数据集并行处理系统。
  • Hadoop Ozone: Hadoop的对象存储。

Apache中其他与Hadoop相关的项目包括:

  • Ambari™:一个基于Web的工具,用于配置,管理和监控Hadoop集群,其中包括对Hadoop HDFS,Hadoop MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。
  • Avro™:数据序列化系统。
  • Cassandra™:可扩展的多主数据库,没有单点故障。
  • Chukwa™:用于管理大型分布式系统的数据收集系统。
  • HBase™:可扩展的分布式数据库,支持大型表的结构化数据存储。
  • Hive™:提供数据汇总和即席查询的数据仓库基础设施。
  • Mahout™: 可扩展的机器学习和数据挖掘库。
  • Pig™:用于并行计算的高级数据流语言和执行框架。
  • Spark™:用于Hadoop数据的快速通用计算引擎。Spark提供了一种简单而富有表现力的编程模型,该模型支持广泛的应用程序,包括ETL,机器学习,流处理和图形计算。
  • Tez™:一个基于Hadoop YARN的通用数据流编程框架,该框架提供了强大而灵活的引擎来执行任意DAG任务,以处理批处理和交互用例的数据。Hadoop生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)都采用了Tez,以取代Hadoop™MapReduce作为基础执行引擎。
  • ZooKeeper™:面向分布式应用程序的高性能协调服务。

2.4 大数据生态

Cloudera官网:https://www.cloudera.com/

Cloudera’s Distribution Including Apache Hadoop(CDH)是Apache Hadoop和相关项目中最完整的,经过测试的和最受欢迎的发行版。

  • hadoop-2.6.0+cdh5.16.1
  • hbase-1.2.0+cdh5.16.1
  • hive-1.1.0+cdh5.16.1
  • spark-1.6.0+cdh5.16.1

Cloudera大数据生态.jpg

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
1月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
151 6
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
65 2
|
19天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
68 2
|
20天前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第26天】本文详细探讨了Hadoop与Spark在大数据处理中的协同作用,通过具体案例展示了两者的最佳实践。Hadoop的HDFS和MapReduce负责数据存储和预处理,确保高可靠性和容错性;Spark则凭借其高性能和丰富的API,进行深度分析和机器学习,实现高效的批处理和实时处理。
58 1
|
1月前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
58 1
|
1月前
|
存储 分布式计算 资源调度
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(一)
75 5
|
1月前
|
SQL 分布式计算 大数据
大数据平台的毕业设计01:Hadoop与离线分析
大数据平台的毕业设计01:Hadoop与离线分析
104 0
|
1月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
7天前
|
存储 分布式计算 数据挖掘
数据架构 ODPS 是什么?
数据架构 ODPS 是什么?
61 7
|
7天前
|
存储 分布式计算 大数据
大数据 优化数据读取
【11月更文挑战第4天】
20 2