随手记一些Hive容易遗漏的点或者问题,之后可能还会继续更新。
1、Hive使用一个inputFormat对象将输入流分割成记录,然后使用一个outputFormat对象来将对象格式化为输出流,再使用一个SerDe在读数据时将记录解析成列,在写数据时将列编码成记录。
2、where条件对分区字段使用UDF可能导致扫全表, 例如时间戳转换函数,是在逐行转换。
3、分桶
分桶可以和分区结合使用
4、可以使用视图来降低查询复杂度、限制基于条件过滤数据。
5、Hive中可以创建索引,不过基本不用。
6、Explain Extended
7、并行执行 JVM重用
8、Groovy
9、HCatalog
10、
Hive CLI会在本地创建如文件名为.history这样的部件,以及会在/tmp目录和hadoop.tmp.dir目录下创建一些条目。
Hive元数据存储连接可能是直接连接到一个JDBC数据库或者通过Thrift进行连接,这些都需要使用用户的身份进行各种操作。
Hadoop的文件用户权限模型(用户、组、其他)和很多其他数据库中用户权限模型有很大差异,数据库中通常对表行或者字段级别进行授权和权限回收操作来进行权限控制。
hive.files,umask.value
hive.metastore.authorization.storage.checks
hive.metastore.executr.setugi
hive授权模式默认不开启 hive.security.authorization.enabled hive.security.authorization.createtable.owner.grants
hive.start.cleanup.scratchdir 默认false ,设置为true的话 每次重启HiveServer服务时会清理掉临时目录
可以设置属性 默认授权
11、Hive是一个胖客户端 web cli thrift 实例都不是完全独立于其他实例的
12、Hive结合zk实现锁 hive.zookeeper.quorum hive.support.concurrency
13、HiveServiceBAction
14、压缩 存档
15、Hive Streaming Transform
Streaming的执行效率通常比编写UDF或改写InputFormat对象的方式要低,序列化反序列化低效,难以调试。
16、RegexSerDe CSVSerDe JSONSerDe
17、hivesever and hivesever2
Hive 内置了 HiveServer 和 HiveServer2 服务,两者都允许客户端使用多种编程语言进行连接,但是 HiveServer 不能处理多个客户端的并发请求,所以产生了 HiveServer2。
HiveServer2(HS2)允许远程客户端可以使用各种编程语言向 Hive 提交请求并检索结果,支持多客户端并发访问和身份验证。HS2 是由多个服务组成的单个进程,其包括基于 Thrift 的 Hive 服务(TCP 或 HTTP)和用于 Web UI 的 Jetty Web 服务器。
HiveServer2 拥有自己的 CLI(Beeline),Beeline 是一个基于 SQLLine 的 JDBC 客户端。由于 HiveServer2 是 Hive 开发维护的重点 (Hive0.15 后就不再支持 hiveserver),所以 Hive CLI 已经不推荐使用了,官方更加推荐使用 Beeline。
18、配置
配置的优先顺序如下 [由低到高]:hive-site.xml
- >hivemetastore-site.xml
- > hiveserver2-site.xml
- > -- hiveconf
- > set