(四)大数据生态圈集群搭建之 --Hive搭建的三种模式

Hive搭建

  • Hive下载&上传&解压
  • Hive搭建的三种模式
    • (一)基于Derby的Local模式(不常用)
      • 搭建
      • 操作
    • (二)基于MySQL的Local模式
      • 在client节点安装mysql
      • 在client节点上安装Hive
      • 操作
    • (三)基于MySQL的远程(Remote)模式(常用模式)
      • 原理
      • 在client节点安装mysql
      • 在client节点配置Hive工具(服务端)
      • 在node01节点配置Hive工具(客户端)
    • 使用Hive工具简单操作
      • Hive环境变量配置
      • Hive启动

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几乎无差别.
(四)大数据生态圈集群搭建之 --Hive搭建的三种模式_第1张图片

  下载完成之后, 通过传输工具(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.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的错, 解决方法点此查看

  需要注意:

  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 表中多余的数据字段可能会对权限造成影响. 最终结果如下:
(四)大数据生态圈集群搭建之 --Hive搭建的三种模式_第2张图片

  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.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的远程(Remote)模式(常用模式)

原理

  在搭建之前, 我们先来了解一下基于MySQL远程模式的原理.
(四)大数据生态圈集群搭建之 --Hive搭建的三种模式_第3张图片

  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.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工具(客户端)

  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>

使用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语句要慎用!

你可能感兴趣的:(大数据生态圈集群搭建)