Hive Day06
hive的shell
进入hive的客户端之后的
quit 退出hive的客户端
set key=value 进入hive的客户端之后参数设置的
key:hive-default.xml hive-site.xml <name>key</name>
这种参数设置只对当前的客户端生效
当前客户端退出,则参数失效
set key 查看指定的参数的值
set -v 打印所有的hive或Hadoop的参数配置
add File [file] 添加文件到hive的classpath下
add jar jarname UDF中 添加jar文件到hive的classpath下
list FILE/files
list jar/jars 查看当前的classpath下的文件或jar包资源
!linux命令, 在hive客户端执行linux命令,只能执行查询相关的命令
dfs [dfs cmd] 在hive的客户端执行hdfs相关的命令
hadoop fs -ls / # 1.0的命令
hdfs dfs -ls / # 2.0的命令
hadoop/hdfs 是开启hadoop/hdfs的客户端;而hive也是hdfs的客户端;所以直接从dfs开始;例如 dfs ls /
query ddl dml操作
source File 在hive的客户端执行执行sql脚本;
source sql脚本的位置,执行一个sql脚本
进入hive的客户端之前的
语法结构
hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e]
说明:
1. -i 从文件初始化 HQL
2. -e 从命令行执行指定 HQL
3. -f 执行HQL脚本
4. -v 输出执行的HQL语句到控制台
5. -p
6. -hiveconf x=y
7. -S 表示以不打印日志的形式执行命令操作
-hiveconf key=value
在启动hive之前,设置hive的相关参数
hive -hiveconf hive.exec.mode.local.auto=true
每次只能初始化一个参数
-i init 从文件初始化hive的相关参数
一次性在启动hive的时候初始化多个参数
-e hql 不进入hive客户端的情况下,执行hql语句;
hive -e "show databases;"
注意:执行查询语句的时候,表明之前一定加上库名的
-f 执行一个hql语句的脚本
source
hive -f
hive的执行过程
接口层
thift server
元数据
驱动层(解释器,编译器,优化器,执行器)
解释器:将hql语句 ---- 语法树 一组操作符构成的
查看hive语句的执行计划
explain HQL语句 # 查看当前hql语句的执行计划
stage 表示阶段;
第一个阶段是根阶段;
每个阶段都是依赖上一个阶段的;
hql语句最终转换为操作符:
Fetch Operator 数据抓取操作符; hdfs操作
Fileter Operator 过滤操作符
Map join Operator 关联操作符 ; mapreduce操作
Group by Operator 分组操作符
limit -1; 表示没有指定limit,表示全表抓取
hive首先将hql语句转换成一组操作符的树;
操作符是hiv而处理数据的最小单元;
操作符:
-
可以是hdfs的读写操作, fetch;
-
MapReduce任务
几个语句的执行过程
join
mapjoin
大*小
小*小
将其中一个小表放在每一个maptask的节点的缓存中,
在map端;setup中读取缓存中的表,放在map中,key=关联键,value=其他键,map中读取另外一个表进行关联;
reducejoin
map端:key:关联键,value:打标记+其他键;
reduce端:两个表中关联键相同的所有的数据,直接进行关联;
group by的执行过程
select pageid,age,count(1) from pv_users group by pageid,age;
map端:key:pageid,age; value:1;
reduce端:对value求和就可以了;
注意: 当group by和聚合函数一起使用的时候,hive会默认进行优化;
sum,max,min等的时候会现在map端执行combiner
去重(distinct)
将需要去重的字段放在map端的key只能够,这样的话在reduce端就会分到一组,一组中取一个;
map端:key:age,pageid;reduce:其他


浙公网安备 33010602011771号