设为首页 加入收藏

TOP

(四)大数据生态圈集群搭建之 --Hive搭建的三种模式
2019-03-19 12:52:02 】 浏览:44
Tags:数据 生态 集群 搭建 --Hive 模式
版权声明:本文版权归宋坤所有,转载请注明出处 https://blog.csdn.net/skisqibao/article/details/85159389

Hive下载&上传&解压

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搭建的三种模式

(一)基于Derby的Local模式(不常用)

搭建

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.ConnectionURL</name>  
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
</property>  
<!-- 连接本地Derby的Url -->  
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
</property>  
<!-- 连接Derby的驱动包 -->   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
<!-- 元数据库是否存放在本地,true代表存放在本地 -->   
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
<!-- Hive中所有数据存储在HDFS上的路径 -->

操作

Hive依赖于HDFS和MapReduce, 因此在启动Hive之前, 应先启动HDFS和Yarn(如果没有使用SQL语句可以不用启动Yarn).

启动Hive, 进入Hive Shell (需要先配置环境变量)
hive

此时, 启动Hive会报java.lang.IncompatibleClassChangeError的错, 解决方法点此查看

需要注意:

  1. 使用derby存储方式时, 运行hive会在当前目录生成一个derby文件和一个metastore_db目录.
  2. Derby模式的最大缺点是不允许多用户同时操作Hive, 如果一个用户已经打开Hive Shell, 那么不允许第二人再连接到Hive上. 这个缺点是由Derby自身缺陷造成的, 而非Hive的问题. 因此这种搭建方式不常用.

(二)基于MySQL的Local模式

上文提到Derby存在缺陷, 为了弥补这方面的不足, 基本上是使用mysql数据库来存储Hive的元数据. 基于MySQL其实就是使用mysql来代替derby.

这种存储方式需要在本地运行一个mysql服务器, 然后再配置Hive.

在client节点安装mysql

由于client上有Hadoop的安装包并配置HADOOP_HOME, 即能找到Hadoop的配置文件, 因此client端搭建Hive可以操作Hadoop集群.

  1. 安装mysql并启动
yum install mysql-server -y

service mysqld start

查看mysql状态:
	service mysqld status
  1. 修改权限
先登录mysql
mysql -uroot -p77123

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '77123' WITH GRANT OPTION;

注意这里*IDENTIFIED BY ‘77123’*是我本地mysql的root用户密码, 修改权限时需要改成对应mysql的密码.

  1. 删除多余字段
use mysql;
delete from user where host like '%127%';

user 表中多余的数据字段可能会对权限造成影响. 最终结果如下:
在这里插入图片描述

  1. 创建用户和数据库
CREATE USER 'hive'@'%' IDENTIFIED BY '77123';

CREATE DATABASE hive_meta;
  1. 授权hive用户
grant all privileges on hive_meta.* to hive@"%" identified by '77123';

虽然hive用户对hive_meta数据库有操作权限, 但如果这个数据库不存在, hive用户是没有权限创建这个数据库的, 所以需提前创建好hive_meta数据库.

  1. 刷新权限
flush privileges;
  1. 设置开机自启动
chkconfig mysqld on
  1. 导入mysql驱动包
    使用mysql的方式, 需将mysql的驱动jar包放在Hive的lib目录下, 这里的驱动包与使用java连接mysql的驱动包一样.

在client节点上安装Hive

这种搭建方式是最简单的, 只需在改名后的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.dir</name>  
  <value>/user/hive_localmysql/warehouse</value>  
</property>  
<!-- HDFS存放路径 -->   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
<!-- hive工具和mysql是否在同一个节点 -->   
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost/hive_meta</value>  
</property>  
<!-- 连接到mysql的数据库Url地址 -->   
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
<!-- mysql的驱动包 -->   
<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>hive</value>  
</property>  
<!-- 连接Hive的用户名 --> 
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>77123</value>  
</property>
<!-- 连接Hive的hive用户的密码 -->
</configuration> 

操作

操作和出现的问题与Derby模式同样, 此处不再赘述.

当创建一个表之后, 在mysql的hive_meta数据库中, 有个TBLS表, 通过select * from TBLS 可以看到在Hive中创建的表本身的信息(即元数据).

