Hive下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/hive/, 选择想用的版本, 这里笔者使用apache-hive-1.2.1-bin.tar.gz. 注意下载链接中只有1.2.2版本, 原因可能是老版本不再发布, 但1.2.1与1.2.2几乎无差别.
下载完成之后, 通过传输工具(Xftp,filezilla等)将Hive安装包上传到集群的node01和client节点上.
解压Hive安装包:
tar -zxf apache-hive-1.2.1-bin.tar.gz -C /opt/software/hive
修改hive-site.xml.template文件名称:
cd /opt/software/hive/apache-hive-1.2.1/conf
cp hive-default.xml.template hive-site.xml
在Hive简介中我们说过, Hive依赖关系型数据库存储元数据信息. Derby是Hive默认的元数据库(Metastore).
这种搭建方式是最简单的, 只需在改名后的hive-site.xml中稍作修改即可.
打开hive-site文件:
vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml
首先删除<configuration> configuration>标签对中的内容然后加入以下内容
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:derby:;databaseName=metastore_db;create=truevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>org.apache.derby.jdbc.EmbeddedDrivervalue>
property>
<property>
<name>hive.metastore.localname>
<value>truevalue>
property>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
property>
Hive依赖于HDFS和MapReduce, 因此在启动Hive之前, 应先启动HDFS和Yarn(如果没有使用SQL语句可以不用启动Yarn).
启动Hive, 进入Hive Shell (需要先配置环境变量)
hive
此时, 启动Hive会报java.lang.IncompatibleClassChangeError的错, 解决方法点此查看
需要注意:
上文提到Derby存在缺陷, 为了弥补这方面的不足, 基本上是使用mysql数据库来存储Hive的元数据. 基于MySQL其实就是使用mysql来代替derby.
这种存储方式需要在本地运行一个mysql服务器, 然后再配置Hive.
由于client上有Hadoop的安装包并配置HADOOP_HOME, 即能找到Hadoop的配置文件, 因此client端搭建Hive可以操作Hadoop集群.
yum install mysql-server -y
service mysqld start
查看mysql状态:
service mysqld status
先登录mysql
mysql -uroot -p77123
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '77123' WITH GRANT OPTION;
注意这里*IDENTIFIED BY ‘77123’*是我本地mysql的root用户密码, 修改权限时需要改成对应mysql的密码.
use mysql;
delete from user where host like '%127%';
user 表中多余的数据字段可能会对权限造成影响. 最终结果如下:
CREATE USER 'hive'@'%' IDENTIFIED BY '77123';
CREATE DATABASE hive_meta;
grant all privileges on hive_meta.* to hive@"%" identified by '77123';
虽然hive用户对hive_meta数据库有操作权限, 但如果这个数据库不存在, hive用户是没有权限创建这个数据库的, 所以需提前创建好hive_meta数据库.
flush privileges;
chkconfig mysqld on
这种搭建方式是最简单的, 只需在改名后的hive-site.xml中稍作修改即可.
打开hive-site文件:
vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml
首先删除<configuration> configuration>标签对中的内容然后加入以下内容
<configuration>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive_localmysql/warehousevalue>
property>
<property>
<name>hive.metastore.localname>
<value>truevalue>
property>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://localhost/hive_metavalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>hivevalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>77123value>
property>
configuration>
操作和出现的问题与Derby模式同样, 此处不再赘述.
当创建一个表之后, 在mysql的hive_meta数据库中, 有个TBLS表, 通过select * from TBLS
可以看到在Hive中创建的表本身的信息(即元数据).
同时, 基于mysql允许多个用户同时访问Hive工具.
在搭建之前, 我们先来了解一下基于MySQL远程模式的原理.
client节点上的Hive工具提供元数据存储服务. 启动该服务后, client节点会启动一个RunJar进程, 这个进程对外提供元数据服务.
在其他节点(比如node01)上, 解压一个Hive工具, 通过配置hive-site.xml文件, 使得node01节点的Hive工具能够连接到client节点提供的元数据服务.
这中模式最大的优点在于 – 解耦. 对应上图来说, node01节点不需要再安装mysql数据库, 而且如果有其它节点(比如node02)需要使用Hive工具, 只要解压简单一配置就可以操作同一个库中的数据(因为都是使用同一个mysql), 从而避免集群数据的隔离问题.
这种方式首先也是需要在client节点安装mysql数据库, 具体流程此处就不再赘述, 跟第二种模式中说明的流程一致.
服务端搭建与mysql的本地模式一致.
打开hive-site文件:
vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml
修改配置
<configuration>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive_meta/warehousevalue>
property>
<property>
<name>hive.metastore.localname>
<value>truevalue>
property>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>jdbc:mysql://192.168.75.137/hive_metavalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>hivevalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>77123value>
property>
configuration>
node01节点上也需要解压一份Hive的安装包, 此处省略.
打开hive-site文件:
vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml
修改配置, 十分简单
<configuration>
<property>
<name>hive.metastore.warehouse.dirname>
<value>/user/hive/warehousevalue>
property>
<property>
<name>hive.metastore.localname>
<value>falsevalue>
property>
<property>
<name>hive.metastore.urisname>
<value>thrift://192.168.75.137:9083value>
property>
configuration>
vim ~/.bashrc
在文件最后插入:
export HIVE_HOME=/opt/software/hive/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin
让文件生效
source ~/.bashrc
hive
Hive服务端, 开启服务
hive --service metastore >>/opt/software/hive/log/meta.log 2>&1 &
Hive客户端, 连接服务
hive
不论哪种搭建方式, 在启动Hive之前, 应先启动HDFS或Yarn.启动Hive会报java.lang.IncompatibleClassChangeError的错, 不要忘记解决(如果是版本较新可能不会出现这种问题). 解决方法点此查看
创建表:
create table t1(id Int,name String);
插入数据:
insert into t1 values(1,'qb');
解析插入语句后, 会启动MR任务
查询表:
select * from t1;
不会启动MR任务, 直接去HDFS中读文件
需要注意: