目录

通过写sql的方式去对数据的分析处理,就不需要用MR了(太很麻烦),但是底层实现还是使用MR,只不过我们不用自己写
(1)操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。
(2)避免了去写 MapReduce,减少开发人员的学习成本。
(3)Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。
(4)Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较 高。
(5)Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
1)Hive 的 HQL 表达能力有限
(1)迭代式算法无法表达
(2)数据挖掘方面不擅长,由于 MapReduce 数据处理流程的限制,效率更高的算法却 无法实现。
2)Hive 的效率比较低
(1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
(2)Hive 调优比较困难,粒度较粗
架构图:

Hive的元数据是存在第三方derby数据库中,我们要换成mysql(可以多个窗口进行分析处理)。要分析的数据再HDFS中
1)用户接口:Client
CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive)、WEBUI(浏览器访问hive)
2)元数据:Metastore
元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、 表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore
3)Hadoop
使用 HDFS 进行存储,使用 MapReduce 进行计算。
4)驱动器:Driver
(1)解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第 三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。
(2)编译器(Physical Plan):将 AST 编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来 说,就是 MR/Spark。









2、第11条如果不执行会导致只能localhost进行连接mysql,无法其他ip(及远程连接)进行连接
1、对用户表的更改都需要flush刷新。

由于整套逻辑是使用的hadoop,因此该日志jar包要进行改名或者删除,然后去使用的hadoop的日志文件即可解决jar包冲突


- <configuration>
- <property>
- <name>javax.jdo.option.ConnectionURLname>
- <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=falsevalue>
- property>
-
- <property>
- <name>javax.jdo.option.ConnectionDriverNamename>
- <value>com.mysql.jdbc.Drivervalue>
- property>
-
- <property>
- <name>javax.jdo.option.ConnectionUserNamename>
- <value>rootvalue>
- property>
-
- <property>
- <name>javax.jdo.option.ConnectionPasswordname>
- <value>000000value>
- property>
-
- <property>
- <name>hive.metastore.schema.verificationname>
- <value>falsevalue>
- property>
-
- <property>
- <name>hive.metastore.event.db.notification.api.authname>
- <value>falsevalue>
- property>
-
- <property>
- <name>hive.metastore.warehouse.dirname>
- <value>/user/hive/warehousevalue>
- property>
- configuration>
-



1、元数据服务可有可无
2、只要配置了元数据服务,就必须要启动元数据服务


- #!/bin/bash HIVE_LOG_DIR=$HIVE_HOME/logs if [ ! -d $HIVE_LOG_DIR ] then
- mkdir -p $HIVE_LOG_DIR
- fi
- #检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
- function check_process()
-
- pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print
- $2}')
- ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut - d '/' -f 1)
- echo $pid
- [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
- }
-
- function hive_start()
- {
- metapid=$(check_process HiveMetastore 9083)
- cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1
- &"
- [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动" server2pid=$(check_process HiveServer2 10000)
- cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
- [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
- }
-
- function hive_stop()
- {
- metapid=$(check_process HiveMetastore 9083)
- [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动" server2pid=$(check_process HiveServer2 10000)
- [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
- }
-
- case $1 in "start")
- hive_start
- ;;
- "stop")
- hive_stop
- ;;
- "restart")
- hive_stop sleep 2 hive_start
- ;;
- "status")
- check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行 正常" || echo "Metastore 服务运行异常"
- check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运 行正常" || echo "HiveServer2 服务运行异常"
- ;;
- *)
- echo Invalid Args!
- echo 'Usage: '$(basename $0)' start|stop|restart|status'
- ;;
- esac

杀死全部的RunJar:
总结:hive是直连的,beeline是通过HS2再连接到hive的。而hive又通过metastore服务连接到mysql(不开启该服务就是直连)


在beeline中使用!quit退出



因为在配置文件里已经进行过修改配置,因此会永久生效;而该方法可以暂时更改配置信息,且只针对当前客户端有效,不会影响当前客户端