同时, 基于mysql允许多个用户同时访问Hive工具.

(三)基于MySQL的远程(Remote)模式(常用模式)

原理

在搭建之前, 我们先来了解一下基于MySQL远程模式的原理.
在这里插入图片描述

client节点上的Hive工具提供元数据存储服务. 启动该服务后, client节点会启动一个RunJar进程, 这个进程对外提供元数据服务.

在其他节点(比如node01)上, 解压一个Hive工具, 通过配置hive-site.xml文件, 使得node01节点的Hive工具能够连接到client节点提供的元数据服务.

这中模式最大的优点在于 – 解耦. 对应上图来说, node01节点不需要再安装mysql数据库, 而且如果有其它节点(比如node02)需要使用Hive工具, 只要解压简单一配置就可以操作同一个库中的数据(因为都是使用同一个mysql), 从而避免集群数据的隔离问题.

在client节点安装mysql

这种方式首先也是需要在client节点安装mysql数据库, 具体流程此处就不再赘述, 跟第二种模式中说明的流程一致.

在client节点配置Hive工具(服务端)

服务端搭建与mysql的本地模式一致.

打开hive-site文件:

vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml

修改配置

<configuration>
	<property>
		<name>hive.metastore.warehouse.dir</name>  
		<value>/user/hive_meta/warehouse</value>  
	</property>  
	       
	<property>  
		<name>hive.metastore.local</name>  
		<value>true</value>  
	</property>  
		   
	<property>  
		<name>javax.jdo.option.ConnectionURL</name>  
		<value>jdbc:mysql://192.168.75.137/hive_meta</value>  
	</property>  
		       
	<property>  
		<name>javax.jdo.option.ConnectionDriverName</name>  
		<value>com.mysql.jdbc.Driver</value>  
	</property>  
			   
	<property>  
		<name>javax.jdo.option.ConnectionUserName</name>  
		<value>hive</value>  
	</property>  
			       
	<property>  
		<name>javax.jdo.option.ConnectionPassword</name>  
		<value>77123</value>  
	</property>  
</configuration>

在node01节点配置Hive工具(客户端)

node01节点上也需要解压一份Hive的安装包, 此处省略.

打开hive-site文件:

vim /opt/software/hive/apache-hive-1.2.1/conf/hive-site.xml

修改配置, 十分简单

<configuration>
	 <property>  
		<name>hive.metastore.warehouse.dir</name>  
		<value>/user/hive/warehouse</value>  
	</property>  
	<!-- HDFS存放路径 -->        
	<property>  
		<name>hive.metastore.local</name>  
		<value>false</value>  
	</property>  
	<!-- 元数据库非本地 --> 	  
	<property>  
		<name>hive.metastore.uris</name>  
		<value>thrift://192.168.75.137:9083</value>  
	</property>
	<!-- 提供元数据服务的client节点的url -->  
</configuration>

使用Hive工具简单操作

Hive环境变量配置

vim ~/.bashrc

在文件最后插入:
export HIVE_HOME=/opt/software/hive/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin

让文件生效
source ~/.bashrc

Hive启动

  1. 两种本地模式启动Hive
hive
  1. 基于mysql的远程模式

Hive服务端, 开启服务

hive --service metastore >>/opt/software/hive/log/meta.log 2>&1 &

Hive客户端, 连接服务

hive

不论哪种搭建方式, 在启动Hive之前, 应先启动HDFS或Yarn.启动Hive会报java.lang.IncompatibleClassChangeError的错, 不要忘记解决(如果是版本较新可能不会出现这种问题). 解决方法点此查看

  1. 简单操作使用Hive:
创建表:
	create table t1(id Int,name String);
插入数据:
	insert into t1 values(1,'qb');
	解析插入语句后, 会启动MR任务
查询表:
	select * from t1;
	不会启动MR任务, 直接去HDFS中读文件

需要注意:

  1. 简单的select * 的查询SQL是不会启动MR任务的, 只有当SQL语句中带有where, count, sum等时才会启动MR任务;
  2. insert插入语句会启动MR任务, 像这种插入少量数据不适合Hive使用, 会非常耗费时间, 通常使用load. insert语句要慎用!
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive导入hdfs数据(1) 下一篇hive1.2.1整合hbase遇到的坑

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目