大数据入门知识总结

一、大数据部门及流程

1、部门架构
在这里插入图片描述
2、大数据处理流程

在这里插入图片描述

二、数据仓库
1、数据仓库的基本概念
  • 数据仓库(Data Warehouse,DW/DWH)是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。

  • 数据仓库的输入方是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。

  • 数据仓库面向分析,平时的Mysql数据库主要面向业务。

  • 数据仓库是专门用来进行数据分析的,它可以是Mysql、Oracle等数据库,但是在大数据中常用到的是Hive
    在这里插入图片描述

2、数据仓库的主要特征

数据仓库是面向主题的、集成的、稳定的和时变的数据集合,用以支持管理决策。

(1)主题性
不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织。
比如对于城市,“天气湿度分析”就是一个主题。对于淘宝,“用户点击行为分析”就是一个主题。

(2)集成性
数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。

(3)稳定性
数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析。这里说明一点,数据仓库基本上是不许允许用户进行修改,删除操作的。大多数的场景是用来查询分析数据。

(4)时变性
数据仓库会定期接收新的集成数据,反应出最新的数据变化。这和稳定特点并不矛盾。

3、数据仓库与数据库区别

(1)数据库
数据库是面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理,也被称为联机事务处理 OLTP(On-Line Transaction Processing)。

(2)数据仓库
数据仓库一般针对某些主题的历史数据进行分析,支持管理决策,又被称为联机分析处理 OLAP(On-Line Analytical Processing)。首先要明白,数据仓库的出现,并不是要取代数据库。

(3)两者区别

  • 数据库是面向事务的设计,数据仓库是面向主题设计的。
  • 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
  • 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
  • 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。
  • 数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。

(4)数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
在这里插入图片描述

数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

  • 源数据层(ODS): 操作性数据(Operational Data Store)
    ,是作为数据库到数据仓库的一种过渡,ODS的数据结构一般与数据来源保持一致,而且ODS的数据周期一般比较短。ODS的数据为后一步的数据处理做准备。
  • 数据仓库层(DW):数据仓库(Data Warehouse),是数据的归宿,这里保持这所有的从ODS到来的数据,并长期报错,而且这些数据不会被修改,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
  • 数据应用层(DA):数据应用(Dataapplication),为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据,该数据面向应用。如根据报表、专题分析需求而计算生成的数据。
5、数据仓库——ETL

ETL(Extract-Transform-Load):数据的抽取、数据的转换、数据的加载。将杂乱的数据转换为可以处理分析的数据。ETL是将业务系统的数据经过抽取、清洗、转换之后加载到数据仓库的过程,目的是将企业中分散、零乱、标准不统一的数据整合到一起。

ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。

ETL流程:
在这里插入图片描述
可用于数据抽取的sql:

insert into table1 from select * from table2;

(1)可视化ETL平台——Kettle
Kettle(PDI)是一款国外开源ETL工具,Java编写,可在多平台运行,允许管理来自不同数据库的数据,并提供了一个图形化的用户环境。使用Kettle从众多数据库中抽取有用的数据放到数仓中。
在这里插入图片描述

(2)数据分析工具——Superset
Superset是一款开源的现代化企业级BI,是一款开源的数据分析可视化工具,支持多种数据源,图表类型多。用于对数仓中的数据进行分析及图形化显示。

基本步骤:

  • 连接数仓

  • 编写sql分析数据
    在这里插入图片描述

    在这里插入图片描述

  • 图形化显示:
    在这里插入图片描述

三、Hadoop——HDFS分布式存储系统
1、Hadoop简介

Hadoop是一个开源框架,它的核心组件有:

  • HDFS(分布式文件系统):解决海量数据存储
  • MAPREDUCE(分布式运算编程框架):解决海量数据计算
  • YARN(作业调度和集群资源管理的框架):解决资源任务调度

广义上来说,Hadoop通常是指Hadoop生态圈:
在这里插入图片描述
重点框架:Kafka、Spark、Flink、Hive、Hbase、Zookeeper、Yarn、MapReduce、HDFS

版本:

  • 1.x版本系列:hadoop的第二代开源版本,该版本基本已被淘汰
  • 2.x版本系列:架构产生重大变化,引入了Yarn平台等许多新特性,是现在使用的主流版本。
  • 3.x版本系列:该版本是最新版本,但是还不太稳定。

