最近工作中使用Hive,对于Hive的一些概念性知识,特别是一些Yes/No的问题,予以记录,不咎原理(有必要会另记下来),只求清晰,持续更新。
Hive有索引吗?
有
Hive库表元信息存在哪?
存在关系型数据库中,Hive通过JDBC和关系型数据库连接,默认使用derby数据库,存储于本地位置,可通过配置文件修改JDBC连接配置,从而改变和元数据存储位置。
实际数据存在哪?
存储于文件系统中,如HDFS,S3,Alluxio
Hive和Hbase的关系?
HIVE是适应与大数据生态的数据查询工具,HIVE不是一个完整的数据库,HDFS的限制导致HIVE不能进行数据条目级别的操作,如条目的增加,删除,修改。
而HBase具有更多的数据库特性,包括条目的增删改,但Hbase不提供SQL查询语言,Hive和Hbase可以联用。
One more question:HBase是怎么做到这些数据库特性的?
之所以能实现数据库特性是因为HBase使用了缓存存储操作日志,然后定期将日志与HDFS同步
更多关于Hive和Hbase:Hive与Hbase区别
什么是列存储?
同一表中的不同列可以分开存储,列存储在查询只涉及有限列的情况下,可以大幅减少数据访问,提高速度
Hive和Hadoop?
Hive的存储可以使用HDFS,大部分HiveSQL会转化为MapReduce任务
什么是内部表,外部表?
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
Hive的使用方式?
CLI
HiveServer2
HCatlog
WebHcat
Hive支持事务吗?
支持
Hive的Log?
使用log4j,log的设置在/HIVE_HOME/conf/hive-log4j.properties中
例如:hiveconf hive.root.logger=DEBUG,console 设置日至输出等级和位置
Hive的配置项?
1,使用配置文件进行配置
/HIVE_HOME/conf
hive-default.xml
hive-log4j.propertites
hive-env.sh
hive-site.xml
2,使用命令行进行配置
hive –hiveconf hive.root.logger=INFO,console //for HiveCLI (deprecated)
hiveserver2 –hiveconf hive.root.logger=INFO,console
Hive继承它基于的HDFS所有配置,在此基础上可以添加和修改;
在命令行中输入:“set -v”可以打印与HDFS配置不同的配置项
Hive的数据组织?
Databases-Tables-Partitions-Buckets
Hive一次指令
usage: hive
-d,--define <key=value> Variable subsitution to apply to hive
commands. e.g. -d A=B or --define A=B
--database <databasename> Specify the database to use
-e <quoted-query-string> SQL from command line
-f <filename> SQL from files
-H,--help Print help information
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable subsitution to apply to hive
commands. e.g. --hivevar A=B
-i <filename> Initialization SQL file
-S,--silent Silent mode in interactive shell
-v,--verbose Verbose mode (echo executed SQL to the
console)
hive -e "select * from XXX"
hive -e "select * from XXX" > result.txt
hive -f XXXX.hql
Hive CLI可以使用Shell和Hadoop指令
Shell:
! + shell命令
Hadoop:
dfs ... 省略hadoop前缀