黑马程序员技术交流社区

标题: hive学习总结 [打印本页]

作者: tanmingming2019    时间: 2020-1-21 19:37
标题: hive学习总结
hive在大数据分析中起着相当重要的作用,是存储数据的数据仓库,存储的数据面向分析使用,hive并不是关系型数据库,学习总结如下:
数据仓库是存数据的,企业的各种数据往里面存,主要目的是为了分析有效数据,后续会基
于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表
等。
可以理解为: 面向分析的存储系统 。
1.2. 主要特征
数据仓库是面向主题的(Subject-Oriented )、集成的(Integrated)、非易失的(Non-
Volatile)和时变的(Time-Variant )数据集合,用以支持管理决策。
1.2.1. 面向主题
数据仓库是面向主题的,数据仓库通过一个个主题域将多个业务系统的数据加载到一起,为了
各个主题(如:用户、订单、商品等)进行分析而建,操作型数据库是为了支撑各种业务而
建立。
1.2.2. 集成性
数据仓库会将不同源数据库中的数据汇总到一起,数据仓库中的综合数据不能从原有的数据库
系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与整合,这一步是数据仓库
建设中最关键、最复杂的一步(ETL),要统一源数据中所有矛盾之处,如字段的同名异义、异
名同义、单位不统一、字长不一致,等等。
1.2.3. 非易失性
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
操作型数据库主要服务于日常的业务操作,使得数据库需要不断地对数据实时更新,以便迅
速获得当前最新数据,不至于影响正常的业务运作。
在数据仓库中只要保存过去的业务数据,不需要每一笔业务都实时更新数据仓库,而是根据
商业需要每隔一段时间把一批较新的数据导入数据仓库。 数据仓库的数据反映的是一段相当
长的时间内历史数据的内容,是不同时点的数据库的集合,以及基于这些快照进行统计、综
合和重组的导出数据。数据仓库中的数据一般仅执行查询操作,很少会有删除和更新。但是
需定期加载和刷新数据。
1.2.4. 时变性
数据仓库包含各种粒度的历史数据。数据仓库中的数据可能与某个特定日期、星期、月份、
季度或者年份有关。数据仓库的目的是通过分析企业过去一段时间业务的经营状况,挖掘其
中隐藏的模式。虽然数据仓库的用户不能修改数据,但并不是说数据仓库的数据是永远不变
的。分析的结果只能反映过去的情况,当业务变化后,挖掘出的模式会失去时效性。因此数
据仓库的数据需要定时更新,以适应决策的需要。
1.3. 数据库与数据仓库的区别
数据库与数据仓库的区别实际讲的是  OLTP 与  OLAP 的区别。
操作型处理,叫联机事务处理 OLTP(On-Line Transaction Processing,),也可以称面向交易
的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修
改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传
统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历
史数据进行分析,支持 管理决策。
首先要明白,数据仓库的出现,并不是要取代数据库。
数据库是面向事务的设计,数据仓库是面向主题设计的。
数据库一般存储业务数据,数据仓库存储的一般是历史数据。
数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,
记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计
是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而
产生的,它决不是所谓的“大型数据库”。
数仓的分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库
后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
源数据层(ODS) :此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开
放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
数据仓库层(DW) :也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,
即对源系统数据进行了清洗(去除了杂质)后的数据。
数据应用层(DA或APP) :前端应用直接读取的数据源;根据报表、专题分析需求而计算
生成的数据。
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取
Extra, 转化Transfer, 装载Load)的过程,ETL是数据仓库的流水线,也可以认为是数据仓库的
血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精
力就是保持ETL的正常和稳定。
为什么要对数据仓库分层?
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
用空间换时间,通过大量的预处理来提升应用系统的用户体验(效率),因此数据仓库会存
在大量冗余的数据;不分层的话,如果源业务系统的业务规则发生变化将会影响整个数据清
洗过程,工作量巨大。
通过数据分层管理可以简化数据清洗的过程,因为把原来一步的工作分到了多个步骤去完
成,相当于把一个复杂的工作拆成了多个简单的工作,把一个大的黑盒变成了一个白盒,每
一层的处理逻辑都相对简单和容易理解,这样我们比较容易保证每一个步骤的正确性,当数
据发生错误的时候,往往我们只需要局部调整某个步骤即可。
1.5. 数仓的元数据管理
元数据(Meta Date),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓
库的数据状态及ETL的任务运行状态。一般会通过元数据资料库(Metadata Repository)来统
一地存储和管理元数据,其主要目的是使数据仓库的设计、部署、操作和管理能达成协同和
一致。
元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的关键组件,
贯穿数据仓库构建的整个过程,直接影响着数据仓库的构建、使用和维护。
构建数据仓库的主要步骤之一是ETL。这时元数据将发挥重要的作用,它定义了源数据系
统到数据仓库的映射、数据转换的规则、数据仓库的逻辑结构、数据更新的规则、数据
导入历史记录以及装载周期等相关内容。数据抽取和转换的专家以及数据仓库管理员正
是通过元数据高效地构建数据仓库。
用户在使用数据仓库时,通过元数据访问数据,明确数据项的含义以及定制报表。
数据仓库的规模及其复杂性离不开正确的元数据管理,包括增加或移除外部数据源,改
变数据清洗方法,控制出错的查询以及安排备份等。
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
元数据可分为技术元数据和业务元数据。技术元数据为开发和管理数据仓库的IT 人员使用,
它描述了与数据仓库开发、管理和维护相关的数据,包括数据源信息、数据转换描述、数据
仓库模型、数据清洗与更新规则、数据映射和访问权限等。而业务元数据为管理层和业务分
析人员服务,从业务角度描述数据,包括商务术语、数据仓库中有什么数据、数据的位置和
数据的可用性等,帮助业务人员更好地理解数据仓库中哪些数据是可用的以及如何使用。
由上可见,元数据不仅定义了数据仓库中数据的模式、来源、抽取和转换规则等,而且是整
个数据仓库系统运行的基础,元数据把数据仓库系统中各个松散的组件联系起来,组成了一
个有机的整体。
ive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并
提供类SQL查询功能。
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了
hive可以理解为一个将SQL转换为MapReduce的任务的工具,甚至更进一步可以说hive就是一
个MapReduce的客户端
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
为什么使用 Hive
采用类SQL语法去操作数据,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
功能扩展很方便。
2.2. Hive 架构
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
用户接口: 包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命
令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访
问Hive。
元数据存储: 通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库
中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表
等),表的数据所在目录等。
解释器、编译器、优化器、执行器: 完成HQL 查询语句从词法分析、语法分析、编译、优
化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执
行。
2.3. Hive 与 Hadoop 的关系
Hive利用HDFS存储数据,利用MapReduce查询分析数据
修改hive的配置文件
修改hive-env.sh
修改hive-site.xml
cd /export/servers/apache-hive-2.1.1-bin/conf
cp hive-env.sh.template hive-env.sh
HADOOP_HOME=/export/servers/hadoop-2.7.5
export HIVE_CONF_DIR=/export/servers/apache-hive-2.1.1-bin/conf
cd /export/servers/apache-hive-2.1.1-bin/conf
vim hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
   <name>javax.jdo.option.ConnectionUserName</name>
   <value>root</value>