Hadoop发行版本分为开源社区版和商业版:

  • 开源社区版:指由Apache软件基金会维护的版本,是官方维护的版本体系,版本丰富,兼容性稍差。
  • 商业版:指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,比较著名的有cloudera的CDHTDH
    在这里插入图片描述
2、HDFS、Yarn、MapReduce

在这里插入图片描述
(1)HDFS模块:

  • NameNode:集群当中的主节点,主要用于管理集群当中的各种数据。
  • SecondaryNameNode:主要用于hadoop中元数据信息的辅助管理。
  • DataNode:集群当中的从节点,主要用于存储集群中的各种数据。

(2)数据计算核心模块——Yarn:

  • ResourceManager:接收用户的计算请求任务,并负责集群的资源分配。
  • NodeManager: 负责执行主节点分配的任务。

(3)Hadoop2.x架构模型——MapReduce
在这里插入图片描述

(3)Hadoop模块之间的关系

  • MapReduce计算需要的数据和产生的结果需要HDFS来进行存储
  • MapReduce的运行需要由Yarn集群来提供资源调度。(MapReduce只是一段代码,需要Yarn提供资源进行调度)
3、Hadoop集群搭建

(1)HADOOP集群简介
HADOOP集群包含:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。

  • HDFS集群:NameNode、DataNode、SecondaryNameNode
  • YARN集群: ResourceManager、NodeManager

(2)集群搭建方式
单机模式(Standalone mode):

  • 单机模式, 1个机器上运行HDFS的NameNode和DataNode、YARN的ResourceManger和NodeManager,主要用于学习和调试。

群集模式(Cluster mode):

  • 集群模式主要用于生产环境部署。会使用多台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
4、HDFS的概述

