赞
踩
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放 给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。
数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。
操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing)也可以称面向交易的处理 系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操 作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的 主要手段,主要用于操作型处理。
分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据 进行分析,支持管理决策。
1、首先要明白,数据仓库的出现,并不是要取代数据库。
2、数据库是面向事务的设计,数据仓库是面向主题设计的。 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
3、数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用 户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余, 依照分析需求,分析维度、分析指标进行设计。
4、数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
以银行业务为例。数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下 来,这里,可以简单地理解为用数据库记账。数据仓库是分析系统的数据平台,它从事务系统获取数 据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当 前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。
显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性, 客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是 事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但 是,只要能够提供有效的分析数据就达到目的了。
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它 决不是所谓的“大型数据库”。
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
1、源数据层(ODS) :此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临 时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
2、数据仓库层(DW) :也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系 统数据进行了清洗(去除了杂质)后的数据。
3、数据应用层(DA或APP) :前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数 据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra, 转化 Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数 据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳 定。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL查询功能。
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了hive可以 理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一个MapReduce的 客户端。Hive利用HDFS存储数据,利用MapReduce查询分析数据
Hive与传统数据库的对比:
总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析 。
Hive优势:
直接使用hadoop所面临的问题
1、人员学习成本太高
2、项目周期要求太短
3、MapReduce实现复杂查询逻辑开发难度太大
为什么要使用Hive
1、操作接口采用类SQL语法,提供快速开发的能力
2、避免了去写MapReduce,减少开发人员的学习成本
3、功能扩展很方便
Hive特点:
可扩展----Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
延展性----Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
容错-----良好的容错性,节点出现问题SQL仍可完成执行。
用户接口: 包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令 行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问 Hive。
元数据存储: 通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器、执行器: 完成HQL 查询语句从词法分析、语法分析、编译、优化以及查 询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。
方式一、 bin/hive
cd /export/servers/apache-hive-3.1.0-bin/
bin/hive
创建一个数据库
create database if not exists mytest;
方式二、HiveServer2
hive官方推荐使用hiveserver2的这种交互方式,需要我们启动hiveserver2这个服务端,然后通过客户 端去进行连接
启动服务端(前台启动命令如下)
cd /export/servers/apache-hive-3.1.0-bin/
bin/hive --service hiveserver2
重新开一个窗口启动我们的客户单进行连接
cd /export/servers/apache-hive-3.1.0-bin
bin/beeline
!connect jdbc:hive2://node03.hadoop.com:10000
进行连接,用户名为hadoop 密码为123456出现以下错误(认证异常)。
解决方法:关闭hive的服务端,在hadoop的配置文件core-site.xml当中添加以下两行配置,然后重启 hdfs以及yarn集群
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>root</value>
</property>
重新进行启动hive的服务端,然后继续使用客户端进行连接即可
启动服务端
cd /export/servers/apache-hive-3.1.0-bin/
bin/hive --service hiveserver2
开一个新的xshell会话窗口,客户端进行连接
cd /export/servers/apache-hive-3.1.0-bin
bin/beeline
!connect jdbc:hive2://node03.hadoop.com:10000
方式三:使用sql语句或者sql脚本进行交互
不进入hive的客户端直接执行hive的hql语句
cd /export/servers/apache-hive-3.1.0-bin
bin/hive -e "create database if not exists mytest;"
或者我们可以将我们的hql语句写成一个sql脚本然后执行
cd /export/servers
vim hive.sql
create database if not exists mytest;
use mytest;
create table stu(id int,name string);
通过hive -f 来执行我们的sql脚本
hive -f /export/servers/hive.sql
1、 创建数据库
create database if not exists myhive;
use myhive;
说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
2、 创建数据库并指定位置
create database myhive2 location ‘/myhive2’;
3、修改数据库
alter database myhive2 set dbproperties(‘createtime’=‘20180611’);
说明:可以使用alter database 命令来修改数据库的一些属性。但是数据库的元数据信息是不可更改的,包括数据库的名称以及数据库所在的位置。
4、查看数据库详细信息
desc database myhive2;
desc database extended myhive2;
5、删除数据库
drop database myhive2; # 删除一个空数据库
drop database myhive cascade; # 强制删除数据库,包含数据库下面的表一起删除
6、创建数据库表的语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。