大数据开发之Hadoop--(一)了解大数据开发

为啥需要大数据开发

从名字应该能够知道,这项技术是专门针对海量数据进行的,那么什么场景下会出现海量的数据呢?

首先引入一些简单的问题:

  • 现在有一个文件,一行一个单词,需要统计出哪个单词出现的次数最多?
  • 现在有两个文件,文件内容都是一行对应一句子,可以保证的是单个文件内部不会出现相同的句子,现在需要找出两个文件中的句子交集,即在两个文件中都出现的句子。
  • 现在有一条句子,想知道这条句子有没有在一个文件中出现过?

对于以上问题,当文件的的大小都不大的时候(也就是数据量不大),我们能够简单的写一段程序进行处理即可,但是现在就是会出现数据量超大的情况:

  1. 大到内存都加载不了整个文件的时候,怎么办?
    (1) 加内存虽然可以解决目前的问题,但是如果这个数据不是固定不变的,会随着时间越来越多这种解决方案就需要被pass!
    (2) 那有没有其他处理的办法?当然有!如果我们对数据的处理时间没有要求,那么我们可以每次加载一定量的数据进行处理,最后把每次处理的结果进行汇总。但是往往我们希望的是能够快速的处理数据,所以这种方案也是不可行的!
  2. 数据量太大了,怎么来提升处理速度?
    (1) 上算法伺候行不行?优化处理的算法至线性复杂度,线性不行就优化到logn行不行?现在处理的数据量有的时候会达到PB级别,并且不是所有情况都可以优化到logn的情况,咱也不是神是吧!所以这种方法针对有些情况下是可以有效果的,比如按顺序存储然后二分查找定位这种任务的时候,但是并不是所有任务都可以按顺序存储,也不是所有任务都是查找任务呀!所以这种方法pass!

解决方案

上面的方法都只能解决一部分问题。那么时间和空间的问题怎么同时解决呢?我们清楚当把这个文件分成小文件进行处理的时候,其实每个小文件的处理不必有先后顺序,那么我们是不是意味着可以使用多线程来进行处理,当所有线程都处理完成后再进行汇总。但是!!!现在又会回到之前的问题,多个线程同时运行,同时请求内存空间加载文件,那么空间还是会不够的,怎么办?既然一台机器不行,那就多台呀!!!一台机器当成一个线程同时处理各自的小文件,最后当所有机器都执行完成之后,再进行汇总答案。这样内存空间问题、执行速度问题都解决了

从上面的内容能够清楚了定位大数据它的场景了,分别是大量,多样,高速,低价值密度,最最重要的就是大量了,可能动不动就会出现PB级别的数据量

那么传统的架构肯定无法处理这些情况,并且先人早就经历了我们的场景,所以轮子已经造了很多了,最著名的就是hadoop技术栈了

Hadoop生态

HDFS分布式文件系统

在大数据开发中,最最底层的就是数据的存储,在上面的问题中我们已经分析了处理大数据的场景应该用什么方法,那么这些数据存储肯定就不是单点的存储,而是通过分布式的方式进行存储,这部分轮子已经有人帮我们造好了,HDFS文件系统提供了集中管理多台服务器的数据文件的能力,从而解决了大数据开发过程中数据存储的问题。

MapReduce计算引擎

大数据开发不仅仅是数据的读写,还涉及到数据的处理。当数据量足够大的时候,我们肯定不能使用传统的方式去处理,为了提供分布式处理数据的能力,关于这部分能力的轮子就是MapReduce了,它是一种分布式并行处理的框架。

Hive数据仓库

并不是所有人都会使用MapReduce,往往大家都是从传统的场景下遇到了一些问题才使用大数据开发来解决这些问题,在传统的数据处理过程中,我们都是将数据存储在MySQL这种数据库内,然后编写SQL脚本来执行我们的任务,那么Hive数据仓库就可以理解成MySQL,我们只需要编写传统的SQL语句给Hive,HIve就会帮助我们翻译成分布式并行处理的脚本然后执行。

Spark/Flink

主要是因为通过Hive使用MapReduce达不到我们的要求,所以应运而生了Spark和Flink这类框架,它们的诞生主要是为了弥补MapReduce这类轮子的缺陷。

任务调度

有的时候我们需要指定某个时间执行某项任务,或者定期执行某个任务。所以为了解决这类需求,就有了Oozie / Azkaban这类任务调度组件,这类任务调度都是针对的离线调度任务。

yarn资源管理器

任何的任务调度或者是数据的读取(读到内存中)都会使用CPU、内存这类资源。当我们一个系统里面的任务数量足够多的时候,我们就需要通过手段来管理这些资源的分配问题,那么yarn就是这个轮子。

数据采集

数据不可能我们手搓一个程序写入到HDFS文件系统中,因此这类轮子主要负责的就是通过我们的程序接收到数据(采集到数据),然后将这些采集到的数据写入到HDFS中。Sqoop/Flume/DataX/Kafka

大数据的组件远远不止这些,比如随着机器学习这些内容的工作也融合到大数据平台中,也又一些针对机器学习的轮子。


标题:大数据开发之Hadoop--(一)了解大数据开发
作者:linrty
地址:https://blog.linrty.top/articles/2025/05/19/1747647841331.html

    评论
    0 评论
avatar

取消