Hadoop系列之大数据启蒙

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*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月前
|
存储 分布式计算 Hadoop
|
18天前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
68 0
|
24天前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
Hadoop入门基础(五):Hadoop 常用 Shell 命令一网打尽,提升你的大数据技能!
|
25天前
|
存储 SQL 分布式计算
Hadoop生态系统概述:构建大数据处理与分析的基石
【8月更文挑战第25天】Hadoop生态系统为大数据处理和分析提供了强大的基础设施和工具集。通过不断扩展和优化其组件和功能,Hadoop将继续在大数据时代发挥重要作用。
|
26天前
|
资源调度 分布式计算 Hadoop
揭秘Hadoop Yarn背后的秘密!它是如何化身‘资源大师’,让大数据处理秒变高效大戏的?
【8月更文挑战第24天】在大数据领域,Hadoop Yarn(另一种资源协调者)作为Hadoop生态的核心组件,扮演着关键角色。Yarn通过其ResourceManager、NodeManager、ApplicationMaster及Container等组件,实现了集群资源的有效管理和作业调度。当MapReduce任务提交时,Yarn不仅高效分配所需资源,还能确保任务按序执行。无论是处理Map阶段还是Reduce阶段的数据,Yarn都能优化资源配置,保障任务流畅运行。此外,Yarn还在Spark等框架中展现出灵活性,支持不同模式下的作业执行。未来,Yarn将持续助力大数据技术的发展与创新。
27 2
|
1月前
|
分布式计算 Hadoop 大数据
Spark 与 Hadoop 的大数据之战:一场惊心动魄的技术较量,决定数据处理的霸权归属!
【8月更文挑战第7天】无论是 Spark 的高效内存计算,还是 Hadoop 的大规模数据存储和处理能力,它们都为大数据的发展做出了重要贡献。
62 2
|
22天前
|
SQL 分布式计算 数据可视化
基于Hadoop的大数据可视化方法
【8月更文第28天】在大数据时代,有效地处理和分析海量数据对于企业来说至关重要。Hadoop作为一个强大的分布式数据处理框架,能够处理PB级别的数据量。然而,仅仅完成数据处理还不够,还需要将这些数据转化为易于理解的信息,这就是数据可视化的重要性所在。本文将详细介绍如何使用Hadoop处理后的数据进行有效的可视化分析,并会涉及一些流行的可视化工具如Tableau、Qlik等。
54 0
|
30天前
|
分布式计算 Hadoop 大数据
大数据处理框架在零售业的应用:Apache Hadoop与Apache Spark
【8月更文挑战第20天】Apache Hadoop和Apache Spark为处理海量零售户数据提供了强大的支持
34 0
|
14天前
|
存储 大数据 数据挖掘
【数据新纪元】Apache Doris:重塑实时分析性能,解锁大数据处理新速度,引爆数据价值潜能!
【9月更文挑战第5天】Apache Doris以其卓越的性能、灵活的架构和高效的数据处理能力,正在重塑实时分析的性能极限,解锁大数据处理的新速度,引爆数据价值的无限潜能。在未来的发展中,我们有理由相信Apache Doris将继续引领数据处理的潮流,为企业提供更快速、更准确、更智能的数据洞察和决策支持。让我们携手并进,共同探索数据新纪元的无限可能!
59 11
|
19天前
|
存储 分布式计算 大数据
MaxCompute 数据分区与生命周期管理
【8月更文第31天】随着大数据分析需求的增长,如何高效地管理和组织数据变得至关重要。阿里云的 MaxCompute(原名 ODPS)是一个专为海量数据设计的计算服务,它提供了丰富的功能来帮助用户管理和优化数据。本文将重点讨论 MaxCompute 中的数据分区策略和生命周期管理方法,并通过具体的代码示例来展示如何实施这些策略。
51 1

热门文章

最新文章