设为首页 加入收藏

TOP

大数据(十八):Hive元数据配置、常见属性配置、数据类型与数据转换
2019-03-19 12:58:48 】 浏览:45
Tags:数据 十八 Hive 配置 常见 属性 类型 转换

一、Hive元数据配置到MySQL当中

为什么要把Hive的元数据配置到MySql中?我们可以使用多个客户端连接linux系统并且都尝试启动Hive,可以发现在启动第二个Hive客户端的时候发生报错了。

那是应为在默认的情况下,Hive元数据被保存在内嵌的Derby数据库中,只允许一个会话的连接。在开发的时候多人使用这个Hive的将会变得非常恶心。我们通过将元数据配置到MySQL中,让其支持多个会话的连接。

1.安装MySQL,参考网站:https://blog.csdn.net/qq_17776287/article/details/53536761

2.下载mysql对应的连接驱动包。

3.将下载好的mysql连接驱动上传到/usr/local/hive/lib文件夹下(hive目录下的lib文件夹里)

4.在/usr/local/hive/conf(hive目录下的conf文件夹里)目录下创建一个hive-site.xml文件

5.根据官方文档的配置参数,拷贝数据到hive-site.xml文件中

官方文档:https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

具体配置如下(对应的地方改成你自己的配置):

<xml version="1.0">
<xml-stylesheet type="text/xsl" href="configuration.xsl">
<configuration>
 <property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://{mysql所在服务器的host}:{mysql连接端口}/{数据库名称}createDatabaseIfNotExist=true</value>
  </property>
  <property>
   <name>javax.jdo.option.ConnectionDriverName</name>
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
   <name>javax.jdo.option.ConnectionUserName</name>
   <value>{mysql用户名}</value>
  </property>
  <property>
   <name>javax.jdo.option.ConnectionPassword</name>
   <value>{mysql用户密码}</value>
  </property>
</configuration>

6.配置完毕后,如果启动hive异常,可以重新启动一下机器。(重启后别忘记启动hadoop集群)

二、hive常用交互命令参数

-help:帮助命令

-e:不进入hive的交互窗口执行SQL语句,例如:hive -e "select id from student;"

-f:执行脚本文件中的sql语句,例如:hive -f /opt/sql/hivef.sql

执行文件中的sql语句并将结果写入文件中,hive -fopt/sql/hivef.sql > /opt/sql/hive_result.txt

三、hive其他的命令操作

1.在hivecli命令窗口中使用hdfs文件系统命令

例如:查看hdfs文件系统:dfs -ls /;

2.在在hivecli命令窗口中使用本地文件系统命令

例如:查看linux下文件系统:! ls /;

3.查看hive中输入的所有历史命令

进入~目录下,“.hivehistory”文件中存放着历史命令

四、Hive常见属性配置

1.hive数据仓库位置配置

  1. Default数据仓库的最原始位置是hdfs上的:/user/hive/warehouse路径下

  2. 在仓库目录下,没有对默认的数据库default创建文件夹。如果某张表属于default数据库,直接在数据仓库目录下创建一个文件夹。

  3. 修改default数据仓库原始位置(在hive-site.xml中修改)

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>{新的位置}</value>
</property>

2.显示当前数据库名称和查询表的表头信息

在hive-site.xml中添加如下信息

<property>
  <name>hive.cli.print.header</name>
  <value>true</value>
</property>
<property>
  <name>hive.cli.print.current.db</name>
  <value>true</value>
</property>

修改之后效果如下:

3.Hive运行日志信息配置

  1. hive的log默认存放在/tmp/{当前用户名}/hive.log目录下

  2. 修改hive的log存放日志到/usr/local/hive/logs

    1. 修改/usr/local/hive/conf/hive-log4j.properties.template文件名称为hive-log4j.properties

    2. 在hive-log4j.properties文件中修改log存放位置

hive.log.dir=/usr/local/hive/logs

四、参数配置方式

1.查看当前配置信息

hive客户端中输入set命令

2.参数配置的三种方式

  1. 配置文件配置

    默认的配置文件:hive-default.xml

    用户自定义配置文件:hive-site.xml (需要直接新建文件)

    用户自定义的配置会覆盖掉默认配置。另外,hive也会读取Hadoop的配置,hive是作为Hadoop的客户端启动的,hive的配置会覆盖掉hadoop的配置。配置文件的设定对所有本机启动的hive进程都起效。

  2. 命令行参数设置

    例如:启动hive是,在命令行添加-hiveconfparam=value来设定参数,hive -hiveconfmapred.reduce.tasks=10;

    仅对本次hive启动有效

  3. 参数声明方式

    可以在HQL中使用set关键字设定参数,setmapred.reduce.tasks=10;

    仅对本次hive启动有效

上述三种设定方式的优先级依次递增。配置文件<命令行参数<参数声明。注意某些系统级的参数,例如log4j相关的设定,必须用前两种方式设定,这些参数的读取在会话建立之前就完成了。

五、Hive数据类型

1.基本数据类型

Hive数据类型

Java数据类型

长度

TINYINT

byte

1byte有符号整数

SMALINT

short

2byte有符号整数

INT

int

4byte有符号整数

BIGINT

long

8byte有符号整数

BOOLEAN

boolean

布尔型,true或者false

FLOAT

float

单精度浮点型

DOUBLE

double

双精度浮点型

STRING

string

字符串

TIMESTAMP

时间类型

BINART

字节数组

对于hive的String类型响度与数据库的varchar类型,这个类型是一个可变的字符串,不过他不能声明其中最多能储存多少个字符,理论上它可以存储2GB的字符数

2.集合数据类型

数据类型

描述

STRUCT

C语言中的struct类似,都可以通过“点”符号访问元素类容

Map

Map是一组键值对元组集合,使用数组表示法可以访问数据。

ARRAY

数组是一组具有相同类型和名称的变量集合。

Hive有三种复杂数据类型ARRAY、MAP和STRUCT。ARRAY和MAP与java中的array和map相似,二struct与c语言中的Struct类似,他封装了一个命名字段集合,复杂数据类型运行任意层次的嵌套。

六、数据类型实例

1.假设某表有如下一行,我们用JSON格式来表示其数据结构。在Hive下访问的格式为

{
"name": "songsong",
"friends": ["bingbing" , "lili"] , //列表Array,
"children": {         //键值Map,
  "xiao song": 18 ,
  "xiaoxiao song": 19
}
"address": {         //结构Struct,
  "street": "hui long guan" ,
  "city": "beijing"
}
}

2.基于上述数据结构,我们在Hive里创建对应的表,并导入数据。

创建本地测试文件test.txt

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing

3. Hive上创建测试表test

create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

4.导入文本数据到测试表(hive客户端中执行)

load data local inpath '/{文件路径}/test.txt' into table test;

5.访问三种集合列里的数据,以下分别是ARRAY,MAP,STRUCT的访问方式

select friends[1],children['xiao song'],address.city from test where name="songsong";

七、数据类型转换

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST 操作。

1.隐式类型转换规则如下。

  1. 任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。

  2. 所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。

  3. TINYINT、SMALLINT、INT都可以转换为FLOAT。

  4. BOOLEAN类型不可以转换为任何其它的类型。

2.可以使用CAST操作显示进行数据类型转换,例如CAST('1' AS INT)将把字符串'1' 转换成整数1;如果强制类型转换失败,如执行CAST('X' AS INT),表达式返回空值 NULL。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Hive】HiveQL实战之分析函数&窗.. 下一篇Hive 内部表和外部表的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目