首页 > 数据库 >大数据体系介绍与 SQL 处理流程自学笔记

大数据体系介绍与 SQL 处理流程自学笔记

时间:2025-01-16 20:58:07浏览次数:3  
标签:存储 数据 笔记 SQL table 自学 column1 Spark

一、大数据体系概述

(一)大数据的概念

大数据是指数据的规模、复杂性和多样性超出了传统数据处理工具和技术的处理能力的数据集合。其特点通常被概括为 “4V”:

  • Volume(大量):数据量巨大,通常以 TB、PB 甚至 EB 为单位。例如,一家大型电商平台每天产生的用户浏览记录、购买记录、搜索记录等数据量可达 PB 级。
  • Velocity(高速):数据产生和更新的速度快,要求实时或近实时处理。比如,社交媒体平台上用户每秒都会发布大量的信息,需要即时处理和分析。
  • Variety(多样):数据类型丰富,包括结构化数据(如数据库中的表格数据)、半结构化数据(如 XML、JSON)和非结构化数据(如文本、图像、音频、视频)。
  • Value(价值):数据本身价值密度低,但通过挖掘和分析可以提取出有价值的信息。例如,从海量的网络日志中找出用户行为模式和趋势。

(二)大数据技术生态系统

  • 数据存储

    • HDFS(Hadoop Distributed File System):是 Hadoop 的分布式文件存储系统,将大文件分成多个数据块,存储在多个节点上,具有高容错性和高吞吐量,适合存储海量数据。例如,在 HDFS 中,一个大文件会被分成多个 128MB 的块,存储在不同的机器上,提高存储的可靠性和性能。
    • NoSQL 数据库:包括键值存储(如 Redis)、文档存储(如 MongoDB)、列存储(如 HBase)和图数据库(如 Neo4j),用于存储和管理非结构化和半结构化数据。它们提供了灵活的数据模型和水平扩展能力,适用于海量数据存储和快速查询。
  • 数据处理

    • MapReduce:是一种分布式计算模型,将任务分解为 Map(映射)和 Reduce(归约)两个阶段,实现大规模数据的并行处理。例如,在统计单词出现次数时,Map 阶段将文本拆分成单词并标记计数,Reduce 阶段对相同单词的计数进行求和。
    • Spark:一个快速、通用的集群计算系统,提供比 MapReduce 更高效的计算能力,支持内存计算、流处理(Spark Streaming)、图处理(GraphX)和机器学习(MLlib)等多种功能。Spark 可以将数据存储在内存中,提高处理速度,适用于迭代计算和交互式查询。
    • Flink:专注于流数据处理,支持事件时间处理和状态管理,能处理有界和无界的数据流,提供低延迟、高吞吐量的流处理服务。例如,可用于实时监控系统,对实时产生的数据进行即时分析和处理。
  • 数据采集和传输

    • Flume:是一个分布式、可靠、高可用的海量日志采集、聚合和传输系统,可从不同数据源收集数据并传输到存储系统。比如,可从服务器的日志文件中收集数据,传输到 HDFS 或 Kafka。
    • Kafka:是一个分布式的消息队列系统,具有高吞吐量和可扩展性,可用于构建实时数据管道。在大数据系统中,常作为消息中间件,实现数据的缓冲和异步处理。
  • 数据调度和管理

    • YARN(Yet Another Resource Negotiator):是 Hadoop 的资源管理系统,负责集群资源的分配和调度,使得不同的计算任务可以共享集群资源。
    • AzkabanOozie:用于工作流调度,可将多个大数据处理任务编排成工作流,按照预定的顺序和条件依次执行。

二、SQL 在大数据中的地位和作用

(一)SQL 的重要性

SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言,在大数据领域仍然起着重要的作用:

  • 对于熟悉传统关系型数据库的人员来说,SQL 是一种易于上手的工具,可用于处理结构化数据。
  • 许多大数据存储和处理平台支持 SQL 或类 SQL 语言,如 Hive 提供了 HiveQL,Spark SQL 可以使用 SQL 语句处理 Spark 中的数据,使得用户可以利用 SQL 技能处理海量数据。
  • SQL 提供了一种简洁、强大的方式来查询和分析数据,易于理解和使用,可快速实现数据的筛选、聚合、排序、连接等操作。

(二)SQL 处理大数据的挑战

  • 性能问题:在处理海量数据时,传统 SQL 可能会面临性能瓶颈,需要对 SQL 语句进行优化或使用更强大的计算引擎。
  • 数据类型适配:传统 SQL 主要处理结构化数据,对于大数据中的非结构化和半结构化数据,需要进行适当的转换和处理。

三、SQL 处理大数据的流程

