疯狂Hive之Hivean安装部署与交互方式(一)
Hive简介
什么是Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
本质是将SQL转换为MapReduce程序。
主要用途:用来做离线数据分析,比直接用MapReduce开发效率更高。
为什么使用Hive
当直接使用Hadoop MapReduce处理数据所面临的问题
人员学习成本高
MapReduce实现复杂查询逻辑开发难度大
使用Hive
操作接口采用类SQL语法,提供快速开发的能力
避免了去写MapReduce,减少开发人员的学习成本
功能扩展很方便
Hive组件
用户接口:包括CLI、JDBC/ODBC、WebCUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebCUI是通过浏览器访问Hive
元数据存储:通常是存储在关系型数据库如mysql/derby中。Hive将元数据存储在数据库中。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),标的数据所在目录等
解释器、编译器、优化器、执行器:完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行
Hive与Hadoop的关系:Hive利用HDFS存储数据,利用MapReduce查询分析数据
Hive与传统数据库对比
Hive用于海量数据的离线数据分析
Hive具有SQL数据库的外表,但是应用场景完全不同,Hive只适合用来做批量数据统计分析
更直观的对比请看下面这张图
Hive安装部署
Hive安装前需要安装好JDK和Hadoop。配置好环境变量
根据元数据存储的介质不同,分为下面两个版本,其中derby属于内嵌模式。实际生产环境中则使用mysql来进行元数据的存储
内置derby版
解压Hive安装包
bin/hive启动即可使用
缺点:不同路径启动Hive,每一个Hive拥有一套自己的元数据,无法共享
详细步骤:
1、上传Hive安装包
- 解压安装包
解压命令:tar -zxvf apache-hive-1.2.1-bin.tar.gz
- 进入解压包并启动derby版hive
进入启动命令所在目录:cd apache-hive-1.2.1-bin/bin/
启动derby版Hive命令:./hive
- Hive的使用
显示已存在的数据库名称
命令:show databases;
创建数据库
命令:create database gw;
在gw数据库中创建一张表t_user
使用数据库命令:use gw;
创建表命令:create table t_user(id int,username string,password string);
显示数据库中的表
命令:show tables;
注意:derby版元数据与启动路径有关系,如果启动的路径不同,那么就会创建新的元数据(元数据不共享),一般用于测试版使用
Mysql版
解压、修改配置文件
vi conf/hive-site.xml
配置Mysql元数据库信息
详细步骤:
1、上传Hive安装包
2、解压安装包
解压命令:tar -zxvf apache-hive-1.2.1-bin.tar.gz
- yum在线安装mysql数据库
安装命令:yum install mysql mysql-server mysql-devel
安装完成后启动mysql命令:/etc/init.d/mysqld start
进入mysql交互界面命令:mysql
设置mysql用户名与密码
use mysql;
update user set password=password('root') where user='root';
flush privileges;
设置mysql允许远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
退出mysql命令:exit
查看mysql服务是否启动命令:service mysqld status
设置mysql服务开机启动命令:chkconfig mysqld on
- 修改Hive配置文件
进入配置文件所在目录:cd apache-hive-1.2.1-bin/conf/
配置hive-env.sh文件
拷贝hive-env.sh文件命令:cp hive-env.sh.template hive-env.sh
编辑文件:vi hive-env.sh
在hive-env.sh中需要配置hadoop的安装路径
配置hive-site.xml文件
因为文件不存在,所以创建一个hive-site.xml文件
创建命令:vi hive-site.xml
在该文件中编写如下内容
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
</configuration>
添加mysql连接驱动
接下来需要将mysql连接驱动添加到hivean安装包的lib目录下
进入目录:cd apache-hive-1.2.1-bin/lib/
将以下jar包上传到该目录下
5、启动Hive
此时启动Hive,查看在不同路径下启动,元数据是否会共享
在apache-hive-1.2.1-bin路径下输入命令:bin/hive启动Hive,然后创建一个数据库hello,创建完成之后退出Hive
在apache-hive-1.2.1-bin/bin路径下输入命令:./hive启动Hive,查看是否存在hello数据库,如果存在,表示元数据已经共享
Hive的交互方式
方式一:Hive交互shell
此种交互方式就是启动Hive之后,输入一条命令,执行完成之后结果直接跟在后面打印出来。如:
在hello数据库中创建一张t_user表
使用数据库命令:use hello;
创建表命令:create table t_user(id int,username string,password string);
方式二:Hive启动一个服务器,来对外服务
此种方式适用于生产环境,Hive启动一个服务,其他机器可以通过某种方式连接到Hive上
- 启动Hive服务
在node01上启动Hive服务,在apache-hive-1.2.1-bin路径下启动服务命令为:bin/hiveserver2
此时Hive服务启动,并处于阻塞状态,等待其他机器连接
- 将Hive安装包发送到node02上
scp -r apache-hive-1.2.1-bin [email protected]:/root/
- 客户端node02远程连接Hive服务
连接命令:bin/beeline
配置连接协议: ! connect jdbc:hive2://node01:10000
输入访问机器node01上Hive的用户名与密码,此时就能连接Hive服务
此时在node02上输入命令:show databases;
在node01上就会获取到监听内容,并输出OK(如果输入错误命令,在node01上 会打印相应的错误信息)