初识HIVE
前言:
之前虽然了解HIVE,但是也只是在hql层面上的了解,于是重新学习一下HIVE,把自己的一些心得和常用笔记整理到博客里面
一.HIVE的背景
数据存储在HDFS(分布式存储框架),举个简单的例子,如果需要在HDFS上面做个WC(wordcount),都需要经过mr(mapreduce),如果数据量过多,mr的job会花费大量的时间,但是对于熟悉SQL的人来说,其实wc的本质就是一个group by ,明明一个语句可以写好的,但是mr还需要写map、reduce,代码过于冗杂。于是HIVE诞生了,HIVE默认的metadata数据存储在Derby(一个HIVE内置的数据库),但是我们一般会把metadata存储在mysql里面,可以通过hive-site.xml来配置。
一开始HIVE并不支持crud,但是在0.14版本才推出crud,虽然HIVE也支持事务,但是在日常中事务几乎很少使用,日常只把HIVE作为一个数仓来使用
二.HIVE的介绍
HIVE是有facebook开源的,官网地址:http://hive.apache.org/
用于解决海量结构化的日志数据统计问题
构建在Hadoop(HDFS/MapReduce/YARN)之上的数据仓库
HIVE数据存储在HDFS,常用的执行引擎有:MapReduce/Tez/Spark,作业提交到YARN上面进行调度
三.HIVE架构
client:SQL==>生成逻辑执行计划==》优化执行计划==》生成物理执行计划==》优化==》Execution:执行
四.HIVE的部署
上篇博客已经写了:https://blog.csdn.net/qq_41301707/article/details/103569397
五.HIVE的基础语句
创建数据库语句:
hive (default)> create database xkhive;
创建表语句:
hive (default)> create table stu (id int,age int);
数据默认存储路径:
[[email protected] /]$ hdfs dfs -ls /user/hive/warehouse
19/12/16 22:21:56 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 3 items
drwxr-xr-x - hadoop supergroup 0 2019-12-16 22:20 /user/hive/warehouse/stu
drwxr-xr-x - hadoop supergroup 0 2019-12-16 22:19 /user/hive/warehouse/xkhive.db
/user/hive/warehouse/stu:这个路径是刚才创建表的文件夹
/user/hive/warehouse/xkhive.db:这个路径是刚才创建database的路径
其他的一些DDL语句和MySQL基本一致
MySQL基本语句博客:https://blog.csdn.net/qq_41301707/article/details/83755480
六.HIVE的log日志配置
[[email protected] hive]$ cd conf/
[[email protected] conf]$ ll
总用量 28
-rw-r--r--. 1 hadoop hadoop 1196 6月 3 2019 beeline-log4j.properties.template
-rw-rw-r--. 1 hadoop hadoop 715 12月 16 20:49 derby.log
-rw-r--r--. 1 hadoop hadoop 2378 6月 3 2019 hive-env.sh.template
-rw-r--r--. 1 hadoop hadoop 2662 6月 3 2019 hive-exec-log4j.properties.template
-rw-r--r--. 1 hadoop hadoop 3505 6月 3 2019 hive-log4j.properties.template
-rw-rw-r--. 1 hadoop hadoop 770 12月 16 20:43 hive-site.xml
-rw-r--r--. 1 hadoop hadoop 2060 6月 3 2019 ivysettings.xml
drwxrwxr-x. 5 hadoop hadoop 133 12月 16 20:49 metastore_db
[[email protected] conf]$ cp hive-log4j.properties.template hive-log4j.xml
[[email protected] conf]$ vim hive-log4j.xml
hive.log.dir=/home/hadoop/app/hive/log
启动一下HIVE,测试一下logs是否产生,发现日志还是记录在/tmp/hadoop/hive.log
hive (default)> select * from stu;
OK
stu.id stu.age
1 20
Time taken: 0.056 seconds, Fetched: 1 row(s)
[[email protected] log]$ pwd
/home/hadoop/app/hive/log
[[email protected] log]$ ll
总用量 0
后来排查发现是log4j的配置文件名称不对,并没有启动我配置的参数,于是改下配置文件名称
[[email protected] conf]$ mv hive-log4j.xml hive-log4j.properties
重启下HIVE
[[email protected] conf]$ hive
which: no hbase in (/home/hadoop/app/hive/bin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin)
19/12/16 22:39:59 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Logging initialized using configuration in file:/home/hadoop/app/hive-1.1.0-cdh5.16.2/conf/hive-log4j.properties
WARNING: Hive CLI is deprecated and migration to Beeline is recommended.
hive (default)> select * from stu;
OK
stu.id stu.age
1 20
Time taken: 5.282 seconds, Fetched: 1 row(s)
发现日志已经写入了
七.HIVE的命令行交互
-e:不需要进入hive命令后,就可以跟上sql语句查询
-f:执行指定文件(内容是SQL语句)
eg:
1.[[email protected] tmp]$ hive -e "select * from stu;"
which: no hbase in (/home/hadoop/app/hive/bin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin)
19/12/16 22:44:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Logging initialized using configuration in file:/home/hadoop/app/hive-1.1.0-cdh5.16.2/conf/hive-log4j.properties
OK
stu.id stu.age
1 20
Time taken: 4.861 seconds, Fetched: 1 row(s)
2.[[email protected] tmp]$ vim demo.sql
select * from stu;
[[email protected] tmp]$ hive -f demo.sql
which: no hbase in (/home/hadoop/app/hive/bin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/bin/java/bin:/home/hadoop/app/hadoop/bin:/home/hadoop/app/hadoop/sbin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin)
19/12/16 22:45:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Logging initialized using configuration in file:/home/hadoop/app/hive-1.1.0-cdh5.16.2/conf/hive-log4j.properties
OK
stu.id stu.age
1 20
Time taken: 4.53 seconds, Fetched: 1 row(s)\\
可以把hql语句通过命令行的形式来进行操作HIVE中的数据,可以使用crontab来进行调度