Hive学习笔记(一),Hive学习笔记(


metestore:

metestore包括两部分:服务和后台数据存储,其服务与hive服务在同意jvm中。内嵌作为本地存储的derby数据库实例。
metestore只支持单会话。否则会报该信息:
这里写图片描述

为了是hive支持多会话,必须使用独立的数据库(在同一机器或远程机器),任何兼容jdbc的数据库通过配置下表列出的javax.jdo.option.*属性来供metestore使用。
这里写图片描述
mysql 作为独立的metestore使用,相关配置:
javax.jdo.option.ConnectionURL = jdbc:mysql://host/dbname?createDatabase If Not Exist=true
javax.jdo.option.ConnectionDriverName = com.mysql.jdbc.Driver
还有用户名/密码设置
注意:mysql的jdbc驱动jar文件必须放在hive的类路径中即lib目录中。
远程的metestore
一个或多个远程的metestore服务器与hive服务运行在不同的进程内,这样可将数据库层置于防火墙后,客户端不需要数据库凭证(用户名、密码),从而有更好的可管理性和安全性。
远程metestore配置
hive.metestore.local = false
hive.metestore.urls = metestore的服务器uri(多个服务器用uri用,隔开),uri形式:thrift://host:port 端口号对应启动metestore服务器时所设定的METESTORE_PORT值。

与传统数据库区别:

模式
传统数据库是写时模式,表模式在数据加载时强制确定,加载发现数据不符合模式(数据在写入数据库是对照模式进行检查),拒绝加载数据。
hive是读时模式,hive对数据的验证是在查询是进行
读时模式加载数据快,不用读取数据,然后解析,再序列化以数据库内部格式存入磁盘。数据加载仅仅是复制和移动。这种方法灵活,同一数据有两种模式时,hive可以使用外部表。?? 外部表后面祥看
写时模式可以提升查询性能,因为数据库可以建立索引、可以对数据进行压缩。但加载数据花费更多时间。而且很多时候,模式是未知的。查询尚未确定,也不知道使用何种索引。hive在这些时候可以发挥它的长处。
更新、事物和索引
hive不支持更新、事物和索引,更新操作是通过把数据变换后放入新表实现的,在hive里全表扫描是常态。
hive没有对表的并发访问定义清楚语义 ,应用程序需要自己实现并发或加锁机制。

HiveQL

hive的方言Hiveql不完全支持SQL-92标准,hiveql所不支持的sql-92结构可通过语言的其他特性方便实现:
eg:hiveql不支持select 语句的having 子句,但可以通过from子句添加一个子查询。
SQL和HiveQL 的概要比较:
这里写图片描述
这里写图片描述

数据类型

hive支持原子和复杂数据类型。原子类型包括:数值型、布尔型和字符串类型,复杂数据类型包括数组、映射和结构。
hive数据类型表:
这里写图片描述
这里写图片描述
基本数据类型:
hive只支持原子数据类型很小的一部分,hive目前不支持时间相关的数据类型(日期和时间),它提供把unix时间戳(以整形存放)到字符串的转换函数。对大多数的常用日期操作,在hive中可以实现。
hive中的原子数据类型,基本上对应于java中的类型。有四种有符号整数类型:TINYINT、SMALLINT、INT、BIGINT分别等价于java的byte,short,int,long原子类型。
hive的浮点数据类型float和double,对应与java的float和double类型,但hive不提供控制有效数字和小数位置的选项。
hive boolean 类型用于存储真值(true)和假值(false),hive提供一种存储文本的数据类性STRING,类似其他数据库的varchar,但它没有声明最多能存储多少个字符数据,理论上最多2GB,但这种数据量,效率会很低,这时候引入对大对象支持的工具--SQOOP。

总结:

主要学习hive的metestore,hive与传统数据库的区别及其数据类型,metestore内嵌是以derby作为数据库实例,只支持单会话,可以用mysql替代,hive对数据的验证是在查询时进行,hive数据类型分为原子类型和复杂类型,原子分为数值型、布尔型和字符串类型,复杂数据类型包括数组、映射和结构。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关内容