(1)概述

  • 单机容量往往无法存储大量数据,大数据需要跨机器存储。统一管理分布在集群上的文件系统称为分布式文件系统 。

  • HDFS(Hadoop Distributed File System)是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据 (比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS 使用多台计算机存储文件,
    并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统。

  • 分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。
    在这里插入图片描述
    (2)HDFS的特点
    在这里插入图片描述

  • HDFS文件系统可存储超大文件,时效性稍差。

  • HDFS具有硬件故障检测和自动快速恢复功能。

  • HDFS为数据存储提供很强的扩展能力。

  • HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改。

  • HDFS可在普通廉价的机器上运行。

(3)HDFS的架构

  • HDFS采用Master/Slave架构
  • 一个HDFS集群有两个重要的角色,分别是Namenode和Datanode。
  • HDFS的四个基本组件:HDFS Client、NameNode、DataNode和Secondary NameNode。
    在这里插入图片描述

Client:

  • 客户端。
  • 文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
  • 与 NameNode 交互,获取文件的位置信息。
  • 与 DataNode 交互,读取或者写入数据。
  • Client 提供一些命令来管理 和访问HDFS,比如启动或者关闭HDFS。

NameNode:

  • master,管理者。
  • 管理 HDFS 元数据(文件路径,文件的大小,文件的名字,文件权限,文件的block切片信息….)。
  • 配置副本策略。(为每个数据,进行备份)
  • 处理客户端读写请求。

DataNode

  • Slave,NameNode 下达命令,DataNode 执行实际的操作。
  • 存储实际的数据块。(存储时以block为单位,每个block为128M)
  • 执行数据块的读/写操作。
  • 定时向namenode汇报block信息。

Secondary NameNode

  • 并非 NameNode 的热备。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。
  • 辅助 NameNode,分担其工作量。
  • 在紧急情况下,可辅助恢复 NameNode。

(4)HDFS的副本机制

  • HDFS能够在一个大集群中跨机器地存储超大文件。它将每个文件存储成一系列的数据块——block,除了最后一个block,所有的数据块都是同样大小的128M。
  • 为了容错,所有的block都会有副本,每个文件的数据块大小和副本系数都是可配置的。
    在这里插入图片描述
5、HDFS的Shell命令

Shell命令介绍:

  • 安装好hadoop环境之后,可以执行hdfs相关的shell命令对hdfs文件系统进行操作,比如文件的创建、删除、修改文件权限等。
  • 对HDFS的操作命令类似于Linux的shell对文件的操作,如ls、mkdir、rm等。

Hadoop提供了文件系统的shell命令使用格式如下:

  • hadoop fs <args> #既可以操作HDFS,也可以操作本地系统。
  • hdfs dfs <args> #只能操作HDFS系统。

(1)ls 显示文件列表
格式: hadoop fs -ls URI

hadoop fs -ls / #显示文件列表
hadoop fs –ls -R / #递归显示文件列表

(2)mkdir 创建目录
格式 : hadoop fs –mkdir [-p] <paths>

hadoop fs -mkdir /dir1 #创建目录
hadoop fs -mkdir -p /aaa/bbb/ccc #递归创建目录

(3)put 上传文件
格式 : hadoop fs -put <localsrc> ... <dst>

作用 :
将单个的源文件或者多个源文件srcs从本地文件系统上传到目标文件系统中。

hadoop fs -put /root/1.txt /dir1 #上传文件
hadoop fs –put /root/dir2 / #上传目录

(4)get 文件拷贝
格式 : hadoop fs -get <src> <localdst>

作用:将HDFS文件拷贝到本地文件系统。
hadoop fs -get /initial-setup-ks.cfg /opt #拷贝文件

(5)mv 移动文件
格式 :hadoop fs -mv <src> <dst>

作用: 将hdfs上的文件从原路径src移动到目标路径dst,该命令不能跨文件系统。
hadoop fs -mv /dir1/1.txt /dir2 #HDFS中移动文件

(6)rm 删除文件
格式: hadoop fs -rm [-r] [-skipTrash] URI [URI 。。。]

作用:

  • 删除参数指定的文件和目录,参数可以有多个,删除目录需要加-r参数。
  • 如果指定-skipTrash选项,那么在回收站可用的情况下,该选项将跳过回收站而直接删除文件;

hadoop fs -rm /initial-setup-ks.cfg #删除文件
hadoop fs -rm -r /dir2 #删除目录

(7)cp 复制文件
格式: hadoop fs -cp <src> <dst>

作用: 将文件拷贝到目标路径中

hadoop fs -cp /dir1/1.txt /dir2 #复制文件

(8)cat查看文件
格式: hadoop fs -cat <filepath>

作用:将参数所指示的文件内容输出到控制台

hadoop fs -cat /dir1/1.txt #查看文件

6、HDFS的基准测试

实际生产环境当中,hadoop的环境搭建完成之后,第一件事情就是进行压力测试,测试我们的集群的读取和写入速度,这些操作被称为基准测试。

(1)写入速度测试
向HDFS文件系统中写入数据,10个文件,每个文件10MB,文件存放到/benchmarks/TestDFSIO中。

hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB

(2)读取速度测试
在HDFS文件系统中读入10个文件,每个文件10M

hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB

(3)清除测试数据

hadoop jar /export/server/hadoop-2.7.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.7.5.jar TestDFSIO -clean

四、Hive
1、什么是Hive
  • Hive是一个构建在Hadoop上的数据仓库框架。最初,Hive是由Facebook开发,后来移交由Apache软件基金会开发,并作为一个Apache开源项目。
  • Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
2、Hive的特点
  • Hive最大的特点是通过类SQL来分析大数据,这样使得分析数据更容易。
  • 数据是存储在HDFS上的,Hive本身并不提供数据的存储功能,它可以使已经存储的数据结构化。
  • Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。
  • 数据存储方面:它能够存储很大的数据集,可以直接访问存储在Apache HDFS或其他数据存储系统(如Apache HBase)中的文件。
  • 数据处理方面:Hive语句不适用于实时计算的场景,它适用于离线分析。
  • Hive支持MapReduce、Spark、Tez这两种分布式计算引擎
  • 数据的存储格式有多种,比如数据源是二进制格式,普通文本格式等;
3、Hive架构

在这里插入图片描述
(1)客户端(写SQL语句):

  • Client CLI(hive shell 命令行),JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive)。

(2)元数据Metastore:

  • 本质上只是用来存储hive中有哪些数据库,哪些表,表的字段,表所属数据库,分区,表的数据所在目录等,元数据默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore。

(3)驱动器Driver(解析和优化SQL)

  • 解析器(SQLParser): 将SQL字符转换成抽象语法树AST,这一步一般使用都是第三方工具库完成,比如antlr,对AST进行语法分析,比如表是否存在,字段是否存在,SQL语句是否有误。
  • 编译器(Physical Plan):将AST编译生成逻辑执行计划。
  • 优化器(Query Optimizer):对逻辑执行计划进行优化。
  • 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划,对于Hive来说,就是MR/Spark。

