阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Hive安装及与HBase的整合

233次阅读
没有评论

共计 10524 个字符,预计需要花费 27 分钟才能阅读完成。

1 Hive 简介

Hive 是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 Hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用类 SQL 语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。Hive 经过对语句进行解析和转换,最终生成一系列基于 Hadoop 的 MapReduce 任务,通过执行这些任务完成数据处理。

使用 Hive 的命令行接口,感觉很像操作关系数据库,但是 Hive 和关系数据库还是有很大的不同,具体总结如下:

一是存储文件的系统不同。Hive 使用的是 Hadoop 的 HDFS,关系数据库则是服务器本地的文件系统。

二是计算模型不同。Hive 使用 MapReduce 计算模型,而关系数据库则是自己设计的计算模型。

三是设计目的不同。关系数据库都是为实时查询的业务设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差。实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同。

四是扩展能力不同。Hive 通过集成 Hadoop 使得很容易扩展自己的存储能力和计算能力,而关系数据库在这个方面要比数据库差很多。

Hive 的技术架构如下图所示。

Hive 安装及与 HBase 的整合

 

由上图可知,Hadoop 和 MapReduce 是 Hive 架构的根基。Hive 架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、Web GUI、Metastore 和 Driver(Complier、Optimizer 和 Executor),这些组件可分为服务端组件和客户端组件两大类。

首先来看服务端组件:

Driver 组件包括 Complier、Optimizer 和 Executor,它的作用是将我们写的 HiveQL 语句进行解析、编译优化,生成执行计划,然后调用底层的 MapReduce 计算框架。

Metastore 组件是元数据服务组件,它存储 Hive 的元数据,Hive 的元数据存储在关系数据库里,支持的关系数据库有 derby 和 MySQL。元数据对于 Hive 十分重要,因此 Hive 支持把 Metastore 服务独立出来,安装到远程的服务器集群里,从而解耦 Hive 服务和 Metastore 服务,保证 Hive 运行的健壮性。

Thrift Server 是 Facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。

再来看看客户端组件:

CLI 即 command lineinterface,命令行接口。

JDBC/ODBC 是 Thrift 的客户端。

Web GUI 是 Hive 客户端提供的一种通过网页的方式访问 Hive 的服务。这个接口对应 Hive 的 hwi 组件,使用前要启动 hwi 服务。

2 Hive 内置服务

Hive 自带了许多服务,可在运行时通过 service 选项来明确指定使用什么服务,或通过 –service help 来查看帮助。下面介绍最常用的一些服务。

(1)CLI:这是 Hive 的命令行界面,用的比较多。这是默认的服务,直接可以在命令行里面使用。

(2)hiveserver:这个可以让 Hive 以提供 Trift 服务的服务器形式来运行,可以允许许多不同语言编写的客户端进行通信。可以通过设置 HIVE_PORT 环境变量来设置服务器所监听的端口号,在默认的情况下,端口为 10000。最新版本(hive1.2.1)用 hiveserver2 取代了原有的 hiveserver。

(3)hwi:它是 Hive 的 Web 接口,是 hive cli 的一个 web 替换方案。

(4)jar:与 Hadoop jar 等价的 Hive 接口,这是运行类路径中同时包含 Hadoop 和 Hive 类的 Java 应用程序的简便方式。

(5)Metastore:用于连接元数据库(如 mysql)。在默认情况下,Metastore 和 Hive 服务运行在同一个进程中,端口号为 9083。使用这个服务,可以让 Metastore 作为一个单独的进程运行,我们可以通过 METASTORE_PORT 来指定监听的端口号。

3 Metastore 部署模式

3.1 内嵌模式

内嵌模式使用内嵌的 Derby 数据库存储元数据,只能单用户操作,一般用于单元测试。其架构图如下所示。

Hive 安装及与 HBase 的整合

3.2 本地模式