(一)数据源的准备

  • 首先,确定数据源,可能是存储在 HDFS 中的结构化数据文件(如 CSV、Parquet),或者是存储在 Hive 表中的数据。
  • 对于存储在文件中的数据,可以通过创建外部表将其映射到数据库中。例如,在 Hive 中使用以下语句将一个存储在 HDFS 中的 CSV 文件映射为表:

sql

CREATE EXTERNAL TABLE my_table (
    column1 INT,
    column2 STRING,
    column3 DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION '/path/to/csv/file';

这里创建了一个名为 my_table 的外部表,指定了列名和数据类型,并使用逗号作为分隔符,数据文件存储在 /path/to/csv/file 中。

(二)SQL 查询语句的编写

  • 基本查询操作
    • SELECT 语句:用于从表中选择数据,如 SELECT column1, column2 FROM my_table WHERE column1 > 100;,从 my_table 中选择 column1 和 column2,且 column1 大于 100 的数据。
    • JOIN 操作:用于连接多个表,例如:

sql

SELECT a.column1, b.column2
FROM table_a a
JOIN table_b b ON a.id = b.id;

这将根据 id 列连接 table_a 和 table_b,并选择 column1 和 column2 列的数据。

  • GROUP BY 和聚合函数:可对数据进行分组和聚合操作,例如:

sql

SELECT category, COUNT(*) AS count
FROM sales
GROUP BY category;

这将 sales 表按 category 分组,并统计每组的记录数。

  • 高级查询操作
    • 子查询:在一个查询中嵌套另一个查询,例如:

sql

SELECT column1
FROM table_a
WHERE column1 IN (SELECT column1 FROM table_b);

这将从 table_a 中选择 column1,条件是 column1 出现在 table_b 中。

  • 窗口函数:用于对数据进行分组内的排序、排名、累计等操作,例如:

sql

SELECT column1, column2, RANK() OVER (PARTITION BY column1 ORDER BY column2 DESC) AS rank
FROM table;

这里使用 RANK() 函数对 column1 分组内的 column2 进行降序排名。

(三)执行 SQL 查询

  • 在 Hive 中,使用 hive -e "SELECT * FROM my_table;" 执行 SQL 语句,将在命令行中执行查询并返回结果。
  • 在 Spark SQL 中,可以使用以下代码执行 SQL 语句:

scala

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
 .appName("Spark SQL Example")
 .getOrCreate()

val df = spark.sql("SELECT * FROM my_table")
df.show()

这里使用 Spark 的 SparkSession 创建一个会话,使用 spark.sql 执行 SQL 语句并将结果存储在 df 中,最后使用 show() 方法显示结果。

(四)性能优化

  • 索引的使用:在一些支持索引的存储系统中,如 HBase 或 Hive 的索引,可以加速数据查询。例如,在 Hive 中创建索引:

sql

CREATE INDEX index_name ON TABLE my_table (column1) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';

  • 分区和分桶:将大表分成多个分区或分桶,可加快数据查询速度。例如,在 Hive 中创建分区表:

sql

CREATE TABLE partitioned_table (
    column1 INT,
    column2 STRING
)
PARTITIONED BY (date STRING);

在插入数据时,按日期分区,查询时可直接定位到相应的分区,减少数据扫描量。

(五)结果的存储和展示

  • 查询结果可以存储在新的表中,以便后续使用,例如:

sql

CREATE TABLE result_table AS
SELECT * FROM my_table WHERE column1 > 100;

  • 也可以将结果导出到文件中,在 Hive 中可以使用:

sql

INSERT OVERWRITE LOCAL DIRECTORY '/path/to/output'
SELECT * FROM my_table WHERE column1 > 100;

  • 对于结果的展示,可以使用可视化工具,如 Tableau 或 Zeppelin,将查询结果以图表形式展示,便于理解和分析。

四、学习资源和实践建议

(一)学习资源

  • 在线课程
    • Coursera 和 edX 上有许多关于大数据和 SQL 的课程,如 “Big Data Specialization” 和 “SQL for Data Science”,这些课程由知名高校和企业的专家授课,提供理论和实践的结合。
    • 慕课网、网易云课堂等平台也有大量免费或付费的大数据和 SQL 课程,适合不同水平的学习者。
  • 书籍
    • 《Hadoop: The Definitive Guide》:详细介绍了 Hadoop 生态系统,包括 HDFS、MapReduce 等。
    • 《Spark: The Definitive Guide》:涵盖了 Spark 的各种功能和使用案例,对于使用 Spark 处理大数据很有帮助。
    • 《SQL Cookbook》:提供了大量的 SQL 示例和技巧,适合提高 SQL 技能。

(二)实践建议

  • 安装和使用 Hadoop 或 Spark 的沙箱环境,如 Hortonworks Sandbox 或 Cloudera QuickStart VM,进行本地实验。
  • 在开源数据集网站(如 Kaggle)上下载数据集,使用 SQL 进行数据分析和处理练习。
  • 参与开源大数据项目,如 Apache 项目的 Issue 解决或文档翻译,在实践中提高技能。

通过以上的学习笔记,初学者可以对大数据体系有一个初步的认识,并掌握 SQL 在大数据处理中的基本流程和技巧。在学习过程中,要多实践、多思考,逐步深入了解大数据技术,为未来的大数据分析和开发工作打下坚实的基础。

五、总结

大数据体系是一个庞大的生态系统,SQL 作为一种经典的数据处理语言在其中发挥着重要作用。通过学习大数据存储、处理技术和 SQL 处理流程,我们可以利用传统的 SQL 技能,结合现代大数据平台,处理海量的数据,挖掘其中的价值。在学习过程中,我们会遇到性能、数据类型等各种挑战,但通过不断优化和实践,我们可以逐步克服这些问题,成为一名优秀的大数据从业者。希望你在大数据学习的道路上不断进步,探索更多的大数据奥秘。

标签:存储,数据,笔记,SQL,table,自学,column1,Spark
From: https://blog.csdn.net/2401_82456630/article/details/145191752

相关文章

  • 初识ES - ES与mysql的概念对比
    文档:ES是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储再es中。 索引:索引(index):相同类型的文档的集合。映射(mapping):索引中文档的字段约束信息,类似表的结构约束。 按照索引分类后,如下: 概念对比 架构  ......
  • 数字电路课程笔记
    1、数制与码制补零二进制和十六进制之间的转换:整数部分:对于整数部分,您需要将二进制数从右往左,每四位一组。如果剩余的位数不足四位,就需要在左边补零,直到每组都有四位。小数部分:对于小数部分,您需要将二进制数从左往右,每四位一组。如果剩余的位数不足四位,就需要在右边补零,......
  • Day10-后端Web实战——Mysql多表操作&员工列表查询(分页查询)
    目录1.多表关系1.1一对多1.1.1关系实现1.1.2外键约束1.2一对一1.3多对多1.4案例2.多表查询2.1概述2.1.1数据准备2.1.2介绍2.1.3分类2.2内连接2.3外连接2.4子查询2.4.1介绍2.4.2标量子查询2.4.3列子查询2.4.4行子查询2.4.5表子查询2.5案例3.员......
  • Python+Django的社区爱心捐赠(Pycharm Flask Django Vue mysql)
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的社区爱心捐赠(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端vue.js框架支持:django数据库:mysql5.7数据库......
  • Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(Pycharm Flas
    收藏关注不迷路,防止下次找不到!文章末尾有惊喜项目介绍Python+Django的老年群体安全用药管理系统(角色:用户、医生、药师、管理员)(PycharmFlaskDjangoVuemysql)项目展示详细视频演示请联系我获取更详细的演示视频,相识就是缘分,欢迎合作!!!所用技术栈前端......
  • MySQL版本8以后提示JDBC连接URL有问题
    我的的MySQL版本是8.1,JDBC驱动是com.mysql.jdbc.Driver,并且我发现将useSSL设置为true时会报错。这是因为较新的MySQL版本(8.0及以上)默认使用了更严格的SSL/TLS配置,而旧的JDBC驱动可能不完全兼容这些新配置。解决方案升级JDBC驱动<dependency><groupId>mysql</groupId>......
  • C语言学习笔记:if语句讲解和月份的天数判断以及闰年判断示例
    if语句的格式是:if(关系运算或逻辑运算表达式){语句 }if后如果不加花括号{}则判定只和第一句语句相关:if(n==0)printf(“1”);printf(“2”);//这种写法,if判定与语句2无关 (n==0)是否为真语句2都会打印 为避免if的(关系语句)少打一个= 可以把常量放在左侧如:if(7==n){}当......
  • 字玩FontPlayer开发笔记10 Tauri2多窗口通信
    字玩FontPlayer开发笔记10Tauri2多窗口通信字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3+ElementUI开发,源代码:github|gitee笔记最近在使用Tauri进行打包应用,这两天在测试可编程脚本模块时,发现原有代码使用了window.open方法,在Tauri应用中一直触发不了新窗口......
  • HP惠普笔记本重装系统无法引导无法进操作系统的终极解决方法.210804
    F9进入BIOS-先进(Advanced)-安全引导配置-启用传统支持和禁用安全引导......
  • SQL中的。和python中的。的区别。让你彻底明白 。
    SELECTsale_order.name,SUM(sale_order_line.price_total)astotal_amountFROMsale_orderJOINsale_order_lineASsale_order_lineONsale_order.id=sale_order_line.order_idGROUPBYsale_order.id像上面的语句中,sale_order.name为什么这个可以.name能像python那......