</property>
<property>
   <name>javax.jdo.option.ConnectionPassword</name>
   <value>123456</value>
</property>
<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://node03:3306/hive?
createDatabaseIfNotExist=true&useSSL=false</value>
</property>
第四步:添加mysql的连接驱动包到hive的lib目录下
hive使用mysql作为元数据存储,必然需要连接mysql数据库,所以我们添加一个mysql的连接
驱动包到hive的安装目录下,然后就可以准备启动hive了
将我们准备好的mysql-connector-java-5.1.38.jar 这个jar包直接上传到
/export/servers/apache-hive-2.1.1-bin/lib 这个目录下即可
至此,hive的安装部署已经完成,接下来我们来看下hive的三种交互方式
第五步:配置hive的环境变量
node03服务器执行以下命令配置hive的环境变量
2.6. Hive 的交互方式
第一种交互方式  bin/hive
<property>
   <name>javax.jdo.option.ConnectionDriverName</name>
   <value>com.mysql.jdbc.Driver</value>
</property>
<property>
   <name>hive.metastore.schema.verification</name>
   <value>false</value>
</property>
<property>
  <name>datanucleus.schema.autoCreateAll</name>
  <value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node03</value>
</property>
</configuration>
sudo vim /etc/profile
export HIVE_HOME=/export/servers/apache-hive-2.1.1-bin
export PATH=:$HIVE_HOME/bin:$PATH

Hive 的基本操作
3.1 数据库操作
3.1.1 创建数据库
说明:hive的表存放位置模式是由hive-site.xml当中的一个属性指定的
cd /export/servers/apache-hive-2.1.1-bin/
bin/hive
create database if not exists mytest;
cd /export/servers/apache-hive-2.1.1-bin
bin/hive -e "create database if not exists mytest;"
cd /export/servers
vim hive.sql
create database if not exists mytest;
use mytest;
create table stu(id int,name string);
bin/hive -f /export/servers/hive.sql
create database if not exists myhive;
use myhive;
3.1.2 创建数据库并指定位置
3.1.3 设置数据库键值对信息
数据库可以有一些描述性的键值对信息,在创建时添加:
查看数据库的键值对信息:
修改数据库的键值对信息:
3.1.4 查看数据库更多详细信息
3.1.5 删除数据库
删除一个空数据库,如果数据库下面有数据表,那么就会报错
强制删除数据库,包含数据库下面的表一起删除
3.2 数据库表操作
3.2.1 创建表的语法:
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
create database myhive2 location '/myhive2';
create database foo with dbproperties ('owner'='itcast',
'date'='20190120');
describe database extended foo;
alter database foo set dbproperties ('owner'='itheima');
desc database extended myhive2;
drop database myhive2;
drop database myhive cascade;
作者: 柠檬leung不酸    时间: 2020-2-3 17:27
过去属于死神,未来属于你自己。——雪莱
作者: 柠檬leung不酸    时间: 2020-2-6 13:18
人生犹如一本书,愚蠢者草草翻过,聪明人细细阅读。为何如此.因为他们只能读它一次。——保罗
作者: 柠檬leung不酸    时间: 2020-2-8 09:57
面对恐惧,擦干眼泪,每一天醒来都要比昨天更坚强。无论你今天要面对什么,既然走到了这一步,就坚持下去,给自己一些肯定,你比自己想象中要坚强!
作者: 柠檬leung不酸    时间: 2020-3-12 22:12
选择了,便走下去。
作者: 柠檬leung不酸    时间: 2020-3-29 18:14
仔细看看周围的人,始终有那么一些人,坚定地在向前走着,他们变成闪闪发光的存在,总觉得他们就像是神似的存在这世界上,可是我们不知道他们到底用了多少努力,才换来了这样的一个他们想要的人生。
作者: 柠檬leung不酸    时间: 2020-4-17 11:00
能坚持学习的人都是最棒的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2