大数据框架能处理传统计算技术所无法处理的大型数据集。它不是单一的技术或工具,而是涉及的业务和技术的许多领域。
目前主流的三大分布式计算系统分别为 Hadoop、Spark 和 Strom:
The Apache? Hadoop? project develops open-source software for reliable, scalable, distributed computing.
Hadoop 被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。
Hadoop 使用 Java 编写,允许分布在集群,是专为从单一服务器到上千台机器的扩展,每个机器都可以提供本地计算和存储,即 Hadoop 就是一个分布式计算的解决方案。
Hadoop 可以编写和运行分布式应用来处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。
Hadoop = HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理)。Hadoop 的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为 key/value(key/value 是基本数据单元)。用函数式编程(Mapreduce)代替 SQL。SQL 是查询语句,而 Mapreduce 则是使用脚本和代码。不过对于习惯使用 SQL 的,Hadoop 也有开源工具 Hive 代替。
案例:
假如我有一个 100M 的数据库备份的 sql 文件,我现在想在不导入到数据库的情况下直接用 grep 操作通过正则过滤出我想要的内容。例如:某个表中含有相同关键字的记录。有几种方式,一种是直接用 linux 的命令 grep;还有一种就是通过编程来读取文件,然后对每行数据进行正则匹配得到结果好了现在是 100M 的数据库备份。
上述两种方法都可以轻松应对。那么如果是 1G,1T 甚至 1PB 的数据呢,上面 2 种方法还能行得通吗?答案是不能。毕竟单台服务器的性能总有其上限。那么对于这种超大数据文件怎么得到我们想要的结果呢?
解决方案就是分布式计算,分布式计算的核心就在于利用分布式算法把运行在单台机器上的程序扩展到多台机器上并行运行,从而使数据处理能力成倍增加。但是这种分布式计算一般对编程人员要求很高,而且对服务器也有要求。导致了成本变得非常高。
Hadoop 就是为了解决这个问题诞生的。Hadoop 可以很轻易的把很多 linux 的廉价 PC 组成分布式结点,然后编程人员也不需要知道分布式算法之类,只需要根据 mapreduce 的规则定义好接口方法,剩下的就交给 Haddop。它会自动把相关的计算分布到各个结点上去,然后得出结果。
例如上述的例子, Hadoop 要做的事:
那么原本可能需要计算好几天,在有了足够多的结点之后就可以把时间缩小到几小时之内。
Hadoop(2.x)架构:
MapReduce 是一个编程模型,封装了并行计算、容错、数据分布、负载均衡等细节问题,其原理是分治算法(Divide-and-Conquer)。
于是就有了分布式计算的方法:将大量的数据分成小份,每台机器处理一小份,多台机器并行处理,很快就能算完。
HDFS(Hadoop File System)是 Hadoop 的分布式文件存储系统。
HDFS 将大文件分解为多个 Block,每个 Block 保存多个副本,并提供容错机制,副本丢失或者宕机时自动恢复。
每个 Block 默认保存 3 个副本,64M 为 1 个 Block,并将 Block 按照 key-value 映射到内存当中。
对于数据采集主要分为三类,即结构化数据库采集、日志和文件采集、网页采集。
对于结构化数据库,采用 Sqoop 是合适的,可以实现结构化数据库中数据并行批量入库到 HDFS 存储。
对于网页采集,前端可以采用 Nutch,全文检索采用 Lucense,而实际数据存储最好是入库到 Hbase 数据库。
对于日志文件的采集,现在最常用的仍然是 Flume 或 Chukwa,但是如果对于日志文件数据需要进行各种计算处理再入库的时候,往往 Flume 并不容易处理,这也是为何可以采用 Pig 来做进一步复杂的 DataFlow 和 Process 的原因。
数据采集类似于传统的 ETL 等工作,因此传统 ETL 工具中的数据清洗、转换、调度等都是相当重要的内容。这一方面是要基于已有的工具,进行各种接口的扩展以实现对数据的处理和清洗,一方面是加强数据采集过程的调度和任务监控。
在这里先谈三种场景下的三种存储和应用方式,即 Hive,Impala、Hbase,其中三者都是基于底层的 HDFS 分布式文件系统。
如何对上面三种模式提供共享一致的数据存储和管理服务,HCatalog 是基于 Apache Hadoop 之上的数据表和存储管理服务,提供统一的元数据管理。不需要知道具体的存储细节当然是最好的,但是 Hcatalog 本身也还处于完善阶段,包括和 Hive、Pig 的集成。
对于 MapReduce 和 Zookeeper 本身就已经在 Hbase 和 Hive 中使用到了。如 Hive 的 HQL 需要通过 MapReduce 解析和合并等。
数据的价值越来越被企业重视,被称为是 21 世纪的石油。
当存储了大规模的数据,我们要干什么呢,当然是分析数据中的价值,Hadoop 的 MapReduce 主要用于离线大数据的分析挖掘,比如电商数据的分析挖掘、社交数据的分析挖掘、企业客户关系的分析挖掘等,最终的目标就是 BI(商业智能)了,以提高企业运作效率,实现精准营销及各个垂直领域的推荐系统、发现潜在客户等等。在这个数据化时代,每件事都会留下电子档案,分析挖掘日积月累的数据档案,我们就能理解这个世界和我们自己更多。
但 MR 编写代码复杂度高,且由于磁盘 I/O,分析结果周期长,现实世界中我们对数据分析的实时性要求越来越高,基于内存计算的 Spark 来了。Hadoop+Spark 正在替代 Hadoop+MR 成为大数据领域的明星,Cloudera 正在积极推动 Spark 成为 Hadoop 的默认数据处理引擎。
同时 Twitter 也推出了 Storm 用来解决实时热点查询和排序的问题。
原文:https://www.cnblogs.com/juno3550/p/14823160.html