一、Hive的概念介绍(相当于Hadoop的客户端)
1> Hive处理的数据存储在HDFS中
2>Hive分析数据的底层是MR(在安装完Hive的时候它底层已经完成了对应SQL语句和MR编程的对应关系的模板的写入,将所有MR模板封装在Hive中),而当客户端输入的SQL语句时,就会根据这些模板来进行对应地翻译成MR程序,并打成jar包,在YARN上运行
3>执行在YARN上
本质:将HQL转化成MR程序
二、Hive数据查询
在Hive中的数据查询是基于HDFS的,而默认的处理HDFS的目录我是在/user/hive/warehous e里面的。因此,在hive中查询数据需要两个关键组成部分:元数据,HDFS是否有数据;
元数据,就是描述数据的数据,存储包括表的各种属性等数据;
HDFS中的数据,就是Hive根据对应的表的信息去HDFS的默认处理路径对指定目录(即表名)进行对应的SQL操作。
总而言之,在Hive中查询数据,查询的表就对应HDFS默认路径下的目录,SQL语句处理的数据就是对应目录下的所有文件(相当于将SQL语句翻译成MR程序对HDFS中的文件进行一定的操作)。并且当db表迁移到mysql数据库中,就可以允许多个客户端同时访问hive
三、Hive的其他交互方式(不进入hive交互页面执行sql,适用于脚本封装命令)
①hive -e "sql语句"-------执行完后输出结果退回命令行
②hive -f 文件路径---------执行文件内的sql语句输出结果后退回命令行
③在hive交互页面中,使用dfs -ls 目录 可以直接查看HDFS中的目录信息
linux小知识:cd - 可以回到上一次的目录
四、Hive的参数配置
1、在hive交互页面中直接使用set;可以直接查看所有配置信息(包括hadoop的)
2、参数配置的三种方式
Ⅰ配置文件方式
默认配置文件:hive-default.xml
用户自定义配置文件:hive-site.xml
用户自定义配置会直接覆盖默认配置,并且hive也会读入Hadoop的配置,因为Hive是作为Hadoop的客户端来启动的,Hive的配置会覆盖掉Hadoop的配置
Ⅱ 命令行参数方式(仅对本次启动的hive有效)---用于脚本封装(与之前的交互方式交替使用)
hive -hiveconf key=value(key是要修改的参数名,value是目标参数值)
Ⅲ 参数声明形式
在HQL中直接set key=value
⭐关于在hive交互界面使用count(*)显示出来的数据数量与实际用select语句显示出来的不同:
之前的实验是将数据put进HDFS,再用HQL语句进行筛选,但是count(*)是走元数据库,并不是通过HDFS;因此,使用count(*)显示出来的只能是修改了元数据库的语句(insert),而不能针对HDFS的修改进行改变数值
五、HIve的数据类型
与java基础数据类型的对比:
hive中独有的复杂数据类型:
STRUCT: 类似于Java中的Bean
MAP:键值对
ARRAY:类似于Java中的列表
而不同复杂数据类型之间允许任意层次的嵌套
实例:
在hive中抽象的表如下图所示:
{"name": "songsong","friends": ["bingbing" , "lili"] , // 列表