(4)存储和执行:

  • 存储原数据和结果数据,Hive使用HDFS/Hbase进行存储。
  • 使用计算引擎MapReduce等来执行SQL。
4、Hive与传统数据库对比

在这里插入图片描述
注意:

hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析。

5、Hive计算引擎

(1)MapReduce

  • 它将计算分为两个阶段,分别为 Map 和 Reduce。对于应用来说,需要想方设法将应用拆分成多个map、reduce的作业,以完成一个完整的算法。
  • MapReduce整个计算过程会不断重复地往磁盘里读写中间结果,导致计算速度比较慢,效率比较低。
    在这里插入图片描述
    在这里插入图片描述
    (2)Tez
    Tez把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。
    在这里插入图片描述
    (3)Spark
  • Apache Spark 是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算,同时Spark提供SQL 支持。
  • Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理。
    在这里插入图片描述
五、Hive的数据库和表

Hive数仓和传统关系型数据库类似,管理数仓数据也是通过该数据库和表。
在这里插入图片描述

1、Hive数据库操作

(1)创建数据库-默认方式

create database if not exists myhive; 
show databases;  #查看所有数据库

注意:
hive的数据库置默认存放在/user/hive/warehouse目录。

(2)创建数据库-指定存储路径

create database myhive2 location '/myhive2’;
show databases;  #查看所有数据库

注意:
location :用来指定数据库的存放目录

(3)查看数据库详细信息

desc database myhive;

(4)删除数据库
删除一个空数据库,如果数据库下面有数据表,那么就会报错:

drop database myhive;

强制删除数据库,包含数据库下面的表一起删除:

drop database myhive2 cascade;
2、Hive数据表操作

创建数据库表语法:
在这里插入图片描述

  • CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS
    选项来忽略这个异常。
  • EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive
    创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
  • LIKE允许用户复制现有的表结构,但是不复制数据。
  • ROW FORMAT DELIMITED 可用来指定行分隔符。
  • STORED AS SEQUENCEFILE|TEXTFILE|RCFILE
    来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。
  • CLUSTERED BY对于每一个表(table)进行分桶(MapReuce中的分区),桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
  • LOCATION: 指定表在HDFS上的存储位置。

一般建表后缀添加:

clustered by (cust_id) into 2 buckets    --分桶 开启事务,必须进行分桶
stored as orc                            --存储方式
tblproperties ('transactional'='true');  --开启事务
3、表字段数据类型

在这里插入图片描述
在这里插入图片描述

4、内部表操作

未被external修饰的是内部表(managed table管理表),内部表数据存储位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。

(1)建表:

create database myhive;
use myhive;
create table stu(id int,name string);
select * from stu;

注意:
创建表之后,Hive会在对应的数据库文件夹下创建对应的表目录。

(2)创建表并指定字段之间的分隔符:
在这里插入图片描述
(3)根据查询结果创建表:

create table stu3 as select * from stu2;

(4)根据已经存在的表结构创建表:

create table stu4 like stu2;

(5)查询表的类型:

desc stu; #查看表结构基本信息
desc formatted stu; #查看表结构详细信息

(6)删除表:

drop table stu2;

注意:
查看数据库和HDFS,发现删除内部表之后,所有的内容全部删除。

(5)Hive内部表操作-数据添加:
方式1-直接插入数据:

use mytest; #选择数据库 

create table stu(id int,name string); #创建表

