大数据简介
基础概念
大数据指的是那些在传统软件工具下难以捕捉、管理和处理的数据集合。这些数据集合需要新的处理模式,以增强决策能力、洞察力和流程优化。大数据技术主要用来解决海量数据的存储和分析问题。
特点分析
大数据的五大特征(IBM提出):
- Volume:数据量庞大
- Velocity:数据处理速度快
- Variety:数据类型多样
- Value:数据价值密度低
- Veracity:数据真实性
发展历程
Google在2004年左右发表了三篇重要论文,分别介绍了GFS文件系统、MapReduce计算框架和BigTable数据库系统。这些论文奠定了大数据的基础理论和实践方法。
天才程序员Doug Cutting,也是Lucene和Nutch项目的创始人。他根据Google的论文原理,初步实现了类似GFS和MapReduce的功能,最终发展成了著名的Hadoop项目。随着时间推移,Hadoop生态系统不断完善,涵盖了实时计算、离线计算、NoSQL存储、数据分析和机器学习等多个领域。
从这一系列发展可以看出,技术和业务相互促进,业务需求推动技术不断进步。
Hadoop框架
Hadoop简介
以下是基于Hadoop2.X版本的描述,后续如果没有特别说明,均指Hadoop2.7版本。
Hadoop是由Apache基金会开发的分布式系统基础架构,提供了强大的数据存储和分析能力。作为Apache顶级项目,Hadoop包含了众多子项目,形成了一个庞大的生态系统。
框架特点
- 可靠性:Hadoop通过多副本存储和按位存储确保数据可靠。
- 扩展性:Hadoop可以轻松扩展到数千个节点,满足大规模数据处理需求。
- 高效性:基于MapReduce思想,实现高效的并行计算。
- 容错性:自动保存数据副本并能够自动恢复失败的任务。
组成结构
HDFS存储
- NameNode:存储文件的元数据,如文件名、目录、创建时间、权限和副本数。
- DataNode:负责存储文件块数据及与数据块ID的映射关系。
Yarn调度
- 负责资源管理和任务调度,将系统资源分配给不同的应用程序,并调度任务在不同的集群节点上执行。
MapReduce计算
- 将计算过程分为两个阶段:Map阶段并行处理输入数据,Reduce阶段对Map结果进行汇总。
大数据技术栈
Kafka中间件
- 开源组织:Apache软件基金会
- 应用场景:Kafka是一种高吞吐量的分布式发布订阅消息系统,通过磁盘数据结构实现消息的持久化,即使存储数以TB的消息也能保持长时间的稳定性能。Kafka支持每秒处理数百万条消息,并可以通过服务器和消费者集群来分区消息。此外,Kafka还支持Hadoop并行数据加载。
Flume日志系统
- 开源组织:Cloudera公司
- 应用场景:Flume是一个高可用、高可靠的分布式日志采集、聚合和传输系统。Flume支持多种数据发送方,用于采集数据,并提供简单的数据处理和传输功能。
Sqoop同步工具
- 开源组织:Apache软件基金会
- 应用场景:Sqoop是一款开源工具,主要用于在Hadoop、Hive和传统数据库之间进行数据传输。它可以将关系型数据库(如MySQL、Oracle)中的数据导入到Hadoop的HDFS中,也可以将HDFS中的数据导出到关系型数据库中。
HBase数据库
- 开源组织:Apache软件基金会
- 应用场景:HBase是一个分布式的、面向列的开源数据库,提供类似于Google Bigtable的能力。HBase适合非结构化数据的存储,并采用基于列的存储方式,而不是基于行的存储。
Storm实时计算
- 开源组织:Apache软件基金会
- 应用场景:Storm用于实时计算,可以对数据流进行连续查询,并将结果以流的形式输出给用户。Storm简单易用,可以与任何编程语言配合使用。
Spark计算引擎
- 开源组织:Apache软件基金会
- 应用场景:Spark是一款大规模数据处理的快速通用计算引擎,具备Hadoop MapReduce的优点,但不同之处在于它可以将中间结果保存在内存中,从而减少了对HDFS的读写操作,更适合数据挖掘和机器学习等需要迭代的算法。
R语言
- 开源组织:R项目
- 应用场景:R是一种用于统计分析和绘图的语言和操作环境。R是一个自由、开源的软件,广泛应用于统计计算和统计制图。
Hive数仓工具
- 开源组织:Apache软件基金会
- 应用场景:Hive是基于Hadoop的一个数据仓库工具,用于数据抽取、转换和加载。Hive可以将结构化的数据文件映射为数据库表,并提供SQL查询功能,将SQL语句转换为MapReduce任务执行。
Oozie组件
- 开源组织:Apache软件基金会
- 应用场景:Oozie是一个管理Hadoop作业的工作流程调度系统,用于安排和管理复杂的作业流程。
Azkaban组件
- 开源组织:LinkedIn公司
- 应用场景:Azkaban是一个批量工作流调度器,用于按照特定顺序运行一组工作和流程。Azkaban通过键值对文件格式定义任务之间的依赖关系,并提供一个易于使用的Web界面来管理和跟踪工作流。
Mahout组件
- 开源组织:Apache软件基金会
- 应用场景:Mahout提供了一些经典的机器学习算法实现,旨在帮助开发者更便捷地构建智能应用。Mahout包括聚类、分类、推荐过滤和频繁项挖掘等功能。
ZooKeeper组件
- 开源组织:Apache软件基金会
- 应用场景:ZooKeeper是一个分布式协调服务,提供了配置维护、域名服务、分布式同步和组服务等功能。ZooKeeper是Hadoop和HBase的重要组件之一,常用于分布式应用的一致性服务。
技术栈分类
- 存储体系:Hadoop-HDFS、HBase、MongoDB、Cassandra
- 计算体系:Hadoop-MapReduce、Spark、Storm、Flink
- 数据同步:Sqoop、DataX
- 资源调度:YARN、Oozie、Zookeeper
- 日志收集:Flume、Logstash、Kibana
- 分析引擎:Hive、Impala、Presto、Phoenix、SparkSQL
- 集群监控:Ambari、Ganglia、Zabbix
相关源码和详细信息将持续更新。