大数据入门知识总结
一、大数据部门及流程
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的CDH、TDH等
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上的存储位置。
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的用法相似。
转载:https://blog.csdn.net/glpghz/article/details/116947687