本地模式与内嵌模式最大的区别在于数据库由内嵌于 hive 服务变成独立部署(一般为 mysql 数据库),hive 服务使用 jdbc 访问元数据,多个服务可以同时访问。mysql 数据库用于存储元数据,可安装在本地或远程服务器上,在配置文件 hive-site.xml 中指定 jdbc URL、驱动、用户名、密码等属性。其中属性 hive.metastore.uris 的值为空,表示为嵌入模式或本地模式。在本地模式中,每种 hive 服务(如 cli、hiveserver2、hwi)都内置启动了一个 metastore 服务,用于连接 mysql 元数据库。其架构图如下所示。

Hive 安装及与 HBase 的整合 

3.3 远程模式

远程模式将原内嵌于 hive 服务中的 metastore 服务独立出来单独运行,hive 服务通过 thrift 访问 metastore,这种模式可以控制到数据库的连接等。其中,metastore 服务器需要通过 hive-site.xml 配置 jdbc URL、驱动、用户名、密码等属性,hiveserver2 服务器和 cli 客户端需要通过 hive-site.xml 配置 hive.metastore.uris 属性,用于指定 metastore 服务地址(如 thrift://localhost:9083),metastore 服务器通过./hive –service metastore 开启 metastore 服务,hiveserver2 服务器通过./hive –service hiveserver2 开启 hiveserver 服务,客户端通过./hive shell 或./beeline 进行连接。其架构图如下所示。

Hive 安装及与 HBase 的整合

 

远程模式下可以按如下部署规划:

(1)元数据服务器:部署 metastore 服务和 mysql 数据库。

(2)hiveserver 服务器:用于部署 hiveserver2 服务,可通过 thrift 访问 metastore。

(3)客户服务器:部署 hive 客户端,可以基于 cli、beeline 或直接使用 thrift 访问 hiveserver2。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-12/138721p2.htm

4 Hive 本地模式的安装

操作系统为 Ubuntu14.04,需要安装并启动 Hadoop 及 Hbase。

4.1 安装 MySQL

// 切换 root 用户

$ su root

// 检查 mysql 是否安装

# netstat -tap | grep mysql

// 在线安装 mysql

# apt-get install mysql-server mysql-client

// 启动 mysql

# start mysql

// 设置开机自启动

# /etc/init.d/mysql start

// 设置 root 用户密码

# mysqladmin -u root password ‘root’

// 使用客户端登录 mysql

$ mysql -u root -p

// 创建 hive 用户,密码为 hive

> create user ‘hive’ identified by ‘hive’;

// 创建数据库 hivemeta,用于存放 hive 元数据

> create database hivemeta;

// 将 hivemeta 数据库的所有权限赋予 hive 用户,并允许远程访问

> grant all privileges on hivemeta.* to ‘hive’@’%’ identified by ‘hive’;

> flush privileges;

// 可查看用户 hive 的权限情况

> use mysql;

> select host, user, password from user;

Hive 安装及与 HBase 的整合

4.2 安装 Hive

// 解压安装包

$ tar -xvf hive-1.1.0-cdh5.7.1.tar.gz

// 进入 hive 的配置目录

$ cd hive-1.1.0-cdh5.7.1/conf/

// 修改 hive-env.sh 文件

$ cp hive-env.sh.template hive-env.sh

$ vim hive-env.sh

HADOOP_HOME=/home/developer/app/hadoop-2.6.0-cdh5.7.1

// 创建 hive-site.xml 文件并配置

$ vimhive-site.xml

<configuration>
  <!– 指定 HDFS 中的 hive 仓库地址 –>
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/hive/warehouse</value>
  </property>
  <!– 该属性为空表示嵌入模式或本地模式,否则为远程模式 –>
  <property>
    <name>hive.metastore.uris</name>
    <value></value>
  </property>
  <!– 指定 mysql 的连接 –>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hivemeta?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>hive</value>
  </property>
  <!– 指定密码 –>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
  </property>
</configuration>

// 修改 hive-log4j.properties 指定日志输出路径

$ cp hive-log4j.properties.template hive-log4j.properties

$ vim hive-log4j.properties

hive.root.logger=info,DRFA

hive.log.dir=/home/developer/app/hive-1.1.0-cdh5.7.1/logs

// 在 http://www.mysql.com/products/connector/ 下载 JDBC Driver for MySQL 并复制到 hive 的 lib 目录中

$ cp mysql-connector-java-5.1.39-bin.jar/home/developer/app/hive-1.1.0-cdh5.7.1/lib/

4.3 配置环境变量

$ cd ~

$ vim.bashrc

export HIVE_HOME=/home/developer/app/hive-1.1.0-cdh5.7.1

export PATH=$PATH:$HIVE_HOME/bin

$ source.bashrc

4.4 使用 Hive Cli

// 启动 hive 的 cli 服务

$ hive

// 测试

> show databases;

Hive 安装及与 HBase 的整合

4.5 使用 Beeline

// 后台启动 hiveserver2

$nohup hive –service hiveserver2 &

注:beeline 依赖 hiveserver2 提供的 thirft 服务,必须启动,其默认端口为 10000

// 使用 beeline

$beeline

// 连接 hive

> !connectjdbc:hive2://localhost:10000

注:需要通过 hadoop 用户登录,否则没有 hdfs 操作权限

// 测试

> show databases;
Hive 安装及与 HBase 的整合

4.6 功能测试

// 启动 hive 的 cli 服务

$ hive

// 创建表

> create table user(id string,name string,age string) row format delimited fields terminated by ‘\t’;

// 查看测试数据

$ cat data.txt

Hive 安装及与 HBase 的整合

 

// 将本地数据导入 hive

> load data local inpath ‘/home/developer/data.txt’ overwrite into table user;

// 查看导入的数据

> select * from user;

Hive 安装及与 HBase 的整合

 

// 查看数据条数

> select count(*) from user;

1 Hive 简介

Hive 是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据。它把海量数据存储于 Hadoop 文件系统,而不是数据库,但提供了一套类数据库的数据存储和处理机制,并采用类 SQL 语言对这些数据进行自动化管理和处理。我们可以把 Hive 中海量结构化数据看成一个个的表,而实际上这些数据是分布式存储在 HDFS 中的。Hive 经过对语句进行解析和转换,最终生成一系列基于 Hadoop 的 MapReduce 任务,通过执行这些任务完成数据处理。

使用 Hive 的命令行接口,感觉很像操作关系数据库,但是 Hive 和关系数据库还是有很大的不同,具体总结如下:

一是存储文件的系统不同。Hive 使用的是 Hadoop 的 HDFS,关系数据库则是服务器本地的文件系统。

二是计算模型不同。Hive 使用 MapReduce 计算模型,而关系数据库则是自己设计的计算模型。

三是设计目的不同。关系数据库都是为实时查询的业务设计的,而 Hive 则是为海量数据做数据挖掘设计的,实时性很差。实时性的区别导致 Hive 的应用场景和关系数据库有很大的不同。

四是扩展能力不同。Hive 通过集成 Hadoop 使得很容易扩展自己的存储能力和计算能力,而关系数据库在这个方面要比数据库差很多。

Hive 的技术架构如下图所示。

Hive 安装及与 HBase 的整合

 

由上图可知,Hadoop 和 MapReduce 是 Hive 架构的根基。Hive 架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、Web GUI、Metastore 和 Driver(Complier、Optimizer 和 Executor),这些组件可分为服务端组件和客户端组件两大类。

首先来看服务端组件:

Driver 组件包括 Complier、Optimizer 和 Executor,它的作用是将我们写的 HiveQL 语句进行解析、编译优化,生成执行计划,然后调用底层的 MapReduce 计算框架。

Metastore 组件是元数据服务组件,它存储 Hive 的元数据,Hive 的元数据存储在关系数据库里,支持的关系数据库有 derby 和 MySQL。元数据对于 Hive 十分重要,因此 Hive 支持把 Metastore 服务独立出来,安装到远程的服务器集群里,从而解耦 Hive 服务和 Metastore 服务,保证 Hive 运行的健壮性。

Thrift Server 是 Facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。

再来看看客户端组件:

CLI 即 command lineinterface,命令行接口。

JDBC/ODBC 是 Thrift 的客户端。

Web GUI 是 Hive 客户端提供的一种通过网页的方式访问 Hive 的服务。这个接口对应 Hive 的 hwi 组件,使用前要启动 hwi 服务。

2 Hive 内置服务

Hive 自带了许多服务,可在运行时通过 service 选项来明确指定使用什么服务,或通过 –service help 来查看帮助。下面介绍最常用的一些服务。

(1)CLI:这是 Hive 的命令行界面,用的比较多。这是默认的服务,直接可以在命令行里面使用。

(2)hiveserver:这个可以让 Hive 以提供 Trift 服务的服务器形式来运行,可以允许许多不同语言编写的客户端进行通信。可以通过设置 HIVE_PORT 环境变量来设置服务器所监听的端口号,在默认的情况下,端口为 10000。最新版本(hive1.2.1)用 hiveserver2 取代了原有的 hiveserver。

(3)hwi:它是 Hive 的 Web 接口,是 hive cli 的一个 web 替换方案。

(4)jar:与 Hadoop jar 等价的 Hive 接口,这是运行类路径中同时包含 Hadoop 和 Hive 类的 Java 应用程序的简便方式。

(5)Metastore:用于连接元数据库(如 mysql)。在默认情况下,Metastore 和 Hive 服务运行在同一个进程中,端口号为 9083。使用这个服务,可以让 Metastore 作为一个单独的进程运行,我们可以通过 METASTORE_PORT 来指定监听的端口号。

3 Metastore 部署模式

3.1 内嵌模式

内嵌模式使用内嵌的 Derby 数据库存储元数据,只能单用户操作,一般用于单元测试。其架构图如下所示。

Hive 安装及与 HBase 的整合

3.2 本地模式

本地模式与内嵌模式最大的区别在于数据库由内嵌于 hive 服务变成独立部署(一般为 mysql 数据库),hive 服务使用 jdbc 访问元数据,多个服务可以同时访问。mysql 数据库用于存储元数据,可安装在本地或远程服务器上,在配置文件 hive-site.xml 中指定 jdbc URL、驱动、用户名、密码等属性。其中属性 hive.metastore.uris 的值为空,表示为嵌入模式或本地模式。在本地模式中,每种 hive 服务(如 cli、hiveserver2、hwi)都内置启动了一个 metastore 服务,用于连接 mysql 元数据库。其架构图如下所示。

Hive 安装及与 HBase 的整合 

3.3 远程模式

远程模式将原内嵌于 hive 服务中的 metastore 服务独立出来单独运行,hive 服务通过 thrift 访问 metastore,这种模式可以控制到数据库的连接等。其中,metastore 服务器需要通过 hive-site.xml 配置 jdbc URL、驱动、用户名、密码等属性,hiveserver2 服务器和 cli 客户端需要通过 hive-site.xml 配置 hive.metastore.uris 属性,用于指定 metastore 服务地址(如 thrift://localhost:9083),metastore 服务器通过./hive –service metastore 开启 metastore 服务,hiveserver2 服务器通过./hive –service hiveserver2 开启 hiveserver 服务,客户端通过./hive shell 或./beeline 进行连接。其架构图如下所示。

Hive 安装及与 HBase 的整合

 

远程模式下可以按如下部署规划:

(1)元数据服务器:部署 metastore 服务和 mysql 数据库。

(2)hiveserver 服务器:用于部署 hiveserver2 服务,可通过 thrift 访问 metastore。

(3)客户服务器:部署 hive 客户端,可以基于 cli、beeline 或直接使用 thrift 访问 hiveserver2。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-12/138721p2.htm

5 Hive 整合 HBase 原理

Hive 与 HBase 整合的实现是利用两者本身对外的 API 接口互相通信来完成的,其具体工作交由 Hive 的 lib 目录中的 hive-hbase-handler-*.jar 工具类来实现,通信原理如下图所示。

Hive 安装及与 HBase 的整合

 

Hive 整合 HBase 后的使用场景:

(一)通过 Hive 把数据加载到 HBase 中,数据源可以是文件也可以是 Hive 中的表。

(二)通过整合,让 HBase 支持 JOIN、GROUP 等 SQL 查询语法。

(三)通过整合,不仅可完成 HBase 的数据实时查询,也可以使用 Hive 查询 HBase 中的数据完成复杂的数据分析。

6 Hive 整合 HBase 配置

6.1 Hive 映射 HBase 表

// 如果 hbase 是集群,需要修改 hive-site.xml 文件配置

$ vim hive-site.xml

<property>
  <name>hbase.zookeeper.quorum</name>
  <value>node1,node2,node3</value>
</property>

// 将 hbase lib 目录下的所有文件复制到 hive lib 目录中

$ cd app/hive-1.1.0-cdh5.7.1/

$ cp ~/app/hbase-1.2.0-cdh5.7.1/lib/* lib/

// 在 hive 中创建映射表

$ hive shell

> create table hive_hbase_test(key int,value string) stored by ‘org.apache.Hadoop.hive.hbase.HBaseStorageHandler’ with serdeproperties(“hbase.columns.mapping”=”:key,cf1:val”) tblproperties(“hbase.table.name”=”hive_hbase_test”);

备注:在 hive 中创建表 hive_hbase_test,这个表包括两个字段(int 型的 key 和 string 型的 value),映射为 hbase 中的表 hive_hbase_test,key 对应 hbase 的 rowkey,value 对应 hbase 的 cf1:val 列。

Hive 安装及与 HBase 的整合

 

// 在 hbase 中查看是否存在映射表

$ hbase shell

> list

Hive 安装及与 HBase 的整合

6.2 整合后功能测试

// 创建测试数据

$ vim poke.txt

1      zhangsan

2      lisi

3      wangwu

Hive 安装及与 HBase 的整合

 

// 在 hive 中创建一个 poke 表并加载测试数据

> create table poke(key int,valuestring) row format delimited fields terminated by ‘\t’;

> load data local inpath’/home/developer/poke.txt’ overwrite into table poke;

> select * from poke;

Hive 安装及与 HBase 的整合

 

// 将 hive 的 poke 表中的数据加载到 hive_hbase_test 表

> insert overwrite table hive_hbase_test select * from poke;

> select * from hive_hbase_test;

Hive 安装及与 HBase 的整合

 

// 查看 hbase 的 hive_hbase_test 表中是否有同样的数据

> scan ‘hive_hbase_test’

Hive 安装及与 HBase 的整合

 

需要说明以下几点:

(一)Hive 映射表的字段是 HBase 表字段的子集。整合之后的 Hive 表不能被修改。

(二)Hive 中的映射表不能直接插入数据,所以需要通过将数据加载到另一张 poke 表,然后通过查询 poke 表将数据加载到映射表。

(三)上述示例是通过创建内部表的方式将 Hive 表映射到 HBase 表,HBase 表会自动创建,而且 Hive 表被删除后 HBase 表也会自动删除。

(四)如果 HBase 表已有数据,可以通过创建 Hive 外部表的方式将 Hive 表映射到 HBase 表,通过 HQLHive 表实现对 HBase 表的数据分析。Hive 表删除将不会对 HBase 表造成影响。创建外部表的方法如下:

> create external table hive_hbase_test(key int,value string)stored by ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’ with serdeproperties(“hbase.columns.mapping”=”:key,cf1:val”) tblproperties(“hbase.table.name”=”hive_hbase_test”);

Hadoop+HBase 搭建云存储总结 PDF http://www.linuxidc.com/Linux/2013-05/83844.htm

Ubuntu Server 14.04 下 Hbase 数据库安装  http://www.linuxidc.com/Linux/2016-05/131499.htm

HBase 结点之间时间不一致造成 regionserver 启动失败 http://www.linuxidc.com/Linux/2013-06/86655.htm

CentOS 6.3 下 HBase 伪分布式平台搭建  http://www.linuxidc.com/Linux/2016-11/136830.htm

Hadoop 集群安装 &HBase 实验环境搭建 http://www.linuxidc.com/Linux/2013-04/83560.htm

基于 Hadoop 集群的 HBase 集群的配置 http://www.linuxidc.com/Linux/2013-03/80815.htm‘

Hadoop 安装部署笔记之 -HBase 完全分布模式安装 http://www.linuxidc.com/Linux/2012-12/76947.htm

CentOS 6.4 下 HBase 集群安装 http://www.linuxidc.com/Linux/2016-11/137303.htm

HBase 的详细介绍 :请点这里
HBase 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138721.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10524字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中