#向表中插入数据
insert into stu values(1,'zhangsan’); 
insert into stu values(2,'lisi');

select * from stu; #查询数据

注意:
该方式每次插入都会在表目录中生成对应的数据文件,每insert一次都会生成一个文件(insert的内容),不推荐使用。
在这里插入图片描述
方式2-load数据加载:
Load命令用于将外部数据加载到Hive表中。
在这里插入图片描述
示例——本地加载:

#创建表,同时指定文件的分隔符
create table if not exists stu2(id int ,name string) 
row format delimited fields terminated by '\t’ ;

#向表加载数据
load data local inpath '/export/data/hivedatas/stu.txt' into table stu2;

示例——HDFS加载:

#创建表,同时指定文件的分隔符
create table if not exists stu3(id int ,name string) 
row format delimited fields terminated by '\t’ ;

#向表加载数据
hadoop fs -mkdir -p /hivedatas 
cd /export/data/hivedatas 
hadoop fs –put stu.txt /hivedatas/ 
load data inpath '/hivedatas/stu.txt' into table stu3; 

(6)Hive内部表特点:

  • hive内部表信息存储默认的文件路径是在/user/hive/warehouse/databasename.db/tablename/目录。
  • hive内部表在进行drop操作时,其表中的数据以及表的元数据信息均会被删除。
  • 内部表一般可以用来做中间表或者临时表。

(7)元数据:

  • Hive是建立在hadoop之上的数据仓库,存在hive里的数据实际上就是存在HDFS上,都是以文件的形式存在。
  • Hive元数据用用来记录数据库和表的特征信息,比如数据库的名字、存储路径、表的名字、字段信息,表文件存储路径等等。
  • 一般Hive的元数据是都保存在Mysql数据库中。
5、外部表操作
  • 在创建表的时候可以指定external关键字创建外部表,外部表对应的文件存储在location指定的hdfs目录下,向该目录添加新文件的同时,该表也会读取到该文件(当然文件格式必须跟表定义的一致)。
  • 外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive外部表的时候,数据仍然存放在hdfs当中,不会删掉。

(1)数据装载命令load:
Load命令用于将外部数据加载到Hive表中。
在这里插入图片描述

  • load data:表示加载数据。
  • local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表。
  • inpath:表示加载数据的路径。
  • overwrite:表示覆盖表中已有数据,否则表示追加。
  • into table:表示加载到哪张表。
  • student:表示具体的表。
  • partition:表示上传到指定分区

创建老师与学生表外部表,并向表中加载数据:
源数据:
在这里插入图片描述
创建老师表:
在这里插入图片描述
创建学生表:
在这里插入图片描述
从本地文件系统向表中加载数据:
在这里插入图片描述
加载数据并覆盖已有数据:
在这里插入图片描述
(2)从hdfs文件系统向表中加载数据:
其实就是一个移动文件的操作

#需要提前将数据上传到hdfs文件系统
hadoop fs -mkdir -p /hivedatas
cd /export/data/hivedatas
hadoop fs -put teacher.csv /hivedatas/
load data inpath '/hivedatas/teacher.csv' into table teacher;

注意:
如果删掉teacher表,hdfs的数据仍然存在,并且重新创建表之后,表中就直接存在数据了,因为我们的student表使用的是外部表,drop table之后,表当中的数据依然保留在hdfs中。

6、复杂类型操作

(1)Array类型
Array是数组类型,Array中存放相同类型的数据。
源数据:
说明:name与locations之间制表符分隔,locations中元素之间逗号分隔。
在这里插入图片描述
建表语句:
在这里插入图片描述

导入数据(从本地导入,同样支持从HDFS导入):
在这里插入图片描述

常用查询:
在这里插入图片描述

(2)map类型
map就是描述key-value数据。
源数据:
说明:字段与字段分隔符: “,”;需要map字段之间的分隔符:“#”;map内部k-v分隔符:“:”
在这里插入图片描述
建表语句:
在这里插入图片描述
导入数据:
在这里插入图片描述
常用查询:
在这里插入图片描述
(3)struct类型
源数据:
说明:字段之间#分割,第二个字段之间冒号分割
在这里插入图片描述
建表语句:
在这里插入图片描述
导入数据:
在这里插入图片描述
常用查询:
在这里插入图片描述

7、内部表和外部表之间的转换

查询表的类型

desc formatted student;#查看是内部表还是外部表

修改外部表student为外内部表:

alter table student set tblproperties('EXTERNAL'='FALSE');

修改内部表student为哇外部表:

alter table student set tblproperties('EXTERNAL'='TRUE');

注意:
(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!

8、Hive表操作-分区表
  • 在大数据中,最常用的一种思想就是分治,分区表实际就是对应hdfs文件系统上的的独立的文件夹,该文件夹下是 该分区所有数据文件。
  • 分区可以理解为分类,通过分类把不同类型的数据放到不同的目录下。
  • Hive中可以创建一级分区表,也可以创建多级分区表。

(1)创建一级分区表:
在这里插入图片描述
数据加载:
在这里插入图片描述
(2)创建多级分区表:
在这里插入图片描述
数据加载:
在这里插入图片描述
多分区联合查询使用union all来实现:
在这里插入图片描述
查看分区:
在这里插入图片描述
添加一个分区:
在这里插入图片描述
同时添加多个分区:
在这里插入图片描述
删除分区:
在这里插入图片描述

注意:
添加分区之后就可以在hdfs文件系统当中看到表下面多了一个文件夹。

9、Zeppelin框架

Apache Zeppelin是一款基于Web交互式框架,支持多种语言,如Scala,SparkSQL, Markdown ,SQL,Shell和Python等。Zeppelin提供了数据分析、数据可视化等功能。
在这里插入图片描述
我们可以使用Zeppelin来连接到Spark SQL的Thrift Server,这样我们可以以更直观的方式来查看Hive中的数据。而且Zeppelin也可以以图表的方式展示数据。

10、分桶表
  • 分桶就是将数据划分到不同的文件,其实就是MapReduce的分区。

  • 将数据按照指定的字段进行分成多个桶中去,说白了就是将数据按照字段进行划分,可以将数据按照字段划分到多个文件当中去。

11、Hive查询操作

在这里插入图片描述
(1)Hive查询操作-聚合函数:
SparkSQL中提供的聚合函数可以用来统计、求和、求最值等等。

  • COUNT:统计行数量
  • SUM:获取单个列的合计值
  • AVG:计算某个列的平均值
  • MAX:计算列的最大值
  • MIN:计算列的最小值
    在这里插入图片描述
    (2)比较运算符:
    在这里插入图片描述
    like:
  • % 代表零个或多个字符(任意个字符)。
  • _ 代表一个字符。
    在这里插入图片描述
    (3)逻辑运算符:
    在这里插入图片描述
    (4)Hive查询操作-分组查询:
    分组关键字是GROUP BY,该语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。注意使用group by分组之后,select后面的字段只能是分组字段和聚合函数。
    在这里插入图片描述

(5)Hive查询操作-Having语句:
HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。
在这里插入图片描述

(6)Hive查询操作-排序:
排序关键字是order by ,用于根据指定的列对结果集进行排序。在排序时,我们可以指定排序顺序,asc为升序(默认),desc为降序。
在这里插入图片描述
(7)Hive查询操作-limit语句:
limit子句用于限制查询结果返回的数量。

#查询3条数据
select * from student limit 3;

(8)Hive查询操作-多表查询:
内连接查询

  隐式内连接: 
   select * from A,B where 条件; 
  显示内连接:
   select * from A inner join B on 条件; 

外连接查询

 左外连接:left outer join 
   select * from A left outer join B on 条件; 

 右外连接:right outer join 
   select * from A right outer join B on 条件; 

(9)Hive查询操作-子查询:
查询允许把一个查询嵌套在另一个查询当中,其实就是select的嵌套
将查询结果当成一个值。

#查询成绩最高学生的sid
select sid from score where sscore = (select max(sscore) from score);

将查询结果当成一张表

select sid from score a,
(select max(sscore) max_score from score) b
 where a.sscore = b.max_score;
12、Hive内置函数:

在SparkSQL中提供了很多的内置函数(内嵌函数),包括聚合函数、数学函数,字符串函数、转换函数,日期函数,条件函数,表生成函数等等。
在这里插入图片描述

(1)数学函数:
在这里插入图片描述

(2)字符串函数:
在这里插入图片描述
(3)日期函数:
在这里插入图片描述
(4)条件判断函数:
在这里插入图片描述
(5)行转列操作:
行转列是指多行数据转换为一个列的字段。

Hive行转列用到的函数:

  • concat_ws(sep, str1,str2) --以分隔符拼接每个字符串
  • collect_set(col) --将某字段的值进行去重汇总,产生array类型字段
    在这里插入图片描述
    在这里插入图片描述
    (6)Hive内置函数-开窗函数:

row_number,rank,dense_rank:
这三个函数用于数据排名,也可以用于分组排名。
在这里插入图片描述
在这里插入图片描述
sum,avg,min,max:

sum用于实现分组内所有和连续累积的统计,sum,avg,min,max的用法和sum的用法相似。
在这里插入图片描述

  • 14
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值