1.hive产生背景
mapreduce计算过程中,绝大多数的场景,分析结构化的数据,SQL语句处理起来更方便,而且开发成本更低。而使用mapreduce开发的话,无论是人工成本还是代码书写时间成本都会大大提高。
2.hive是什么?
对外提供hql编程(方言版SQL),底层数据存储在hdfs上,将hql语句转换为mapreduce程序运行的数据仓库。
hive是一个工具,基于hadoop,提供hql编程工具,hive为我们提供了一个新的hadoop的操作方式 。
hive相当于hadoop的另一种形式的客户端
3.hive的架构
1)用户接口层
用户直接操作 命令行 jdbc webUI界面
2)thrift server层
是一个跨语言服务平台,jdbc方式才用到
3)元数据库层
hive中存储的数据
① 表中的数据,存储在hdfs上,对应就是一个hdfs路径
② 元数据:描述原始数据(表中数据)的数据(记录表数据和hdfs的路径的对应关系)
对于hive来说,元数据存储的都是结构化数据,元数据不会特别大。元数据存储在传统的关系型数据库。生产上存储在MySQL中,默认hive的元数据存储在derby数据库中。
4)Driver 核心驱动层,包括:
① 解释器:将hql解释成抽象语法树
② 编译器:将hql编译成mapreduce程序
③ 优化器:将上一步编译结果进行优化
④ 执行器:将最终的优化结果提交执行
4.hive的安装之使用默认derby作为元数据存储数据库
1)准备工作
hive是基于hadoop,所以需要保证hadoop可用
安装jdk,搭建hadoop环境,并且配置jdk与hadoop的环境变量
2)hive安装几个节点?
hive相当于一个客户端,所以只需要一个节点
3)安装
使用derby作为元数据库
上传安装包
解压
配置环境变量 hive/bin
(启动:hive 直接启动会报错,不能初始化元数据库的实例对象)
初始化hive的元数据库:schematool -dType derby -initSchema(初始化完成多了两个文件derby.log与metastore_db)
metastore_db:存储数据库中的数据的信息
derby.log:存储的是derby数据库的日志信息
启动:hive
此方式切换目录启动hive的时候还是报错(元数据初始化出错)
即在哪一个目录下初始化,就在当前目录下生成日志和存储数据目录,一旦切换目录执行,就会访问拿不到初始化产生的文件。
一般生产上将元数据库设置为MySQL
5.hive的安装之使用derby作为元数据存储数据库
1)准备工作
hive是基于hadoop,所以需要保证hadoop可用
安装jdk,搭建hadoop环境,并且配置jdk与hadoop的环境变量
2)安装
使用MySQL作为元数据库
① yum 安装MySQL
# 安装 MySQL
yum -y install mysql-server
# root用户启动mysqld主服务
service mysqld start
# 修改密码方式1 进入MySQL中修改密码----update方式
use mysql
delete from user where user='';
update user set password=PASSWORS('123456') where user='root';
flush privillege;
# 修改密码方式1 进入MySQL中修改密码----update方式
set Password='' where user='root';
② hive解压与配置
上传安装包
解压
配置环境变量
创建hive的配置文件 conf/hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>miku</value> <description>password to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value> <description> JDBC connect string for a JDBC metastore. To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL. For example, jdbc:postgresql://myhost/db?ssl=true for postgres database. </description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>Username to use against metastore database</description> </property> </configuration>
③ 引入MySQL驱动包
将MySQL的驱动包放到hive安装目录的lib目录下
④ 初始化元数据库配置
初始化元数据库:schematool -dType mysql -initSchema