大数据解决什么问题 ?

大数据解决什么问题 ?

几乎所有的教程都会告诉你, 大数据解决了TB以及PB级别数据存储与运算的问题,但是如果仅仅这么解释很难说这是根本原因, 因为我们有理由相信一个技术的兴起必定是解决了此前技术的一些痛点,在微服务中,大数据量解决方案可以分为如下几个方面:

业务层:根据业务场景对数据存储进行划分

DB层:主从、主备,数据分片,分库分表

数据分片:在进行了上面两点后, 如果还涉及大数据量,可以根据地理区域进行进一步的划分,下面仅仅从数据存储角度讲解:

上面仅仅是对DB数据层做了一个拆分, 如果发现服务请求数据量较大,可以先进行数据库集群搭建,常见的例如主备、主从,如果依旧难以达到性能要求,可以从业务的角度进行拆分,例如将订单、物流、用户信息等分别存储在不通的数据库里,如果这种情况下依旧有较大数据量,那么可以根据地理区域拆分,将不通地理区域的数据存储在不同的数据库中,这种情况下,我们的算力资源以及存储资源应该是所有节点之和,初一看与大数据的HDFS思想很相像,毕竟数据能正常被存储的前提条件就是:

\[\sum_{node=1}^{n}{DB_{node}} >\sum_{node=1}^{n}{Data_{n}} \]

也就是数据存储容量大于数据量,这个角度来看,说大数据解决了大数据量存储的问题难以服众,下面看看是否是解决了大数据量计算的问题:

我们先假设一个场景:

数据库中一个info表里存在两条一模一样的数据,请将其用最快的速度找出来:

Name sex hobby
张三
张三
...... ...... ......

伟大的SQL:

select  l.name,l.sex,l.hobby from info l group by l.l.name,l.sex,l.hobby having count(*) >1

问题: 性能如何,会不会内存溢出?分库分表了咋办?=> 无解

那么需要在内存中对数据进行处理,最简单的就是进行$$Hash$$计算:

哈希计算,时间复杂度$$O_n$$,可以解决分库分表问题,那么能解决性能问题吗?

这儿就涉及到内存与磁盘的性能瓶颈, 经查二者性能如下:

机械硬盘:$$300M/s≈0.3GB/S$$

内存:DDR5/6400MHz

\[V_{ddr5}=\frac{6400MH_Z * 64bit}{8*10^3}=51.2GB/S \]

也就是内存速度大概是硬盘的200倍左右,假设现在要在 $$1PB(10^3TB)$$中寻找两条相同的数据, 那么读数据消耗的时间为:

\[T=\frac{10^9MB}{300M/S*60S/min}=\frac{10^6}{18}min≈5*10^4min=833h \]

即使是$$1TB$$数据,也需要$$0.8h$$可以发现这是难以忍受的,现在为了方便讨论,假设是1TB数据,那么有没有办法可以把这个速度提起来呢?

简单来说就是分而治之 !分段并行哈希计算。

分而治之

上面的例子里, 可以根据数据量分段,利用多台机器同时跑,体现的计算机思想:分而治之,也类似归并的思想,简单来说就是对于1~100的数据

前面 20%交由第一台机器,后20%交给第二台机器,依次类推,可以用5台机器来做这个事情。

上图中,对于海量的数据,我们需要将其分配在我们的多个节点中,想让多节点同时运行我们我们想进行的计算程序(Hash),这也就是大数据的基础框架Hadoop所做的事情

大数据技术的特点

  • 分而治之

  • 并行计算

  • 计算向数据移动

  • 数据本地化读取

Hadoop是什么?

根据官网,我们可以得知hadoop主要包含两方面内容:

一:分布式文件管理系统HDFS

The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems are significant. HDFS is highly fault-tolerant and is designed to be deployed on low-cost hardware. HDFS provides high throughput access to application data and is suitable for applications that have large data sets. HDFS relaxes a few POSIX requirements to enable streaming access to file system data. HDFS was originally built as infrastructure for the Apache Nutch web search engine project. HDFS is part of the Apache Hadoop Core project.

Hadoop分布式文件系统(HDFS)是一个分布式文件系统,设计用于在商用硬件上运行。它与现有的分布式文件系统有许多相似之处。但是,与其他分布式文件系统的差异是显着的。HDFS具有高度容错性,旨在部署在低成本硬件上。HDFS 提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的。HDFS是Apache Hadoop Core项目的一部分。

二:分布式计算引擎MapReduce

Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.

Hadoop MapReduce是一个软件框架,用于轻松编写应用程序,这些应用程序以可靠,容错的方式在大型商品硬件集群(数千个节点)上并行处理大量数据(数TB数据集)。

A MapReduce job usually splits the input data-set into independent chunks which are processed by the map tasks in a completely parallel manner. The framework sorts the outputs of the maps, which are then input to the reduce tasks. Typically both the input and the output of the job are stored in a file-system. The framework takes care of scheduling tasks, monitoring them and re-executes the failed tasks.

MapReduce作业通常将输入数据集拆分为独立的块,这些块由map任务以完全并行的方式处理。框架对映射的输出进行排序,然后将其输入到reduce任务中。通常,作业的输入和输出都存储在文件系统中。该框架负责调度任务,监视它们并重新执行失败的任务

Typically the compute nodes and the storage nodes are the same, that is, the MapReduce framework and the Hadoop Distributed File System (see HDFS Architecture Guide) are running on the same set of nodes. This configuration allows the framework to effectively schedule tasks on the nodes where data is already present, resulting in very high aggregate bandwidth across the cluster.

通常计算节点和存储节点是相同的,也就是说,MapReduce框架和Hadoop分布式文件系统(参见HDFS架构指南)在同一组节点上运行。此配置允许框架在已存在数据的节点上有效地计划任务,从而在整个集群中产生非常高的聚合带宽。

The MapReduce framework consists of a single master ResourceManager, one worker NodeManager per cluster-node, and MRAppMaster per application (see YARN Architecture Guide).

MapReduce框架由单个主资源管理器,每个集群节点一个工作节点管理器和每个应用程序的MRAppMaster组成(参见YARN架构指南)。

通过官网的描述, 我们可以确定的是以下几点;

1、HDFS是一个分布式文件系统 => 意味着微服务间的技术框架在这儿都可能适用,例如网络通讯、选举、主备、持久化等

2、HDFS具有高度容错性以及高吞吐量 => 意味着可能追求CAP中的AP

3、放宽了POSIX要求 => POSIX是什么?

4、HDFS支持流式访问

5、对于MapReduce,可靠,容错的方式并行处理大量数据

6、对输入的数据拆分成独立的split

7、对split进行Map映射,然后对数据进行排序

8、将排序后的结果进行Reduce计算

9、输入和输出都存储在文件系统中 ==> HDFS

10、负责调度任务,监视

带着上面的关注点,我们开始Hadoop学习之路。

posted @ 2023-07-04 14:05  等不到的口琴  阅读(175)  评论(0编辑  收藏  举报