hive学习笔记
一、hive入门
1.1 什么是hive
Hive:由Facebook开源用于解决海量结构化日志的数据统计。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能
hive就像是Hadoop的客户端,自己只做(翻译官)
本质是:将HQL转化成MapReduce程序
- Hive处理的数据存储在HDFS
- Hive分析数据底层的实现是MapReduce
- 执行程序运行在Yarn上
1.2 hive架构原理
hive架构原理.PNG
- 用户接口:Client
CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive) - 元数据:Metastore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore - Hadoop
使用HDFS进行存储,使用MapReduce进行计算。 - 驱动器:Driver
(1)解析器(SQL Parser):
将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):
将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):
对逻辑执行计划进行优化。
(4)执行器(Execution):
把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
二、hive安装部署
2.1 hive安装
2.1.1 hive依赖的环境
- 把apache-hive-1.2.1-bin.tar.gz上传到linux的/opt/software目录下
- 解压apache-hive-1.2.1-bin.tar.gz到/opt/module/目录下面
[tldq@centos1 software]$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/module/
- 修改apache-hive-1.2.1-bin.tar.gz的名称为hive
[tldq@centos1 module]$ mv apache-hive-1.2.1-bin/ hive
- 修改/opt/module/hive/conf目录下的hive-env.sh.template名称为hive-env.sh
[tldq@centos1 conf]$ mv hive-env.sh.template hive-env.sh
- 配置hive-env.sh文件
(a)配置HADOOP_HOME路径(b)配置HIVE_CONF_DIR路径export HADOOP_HOME=/opt/module/hadoop
export HIVE_CONF_DIR=/opt/module/hive/conf
2.1.2 Hadoop集群配置
- 必须启动hdfs和yarn
[tldq@centos1 hadoop]$ sbin/start-dfs.sh
[tldq@centos2 hadoop]$ sbin/start-yarn.sh
- 在HDFS上创建/tmp和/user/hive/warehouse两个目录并修改他们的同组权限可写
[tldq@centos1 hadoop]$ bin/hadoop fs -mkdir /tmp
[tldq@centos1 hadoop]$ bin/hadoop fs -mkdir -p /user/hive/warehouse
[tldq@centos1 hadoop]$ bin/hadoop fs -chmod g+w /tmp
[tldq@centos1 hadoop]$ bin/hadoop fs -chmod g+w /user/hive/warehouse
2.1.3 Hive基本操作
(1)启动hive
[tldq@centos1 hive]$ bin/hive
(2)查看数据库
hive> show databases;
(3)打开默认数据库
hive> use default;
(4)显示default数据库中的表
hive> show tables;
(5)创建一张表
hive> create table student(id int, name string);
(6)显示数据库中有几张表
hive> show tables;
(7)查看表的结构
hive> desc student;
(8)向表中插入数据
hive> insert into student values(1000,"ss");
(9)查询表中数据
hive> select * from student;
(10)退出hive
hive> quit;
2.2 安装MySql
2.2.1 安装包准备
- 查看mysql是否安装,如果安装了,卸载mysql(如果没有,就不用卸载)
(1)查看(2)卸载[root@centos1 桌面]# rpm -qa|grep mysql mysql-libs-5.1.73-7.el6.x86_64
[root@centos1 桌面]# rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
- 解压mysql-libs.zip文件到当前目录
[root@centos1 software]# unzip mysql-libs.zip [root@centos1 software]# ls mysql-libs.zip mysql-libs
- 进入到mysql-libs文件夹下
[root@centos1 mysql-libs]# ll 总用量 76048 -rw-r--r--. 1 root root 18509960 3月 26 2015 MySQL-client-5.6.24-1.el6.x86_64.rpm -rw-r--r--. 1 root root 3575135 12月 1 2013 mysql-connector-java-5.1.27.tar.gz -rw-r--r--. 1 root root 55782196 3月 26 2015 MySQL-server-5.6.24-1.el6.x86_64.rpm
2.2.2 安装MySql服务器
- 安装mysql服务端
[root@centos1 mysql-libs]# rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm
- 查看产生的随机密码
[root@centos1 mysql-libs]# cat /root/.mysql_secret OEXaQuS8IWkG19Xs
- 查看mysql状态
[root@centos1 mysql-libs]# service mysql status
- 启动mysql
[root@centos1 mysql-libs]# service mysql start
2.2.3 安装MySql客户端
- 安装mysql客户端
[root@centos1 mysql-libs]# rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm
- 链接mysql