数据容量单位:
1 byte = 8 bits
1 kilobyte (KB) = 1024 bytes
1 megabyte (MB) = 1024 KB
1 gigabyte (GB) = 1024 MB
1 terabyte (TB) = 1024 GB
1 petabyte (PB) = 1024 TB
1 exabyte (EB) = 1024 PB
1 zettabyte (ZB) = 1024 EB
1 yottabyte (YB) = 1024 ZB
.
当前大数据技术的基础是由谷歌首先提出的
.
智能健康手环的应用开发,体现了传感器的数据采集技术的应用。
.
Linux 发行版本:Ubuntu、Centos、RedHat Enterprise Linux
Mac 不是 Linux 发行版本
.
数据产生方式经历了从传统模式到数字化模式、离线数据到在线数据、单一数据到多样化数据、结构化数据到非结构化数据、个人数据到群体数据的变革。
.
大数据的特征通常被总结为4V:数据量(Volume)、数据处理速度(Velocity)、数据多样性(Variety)和数据真实性(Veracity)。
.
大数据构成:
- 结构化数据:结构化数据是指以表格形式存储的数据,如数据库中的数据,具有明确的数据模式和格式,易于存储和处理。
- 非结构化数据:非结构化数据是指没有明确数据模式和格式的数据,如文本、图像、音频、视频等,具有较高的复杂性和多样性,难以处理和分析。
- 半结构化数据:半结构化数据介于结构化数据和非结构化数据之间,如XML、JSON等数据格式,具有一定的结构和格式,但也存在一定的复杂性和多样性。
- 流式数据:流式数据是指以数据流的形式产生和传输的数据,如物联网传感器数据、社交网络数据等,具有高速、高量、高变、高维等特点,需要实时处理和分析。
- 元数据:元数据是描述数据的数据,如数据来源、数据格式、数据结构等,可以帮助理解数据的含义和价值,为数据的管理、处理和分析提供支持。
.
大数据相关环节:
- 数据采集:在数据采集阶段,需要从各种来源(如传感器、社交媒体、日志文件等)收集大量的数据,并将其存储在数据仓库或数据湖中。常用的数据采集技术包括Kafka、Flume、Logstash等。
- 数据清洗:在数据清洗阶段,需要对采集到的数据进行去重、过滤、转换、归一化等处理,以便后续的数据分析。常用的数据清洗技术包括Hadoop MapReduce、Pig、Spark等。
- 数据存储:在数据存储阶段,需要将清洗后的数据存储在数据仓库或数据湖中,以便后续的数据处理和分析。常用的数据存储技术包括Hadoop HDFS、HBase、Cassandra、MongoDB等。
- 数据处理:在数据处理阶段,需要对存储在数据仓库或数据湖中的数据进行处理和分析,以提取有价值的信息。常用的数据处理技术包括Hadoop MapReduce、Spark、Hive、Impala等。
- 数据可视化:在数据可视化阶段,需要将处理后的数据以图表、报表等形式展示出来,以便用户进行交互式的分析和探索。常用的数据可视化技术包括Tableau、D3.js、Echarts等。
- 数据挖掘:在数据挖掘阶段,需要利用机器学习、人工智能等技术,对数据进行深度挖掘,以发现数据中隐藏的规律和趋势。常用的数据挖掘技术包括TensorFlow、Scikit-learn、Weka等。
.
大数据计算模式:
.
大数据产业链环节包括以下几个方面:
- 数据采集:数据采集是大数据产业链的第一环节,通过各种手段收集数据,包括传感器、监控设备、社交网络、网站等多种数据源。
- 数据存储:数据存储是将采集到的大数据进行存储的环节,包括Hadoop分布式文件系统(HDFS)、NoSQL数据库等多种存储方式。
- 数据处理:数据处理是对大数据进行分析、处理和挖掘的过程,包括数据清洗、数据集成、数据转换、数据分析、机器学习等多个方面。
- 数据应用:数据应用是将处理后的大数据应用到实际场景中,包括数据可视化、数据挖掘、智能推荐、预测分析、决策支持等多个方面。
- 产业应用:产业应用是将数据应用到各个行业和领域中,包括金融、医疗、教育、交通、制造业等多个领域。
- 数据服务:数据服务是为企业和机构提供数据分析、处理、挖掘和应用等服务的环节,包括数据处理平台、数据分析工具、数据安全服务等多个方面。
- 人才培养:人才培养是培养大数据人才、支撑大数据产业发展的环节,包括大数据人才培训、大数据课程开设、大数据人才培养基地建设等多个方面。
.
大数据与云计算、物联网的关系:
大数据、云计算、物联网是当前信息技术发展的三大趋势,之间存在紧密的关系和互相促进作用。
- 大数据技术是处理海量数据核心技术,通过分布式存储和计算,实现数据的高效处理和分析。
- 物联网技术收集和整合各种设备和传感器产生的数据,提供实时数据流和大量数据,为大数据技术提供数据源。
- 云计算技术提供高效的计算和存储资源,可以帮助大数据和物联网应用快速部署和扩展,降低成本和提高效率。
.
Hadoop运行模式有3种: 本地模式、伪分布、全分布
.
Doug Cutting是Hadoop的作者之一
.
start-dfs.sh 是启动Hadoop分布式文件系统(HDFS)的命令,该命令会启动HDFS的各个组件,包括NameNode、DataNode、SecondaryNameNode等。
.
Hadoop具有以下几个特性:
- 分布式存储:Hadoop具有分布式存储的特性,可以将大规模数据分散存储在多台计算机上,从而实现数据的高可靠性和高容错性。
- 分布式计算:Hadoop采用MapReduce分布式计算框架,可以将大规模数据分片处理,并通过多台计算机并行计算,从而实现计算速度的大幅提升。
- 高扩展性:Hadoop可以通过添加更多的计算节点来扩展计算和存储能力,从而适应不断变化的数据存储和计算需求。
- 高可靠性:Hadoop通过副本机制和数据块校验和等技术,保证数据的高可靠性和完整性。
- 高容错性:Hadoop可以自动处理节点故障和数据损坏等问题,从而实现系统的高容错性。
- 跨平台:Hadoop支持跨平台部署,可以在多种操作系统上运行,如Linux、Windows等。
- 开放源代码:Hadoop是一个开源的软件,用户可以自由地使用、修改和分发,且拥有庞大的开源社区支持。
- 生态系统丰富:Hadoop生态系统中包含了许多相关工具和组件,如Hive、HBase、Spark等,可以帮助用户更加方便地进行大数据处理和分析。
.
Hadoop的核心组件:
- HDFS:Hadoop分布式文件系统,用于存储大规模数据集。
- MapReduce:Hadoop分布式计算框架,用于处理大规模数据集。
- YARN:Hadoop资源管理系统,用于管理计算集群的资源分配和任务调度。
- HBase:Hadoop生态系统中的分布式NoSQL数据库,用于存储非结构化和半结构化数据。
- Hive:Hadoop生态系统中的数据仓库系统,用于查询和分析大规模数据集。
- Spark:基于内存计算的分布式计算框架,在大规模集群上高速的数据处理和分析,支持多种计算模式和数据源。
.
5个常用的Hadoop生态系统组件:
- Hive:基于Hadoop的数据仓库工具,支持SQL语言。
- HBase:分布式、可扩展的NoSQL数据库,适用于存储海量非结构化数据。
- Spark:快速、通用的大数据处理引擎,比Hadoop更快。
- Flume:分布式的日志收集、聚合和传输系统,用于采集海量的日志数据。
- ZooKeeper:高性能、分布式的协调服务,用于管理Hadoop集群中的各种应用程序。
.
Hadoop安装步骤:
- 下载Hadoop:从Hadoop官网或镜像站点下载Hadoop安装包,选择对应版本和平台。
- 解压 Hadoop 至本地。
- 安装Java:Hadoop是基于Java开发的,需要安装Java开发环境(JDK)。
- 配置SSH免密登录:在Hadoop集群中,各节点之间需要进行SSH免密登录,以便实现集群的自动化管理和运行。可以使用ssh-keygen命令生成公钥和私钥,将公钥添加到各节点的authorized_keys文件中,实现免密登录。
- 配置Hadoop环境变量:在各节点上配置Hadoop的环境变量,将Hadoop安装目录添加到PATH环境变量中。
- 配置Hadoop集群:编辑Hadoop的配置文件,包括core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml等,设置Hadoop集群的各项参数,如HDFS的数据存储路径、MapReduce的任务调度方式等。
- 格式化HDFS:在Hadoop集群中一个节点上运行hdfs namenode -format命令,格式化HDFS文件系统。
- 启动Hadoop集群:启动Hadoop集群的各个节点,包括NameNode、DataNode、SecondaryNameNode等。可以使用start-dfs.sh和start-yarn.sh命令启动Hadoop集群。
- 验证Hadoop集群:在浏览器中输入Hadoop集群的IP地址和端口号,可以查看Hadoop的Web界面,包括HDFS的状态、MapReduce的任务信息等。
.
HDFS中的Block默认保存3份
.
HDFS 中负责存储数据的进程是 DataNode
NameNode 是 HDFS 的管理节点,负责管理文件系统的命名空间和客户端对文件的访问。
SecondaryNameNode 是 NameNode 的备份节点,定期合并和压缩 NameNode 的编辑日志文件,以减少NameNode 的内存占用。
JobTracker 是 MapReduce 的管理节点,负责调度和监控 MapReduce 任务的执行。
.
在CentOS中,可以使用jps命令来查看当前Java进程
使用ps命令结合grep命令来查看Java进程,命令为:ps -ef | grep java。
hostname命令用于查看主机名
source命令用于执行脚本文件。
.
HDFS有两类节点:
- NameNode负责管理文件系统的命名空间和数据块的映射表,处理客户端的请求。
- DataNode存储实际的数据块,并向NameNode发送心跳信息更新数据块的状态。二者协作构成了HDFS分布式文件系统的核心。
.
HDFS的主要特点包括:
- 高容错性:HDFS将数据块复制到多个节点上,以保证数据的可靠性和容错性。即使某个节点失效,数据仍然可以通过其他副本进行恢复。
- 适合大数据处理:HDFS适合存储大规模数据,支持海量数据的存储和高效处理。HDFS采用分布式存储和处理的方式,可以通过横向扩展来处理大量数据。
- 流式数据访问:HDFS的设计目标之一是支持大规模数据的流式访问,能够快速地读写大文件和批处理作业。
- 高吞吐量:HDFS支持高并发读写操作,能够满足大规模数据处理的高吞吐量需求。
- 可扩展性:HDFS可以通过添加更多的节点来扩展存储和处理能力,支持动态扩容和缩容。
- 易于管理:HDFS提供了简单易用的命令行和Web界面,可以方便地进行管理和监控。
- 兼容性好:HDFS可以与其他Hadoop生态系统组件无缝集成,如MapReduce、Hive、Spark等。
.
HDFS的数据管理策略:
- 数据分块:HDFS将大文件分成多个块进行存储,每个块的大小通常为128MB,默认情况下每个块会被复制3次并存储在不同的数据节点上,以实现数据的容错和可靠性。
- 数据备份和恢复:在HDFS中,数据备份是通过数据副本实现的。当某个数据块的某个副本损坏或丢失时,HDFS会自动将其他副本复制到其他节点上,保证数据的可靠性和容错性。
- 数据位置管理:HDFS中的NameNode负责管理数据块的位置信息,包括数据块的存储位置、副本的数量等。NameNode会周期性地与DataNode通信,以保证数据块的位置信息及时更新。
- 数据访问优化:在HDFS中,数据块的位置信息存储在NameNode中,客户端可以通过与NameNode的交互得到数据块的位置信息,然后直接访问数据块所在的DataNode,以实现数据的快速访问。
.
MapReduce 程序并不只能用Java编写。
Map/Reduce 打包运行的命令:hadoop jar <MapReduce程序的jar包路径> <主类名> [参数列表]
.
Map/Reduce 主要思想:
分而治之是 MapReduce 的核心思想。
- Map 阶段和 Reduce 阶段。Map 阶段将输入数据映射为一组键值对,并进行初步加工和筛选;
- Reduce 阶段将 Map 阶段输出的键值对按照键值进行分组,并对每组数据进行聚合和汇总。
.
MapReduce 的主要优点包括:
- 高可扩展性:MapReduce 通过数据分块和分布式计算的方式,可以轻松地扩展到大规模的数据处理任务。
- 强大的容错性:MapReduce 的数据备份和恢复机制,可以在节点故障或其他异常情况下自动恢复,保证数据处理的可靠性和稳定性。
- 简单易用的编程模型:MapReduce 的编程模型简单易懂,易于开发和部署,同时可以使用多种编程语言实现。
- 高效的数据处理能力:MapReduce 的分布式计算方式,可以充分利用计算资源,实现高效的数据处理和分析。
- 可以与 Hadoop 生态系统无缝集成:MapReduce 是 Hadoop 生态系统中的核心组件之一,可以与其他组件无缝集成,如 Hive、Pig、Spark 等。
MapReduce 的局限性包括: - 不适合实时数据处理:MapReduce 的计算模型是基于批处理的,不适合实时数据处理,对于需要实时响应的应用场景,需要使用其他技术如流处理来实现。
- 程序开发和调试较困难:MapReduce 的编程模型相对较为简单,但对于复杂的数据处理任务,程序开发和调试仍然是一项挑战。
- 存储和计算分离导致 IO 开销较大:MapReduce 的计算过程是与数据存储分离的,需要进行大量的磁盘 IO 操作,导致计算效率较低。
- 任务调度不够灵活:MapReduce 的任务调度是由 Hadoop 框架自动完成的,对于一些需要自定义调度策略的任务,可能无法满足需求。
.
WordCount 程序的 MapReduce 执行流程如下:
- 输入数据被分成若干个块,并被分配给不同的 Map 任务进行处理。每个 Map 任务读取自己分配的数据块,将数据进行初步加工和筛选,输出一组键值对,其中键表示单词,值表示单词出现的次数。
- Map 输出的键值对被分组并排序,相同的键被分配到同一个 Reduce 任务进行处理。Reduce 任务读取自己分配的键值对,对所有具有相同键的值进行聚合和汇总,输出最终的结果,其中键表示单词,值表示单词出现的总次数。
.
YARN(Yet Another Resource Negotiator)是 Hadoop 2.x 中的一个重要组件,它是一种资源管理器和任务调度器,用于管理 Hadoop 集群中的资源和应用程序。YARN 的主要作用是将计算资源(CPU、内存等)与数据存储(HDFS)分离,实现更加灵活和高效的资源管理和任务调度。
YARN 的主要作用包括:
- 资源管理:YARN 负责管理整个集群的资源,包括计算资源和存储资源。它通过 ResourceManager 和NodeManager 两个组件来管理集群中的资源,ResourceManager 负责整个集群的资源分配和调度,NodeManager 负责单个节点上的资源管理和任务执行。
- 任务调度:YARN 通过 ApplicationMaster 来管理应用程序的生命周期,并协调各个任务的执行。ApplicationMaster 负责与 ResourceManager 协商资源分配和任务调度,并与 NodeManager 通信,监控任务的执行状态。
- 多租户支持:YARN 支持容器化应用程序,可以将不同的应用程序隔离在独立的容器中,实现多租户的资源管理和任务调度,从而提高集群资源的利用率和安全性。
- 扩展性和灵活性:YARN 的资源管理和任务调度是相互独立的,可以根据实际需求进行灵活配置和扩展,从而满足不同应用场景的需求。
.
YARN 相关的 Java 进程有两个:
- ResourceManager:是 YARN 集群的主节点,负责整个集群的资源管理和任务调度。它运行在 YARN 集群的主节点上,是一个 Java 进程。
- NodeManager:是 YARN 集群的从节点,负责单个节点上的资源管理和任务执行。它运行在每个 YARN 集群从节点上,是一个 Java 进程。
.
YARN 相关的配置文件主要包括:
这些配置文件通常位于 Hadoop 的安装目录下的 /etc/hadoop 目录中,用户可以根据实际需求进行修改和调整。在修改配置文件后,需要重新启动 YARN 集群,使配置生效。
- yarn-site.xml:YARN 的主要配置文件,包含了 YARN 的各种配置参数,如 ResourceManager 和 NodeManager 的配置、容器资源的配置、日志和调度器等参数。
- capacity-scheduler.xml:YARN 的调度器配置文件,用于配置 YARN 的调度策略和资源分配规则。
- mapred-site.xml:MapReduce 的配置文件,用于配置 MapReduce 的参数,如 Map 和 Reduce 任务的内存限制、输入输出格式等。
- core-site.xml:Hadoop 通用配置文件,用于配置 Hadoop 的核心参数,如 HDFS 的默认文件系统、副本数量等。
.
Hive 优点:
- 易于使用:Hive 的 SQL 语言非常类似于传统的关系型数据库,开发人员和数据分析师可以快速上手,不需要学习新的编程语言。
- 处理大规模数据:Hive 支持在 Hadoop 集群中处理大规模数据,可以处理 PB 级别的数据,具有良好的可扩展性。
- 支持自定义函数:Hive 支持自定义函数,可以根据实际需求编写自己的 SQL 函数。
- 易于集成:Hive 可以与其他 Hadoop 生态系统中的组件进行集成,如 HBase、Spark 等,可以实现更加复杂的数据处理任务。
Hive 缺点: - 性能较低:Hive 的查询性能相对较低,因为 Hive 需要将 SQL 语句转换为 MapReduce 任务执行,产生了较大的开销。
- 不支持实时查询:Hive 不支持实时查询,因为 Hive 的查询需要通过 MapReduce 任务执行,无法满足实时查询的要求。
- 不支持事务:Hive 不支持事务,因为 Hive 底层的 HDFS 也不支持事务。
.
Hive 与传统关系数据库的对比:
- 数据存储:传统关系数据库使用表格来存储数据,每个表格有固定的列和数据类型。而 Hive 使用 Hadoop 的分布式文件系统 HDFS 来存储数据,数据可以是结构化、半结构化或非结构化的。
- 数据处理:传统关系数据库使用 SQL 来处理数据,可以实现高效的数据操作和事务管理。而 Hive 使用类似于SQL 的 HiveQL 语言来处理数据,但是 Hive 的查询需要通过 MapReduce 任务执行,性能相对较低。
- 查询语言:传统关系数据库使用 SQL 语言来查询数据,支持复杂的查询、聚合和连接操作。Hive 也支持类似于SQL 的 HiveQL 语言,但是 HiveQL 的语法和 SQL 略有不同,且不支持一些高级特性。
- 可扩展性:传统关系数据库在处理大规模数据时存在一些限制,需要使用分布式数据库系统来扩展。而 Hive 可以在 Hadoop 集群中处理 PB 级别的数据,具有良好的可扩展性。
- 性能:传统关系数据库的性能通常高于 Hive,因为传统关系数据库通常使用索引等机制来提高查询性能,而Hive 查询需要通过 MapReduce 任务执行,性能相对较低。
.
Hive 的运行机制:
- 解析 HiveQL 语句:Hive 接收到用户提交的 HiveQL 语句后,首先对语句进行解析,生成对应的抽象语法树(AST)。
- 生成逻辑执行计划:Hive 将 AST 转换为逻辑执行计划,即生成执行 SQL 语句所需的各种操作符及其执行顺序。
- 生成物理执行计划:Hive 将逻辑执行计划转换为物理执行计划,即将各种操作符转换为 MapReduce 任务或 Tez 任务,生成对应的 DAG 执行图,以便在 Hadoop 集群中执行。
- 提交任务执行:Hive 将物理执行计划提交给 YARN 资源管理器,由 YARN 根据资源的可用情况进行任务调度,将任务分配给集群中的节点进行执行。
- 执行完成后返回结果:Hive 等待任务完成后收集任务的执行结果,将结果返回给用户。
.
Hive 内部表与外部表的区别:
- 存储位置:内部表的数据存储在 Hive 管理的目录中,而外部表的数据存储在外部文件系统中,如 HDFS、S3等。
- 数据管理:对于内部表,Hive 会自动管理表格的数据,包括数据的导入、导出和删除等操作。而对于外部表,数据的管理和维护需要由用户自行处理,Hive 只是对数据进行元数据管理,不会主动删除外部表关联的数据。
- 数据删除:对于内部表,删除表格时,Hive 会自动删除表格关联的数据。而对于外部表,删除表格时,Hive 只删除表格的元数据,不会删除外部文件系统中的数据。
- 数据导入:对于内部表,数据的导入需要使用 Hive 的 LOAD 操作或 INSERT 操作,将数据导入到 Hive 管理的目录中。而对于外部表,数据的导入可以直接将数据存储到外部文件系统中,Hive 会自动识别并管理数据。
.
HBase 底层数据存储依赖于 Hadoop 分布式文件系统(HDFS),数据计算依赖于 Hadoop 计算引擎,如MapReduce 和 Spark。服务协调依赖于 ZooKeeper 协调服务。
.
HBase 特点:
- 海量存储,存储大量的非结构化数据
- 列(簇)式存储,数据是基于列族进行存储的
- 高扩展性,通过动态增加节点来提高集群的存储能力
- 高并发,支持高并发的读写请求
- 稀疏,可以指定任意多的列,在列数据为空的情况下,不会占用存储空间
- 分布式的、面向列的NoSQL数据库
.
HBase 和关系数据库的比较:
- 存储模型:HBase 是以列族为基本存储单元的面向列存储数据库,不需要定义固定的表结构,可以动态添加列。而关系数据库是以表为基本存储单元的关系型数据库,需要定义固定的表结构。
- 数据查询:HBase 的查询主要基于行键和列族进行,不支持复杂的 SQL 查询操作,而关系数据库可以支持复杂的 SQL 查询操作,如聚合查询、连接查询等。
- 数据一致性:HBase 保证数据的强一致性,即每个客户端对同一个数据进行操作时,最终都会得到相同的结果,而关系数据库对数据的一致性要求相对较低。
- 扩展性:HBase 可以通过添加节点来扩展数据存储和计算能力,而关系数据库的扩展性较差,通常需要通过升级硬件来提升性能。
- 数据量:HBase 适用于海量数据的存储和查询,可以处理 PB 级别的数据,而关系数据库通常适用于中小型数据的存储和查询。
.
比较 HBase 和 Hive 异同:
相同:HBase 与 Hive 都是架构在 hadoop 之上的,都是用 HDFS 作为底层存储。
不同:
- Hive 是建立在 Hadoop 之上为了减少 MapReduce jobs 编写工作的批处理系统,HBase 是为了弥补 Hadoop 对实时操作的缺陷的项目 。总的来说,hive 是适用于离线数据的批处理,hbase 是适用于实时数据的处理。
- Hive 本身不存储和计算数据,它完全依赖于 HDFS 存储数据和 MapReduce 处理数据,Hive 中的表纯逻辑。
- hbase 是物理表,不是逻辑表,提供一个超大的内存 hash 表,搜索引擎通过它来存储索引,方便查询操作。
- 由于 HDFS 的不可随机读写,Hive 是不支持随机写操作,而 HBase 支持随机写入操作。
- HBase 只支持简单的键查询,不支持复杂的条件查询
.
NoSQL数据库的兴起是多种因素综合作用的结果,包括数据量和并发量的增加,非结构化数据的需求,云计算和大数据技术的发展以及系统架构的变化等。
.
NoSQL 数据库和关系型数据库的不同:
- 数据模型:关系型数据库采用表格模型,数据需要按照预定义的模式进行严格的关系建模;而 NoSQL 数据库采用多种数据模型,如文档、键值、列族、图形等,可以存储非结构化的数据。
- 数据一致性:关系型数据库具有强一致性,即对于同一数据的读写操作,在一定时间内保证读取的是最新的数据,但是会牺牲一定的性能;而 NoSQL 数据库通常采用最终一致性,即在一定时间内保证数据最终达到一致状态,可以提高系统的性能和可用性。
- 扩展性:关系型数据库的扩展性有限,只能通过垂直扩展增加硬件资源来提高性能;而 NoSQL 数据库支持水平扩展,可以通过增加节点来扩展系统的性能和存储容量。
- 事务支持:关系型数据库采用 ACID(原子性、一致性、隔离性、持久性)事务,能够保证数据的一致性和可靠性;而 NoSQL 数据库通常采用 BASE(基本可用、软状态、最终一致性)事务,注重系统的可用性和性能,对于数据的一致性要求较低。
- 数据库管理:关系型数据库具有成熟的数据库管理系统(DBMS),可以提供完善的管理和监控功能;而NoSQL 数据库由于数据模型的多样性,缺乏统一的管理系统。
.
NoSQL 数据库类型及代表作品:
- 键值存储数据库(Key-value Store):将数据存储为键值对形式,可以灵活地存储任意类型的数据。代表产品:Redis、Memcached、Riak 等。
- 文档数据库(Document Store):以文档形式存储数据,文档可以包含任意类型的数据。代表产品:MongoDB、Couchbase 等。
- 列族数据库(Column-family Store):将数据存储为列族形式,每个列族包含多个列,可以有效地存储大量的半结构化数据。代表产品:HBase、Cassandra 等。
- 图形数据库(Graph Database):将数据表示为节点和边的形式,适用于存储和处理复杂的关系型数据。代表产品:Neo4j、OrientDB 等。
- 搜索引擎(Search Engine):将数据存储为文档形式,可以通过全文搜索等方式进行查询。代表产品:Elasticsearch、Solr 等。
.
Sqoop 的主要功能:
Sqoop 是一个用于在 Apache Hadoop 和关系型数据库之间进行数据传输的工具,主要用于将关系型数据库中的数据导入到 Hadoop 中进行处理,或者将 Hadoop 中的数据导出到关系型数据库中进行分析和查询。
- 数据导入:Sqoop 可以将关系型数据库(如 MySQL、Oracle、PostgreSQL 等)中的数据导入到 Hadoop 中的HDFS(Hadoop Distributed File System)或 Hive 中进行存储和处理。可以通过 Sqoop 提供的命令行参数或配置文件指定导入的表、查询条件、输出格式和目标存储位置等。
- 数据导出:Sqoop 可以将 Hadoop 中的数据导出到关系型数据库中进行分析和查询。可以通过 Sqoop 提供的命令行参数或配置文件指定导出的表、查询条件、输出格式和目标数据库等。
- 数据转换:Sqoop 可以将导入的数据进行转换,以适应目标系统的数据格式和数据类型。例如,可以将日期类型转换为字符串类型,或者将列名转换为目标数据库中的命名规范。
- 并行处理:Sqoop 可以使用多个并行任务同时从关系型数据库中导入或导出数据,提高数据传输的效率和速度。
- 安全性控制:Sqoop 可以通过 Kerberos 等安全机制来保护数据传输的安全性,防止数据泄露和非法访问。
.
任务调度系统的主要作用如下:
任务调度系统是一种用于管理和调度计算机系统中各种任务的软件系统。它可以帮助用户在一定的时间范围内自动地执行预定的任务,并且可以对任务的执行情况进行监控和管理。
- 提高效率:任务调度系统可以自动化地执行重复性的任务,节省人力和时间成本,提高工作效率。
- 简化管理:任务调度系统可以对任务进行集中管理,包括任务的调度、启动、停止、监控和统计等,简化了管理工作。
- 提高可靠性:任务调度系统可以对任务进行自动化的故障处理和容错机制,保证任务的可靠性和稳定性。
- 提高灵活性:任务调度系统可以根据不同的任务需求进行灵活的调度和管理,满足不同场景下的需求。
常用的任务调度系统包括: - Apache Airflow:一个基于 Python 的开源任务调度系统,支持任务的编排、定时调度和监控等功能。
- Apache Oozie:一个基于 Java 的开源任务调度系统,支持 Hadoop 生态系统中的任务调度和编排。
- Apache NiFi:一个基于 Java 的开源数据流管理系统,支持数据的采集、处理和传输,在数据流管理方面具有很好的支持。
- Azkaban:一个基于 Java 的开源任务调度系统,提供了可视化的任务管理界面和多种任务类型的支持。
- Quartz:一个基于 Java 的开源任务调度框架,支持任务的定时调度和分布式任务的管理。
- Control-M:一个商业化的任务调度系统,具有较强的任务调度和管理功能,支持多种任务类型的调度。
.
数据可视化是将数据以图表、地图、仪表盘等形式呈现出来的过程,主要意义:
- 更好地理解数据:通过数据可视化,可以更加直观地理解数据的含义、趋势和规律,帮助用户更好地了解数据背后的信息。
- 发现数据关联性:通过数据可视化,可以发现数据之间的关联性和相互影响关系,帮助用户发现数据中的隐藏信息。
- 提高数据分析效率:通过数据可视化,可以快速地分析数据,识别异常值和趋势,帮助用户快速地做出决策。
- 提高沟通效果:通过数据可视化,可以将数据以更加生动、直观的方式展示给其他人,提高数据的沟通效果和传达效果。
- 促进数据驱动决策:通过数据可视化,可以更好地将数据与业务目标联系起来,帮助用户基于数据做出更加准确和客观的决策。
.
可视化工具:
- Tableau:一款商业化的数据可视化工具,支持多种数据源和多种可视化方式,具有良好的交互性和易用性。
- Power BI:微软推出的商业化数据可视化工具,支持多种数据源和多种可视化方式,具有良好的跨平台性和自动化分析功能。
- QlikView / Qlik Sense:一款商业化的数据可视化工具,支持多种数据源和多种可视化方式,具有良好的交互性和数据关联性分析功能。
- Google Data Studio:谷歌推出的免费数据可视化工具,支持多种数据源和多种可视化方式,具有良好的协作和共享功能。
- Highcharts:一款基于 JavaScript 的开源可视化工具,支持多种图表类型和交互式功能,具有良好的扩展性和自定义功能。
- D3.js:一款基于JavaScript的开源可视化工具,支持多种图表类型和交互式功能,具有良好的自定义和扩展性。
- Plotly:一个基于 Python 的开源可视化工具,支持多种数据源和多种可视化方式,具有良好的交互性和自定义功能。
- ECharts:一个基于 JavaScript 的开源可视化工具,支持多种图表类型和交互式功能,具有良好的移动端适配和性能优化。
.
Spark 是一个基于内存的分布式计算框架,主要特点:
- 高性能:Spark 使用内存计算,可以将数据存储在内存中,避免了频繁的磁盘读写操作,从而提高了计算速度。
- 易用性:Spark 提供了简单易用的 API,支持多种编程语言,如 Scala、Java、Python 和 R 等,同时也支持交互式 Shell。
- 处理多种数据类型:Spark 不仅可以处理结构化数据,还可以处理半结构化和非结构化数据,如文本、图像和音频等。
- 处理复杂计算:Spark 提供了丰富的数据处理和机器学习算法库,可以方便地进行复杂计算,如图形处理、文本分析和推荐系统等。
- 支持实时处理:Spark 提供了流处理框架 Spark Streaming,可以实现实时数据处理和分析。
与 Map / Reduce 相比,Spark 具有以下优点: - 性能更高:Spark 使用内存计算和 RDD(弹性分布式数据集)的概念,可以避免磁盘 I/O 的瓶颈,从而具有更高的计算速度。
- 更加灵活:Spark 支持多种数据处理方式,如 Map / Reduce、SQL、流处理和机器学习等,可以根据需求选择合适的处理方式。
- 更便于开发:Spark 提供了简单易用的 API 和交互式 Shell,可以方便地进行开发和调试。
- 支持更多数据类型:Spark 不仅可以处理结构化数据,还可以处理半结构化和非结构化数据,如文本、图像和音频等。
- 支持实时处理:Spark 提供了流处理框架 Spark Streaming,可以实现实时数据处理和分析。
.
Spark是一个分布式计算框架,核心组件:
- Spark Core:Spark 核心组件,提供了 Spark 的基本功能,如任务调度、内存管理、容错处理等。
- Spark SQL:Spark 提供的 SQL 查询引擎,支持 SQL 查询和 DataFrame API,可以方便地进行结构化数据处理和分析。
- Spark Streaming:Spark 提供的流处理组件,支持实时数据处理和分析,提供了 DStream(离散流)的概念,可以进行流式数据处理。
- MLlib:Spark 提供的机器学习库,支持多种机器学习算法,如分类、回归、聚类和推荐等。
- GraphX:Spark 提供的图处理库,支持图处理算法,如 PageRank、连通性组件和最短路径等。
- SparkR:Spark 提供的 R 语言接口,可以方便地使用 R 语言进行 Spark 的数据处理和分析。
- PySpark:Spark 提供的 Python 语言接口,可以方便地使用 Python 进行 Spark 的数据处理和分析。
.
常见的流计算框架包括:
- Apache Flink:Flink 是一个分布式流处理框架,支持事件驱动和批处理模式,具有高性能和低延迟的特点,适用于实时数据处理和分析。
- Apache Kafka Streams:Kafka Streams 是一个轻量级的流处理框架,集成在 Kafka 中,具有低延迟和高吞吐量的特点。
- Apache Storm:Storm 是一个分布式实时计算系统,支持流处理和批处理模式,具有高性能和可扩展性的特点。
- Apache Samza:Samza 是一个分布式流处理框架,支持高吞吐量和低延迟的实时数据处理,适用于大规模数据流处理系统。
- Spark Streaming:Spark Streaming 是 Spark 的流处理组件,支持流式数据处理和批处理模式,具有高性能和易用性的特点。
流计算框架特点: - 处理模式:不同的流计算框架支持不同的处理模式,如事件驱动、批处理和微批处理等。
- 性能和延迟:不同的流计算框架具有不同的性能和延迟特点,如 Flink 具有高性能和低延迟,Kafka Streams 具有低延迟和高吞吐量等。
- 可扩展性:不同的流计算框架具有不同的可扩展性特点,如 Storm 和 Flink 具有良好的可扩展性,可以支持大规模的数据流处理系统。
- 功能和扩展性:不同的流计算框架支持不同的功能和扩展性,如 Spark Streaming 集成在 Spark 中,可以方便地使用 Spark 的其他功能和扩展组件。
- 社区支持和生态系统:不同的流计算框架具有不同的社区支持和生态系统,如 Flink 和 Spark Streaming 具有较为丰富的生态系统和社区支持。
.
数据采集方法可以根据数据来源、数据类型和采集方式等不同角度进行分类,以下是常见的数据采集方法:
- 网络爬虫:通过网络爬虫程序,从互联网上抓取网页、图片、视频、音频等各种类型的数据。
- 日志收集:通过在系统、应用程序、网络设备等上设置日志收集器,收集各种类型的日志数据,如系统日志、应用程序日志、网络设备日志等。
- API 接口调用:通过 API 接口调用,获取各种类型的数据,如社交媒体数据、金融数据、天气数据等。
- 移动设备采集:通过移动设备上的传感器或应用程序,采集各种类型的数据,如位置信息、人体健康数据、行为数据等。
- IoT 设备采集:通过各种类型的 IoT 设备,采集物理环境数据、工业数据、交通数据等。
- 数据库同步:通过数据库同步工具,将多个数据库中的数据进行同步,如 MySQL 数据库同步、Oracle 数据库同步等。
- 文件解析:通过解析各种类型的文件,如文本文件、CSV 文件、XML 文件等,获取其中的数据。
- 人工输入:通过人工输入方式,手动录入各种类型的数据。
.
Flume简介:
Apache Flume 是一个可靠、可用、分布式、高可扩展的海量日志采集、聚合和传输系统,适用于大规模数据采集场景。Flume 的核心思想是将数据从源头采集到目的地,具有高效、可靠、可扩展、灵活等特点,可以支持各种类型的数据源和数据目的地。
Flume 的核心组件包括:
- Source:数据源,用于采集数据,包括多种类型的 Source,如Avro Source、Netcat Source、Exec Source等。
- Channel:数据通道,用于存储采集到的数据,包括多种类型的 Channel,如Memory Channel、JDBC Channel、Kafka Channel 等。
- Sink:数据目的地,用于将采集到的数据传输到目标系统,包括多种类型的 Sink,如 HDFS Sink、Kafka Sink、Elasticsearch Sink 等。
- Interceptor:数据拦截器,用于对采集到的数据进行处理,如过滤、转换、添加头信息等,可以自定义各种类型的 Interceptor。
Flume 的工作流程如下: - 数据源将数据发送给 Source。
- Source将数据存储到 Channel中。
- Sink从Channel 中读取数据,将数据传输到目的地。
- Interceptor 可以在数据从 Source 到 Sink 的过程中对数据进行处理。
.
Kafka 简介:
Apache Kafka 是一种高吞吐量、低延迟、分布式的消息队列系统,适用于大规模数据处理和分布式系统中的数据流转场景。Kafka 最初是由 LinkedIn 公司开发的,目前已经成为 Apache 软件基金会的顶级项目之一。
Kafka 的特性包括:
- 高吞吐量:Kafka 能够处理每秒钟百万级别的消息,支持大规模的数据处理和分析。
- 低延迟:Kafka 的消息传输延迟非常低,可以达到毫秒级别的延迟。
- 分布式:Kafka 是一个分布式系统,支持多个 Broker 节点组成的集群,可以处理大规模的数据流转和存储需求。
- 可靠性:Kafka 采用分布式复制机制,确保数据在发送和接收过程中不会丢失。
- 可扩展性:Kafka 的集群规模可以随着数据量的增加而扩展,支持水平扩展和垂直扩展等多种方式。
- 多语言支持:Kafka 提供了多种编程语言的客户端 API,如 Java、Python、C++、.NET 等,可以方便地与各种类型的应用程序进行集成。
- 消息保留和清除策略:Kafka 支持消息保留和清除策略,可以根据需求自定义消息的保留时间和清除规则。
.
Kettle 简介:
Kettle(也称为Pentaho Data Integration)是一款开源的 ETL 工具,提供了一套可视化的图形界面,可以方便地进行数据抽取、转换和加载等操作。Kettle 可以连接各种类型的数据源,包括关系型数据库、非关系型数据库、文件等,并支持多种数据格式的处理,如 CSV、XML、JSON 等。
Kettle 的主要功能:
- 数据抽取:Kettle 可以从各种类型的数据源中抽取数据,并进行数据清洗和数据筛选等操作。
- 数据转换:Kettle 可以对抽取的数据进行转换和加工,包括数据格式转换、字段拆分、合并等操作。
- 数据加载:Kettle 可以将处理后的数据加载到目标数据源中,包括关系型数据库、非关系型数据库、文件等。
- 数据整合:Kettle 可以将多个数据源中的数据进行整合,包括数据合并、数据去重等操作。
- 数据清理:Kettle 可以对数据进行清理和预处理,包括数据去重、数据过滤、数据格式化等操作。
- 调度和监控:Kettle 提供了调度和监控功能,可以对数据抽取、转换和加载等任务进行管理和监控。