Hive安装部署以及初步使用

一、Hive概述

HIve是什么?为什么要使用hive?对于一个初步接触hive的初学者,这些都是迷惑的,因此本文主要带你入门hive,让你了解到hive的安装使用以及在hive在大数据中的位置。

1.为什么要使用hive?

在了解hive之前,相信大家都使用过mapreduce以及hdfs,提及mapreduce我们都会想到对于一些数据的处理总是要自己去编写mapreduce程序去处理,一大堆的Java代码,提高了用户的学习成本,基于这个原因,Facebook实现并且开源Hive。

2.什么是Hive?

对于hive的介绍,我们先来看看官网的介绍(https://cwiki.apache.org/confluence/display/Hive/Home):

  The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

Built on top of Apache Hadoop, Hive provides the following features:

*Tools to enable easy access to data via SQL, thus enabling data warehousing tasks such as extract/transform/load (ETL), reporting, and data analysis.

*A mechanism to impose structure on a variety of data formats

Access to files stored either directly in Apache HDFS or in other data storage systems such as Apache HBase

*Query execution via Apache Tez, Apache Spark, or MapReduce

Procedural language with HPL-SQL

*Sub-second query retrieval via Hive LLAP, Apache YARN and Apache Slider.

简单总结一下:

1.hive是由Facebook开源的用于解决海量结构化日志的数据统计。

2.hive基于hadoop建立的数据仓库工具,可以将结构化日志数据映射到一张表,使用SQL语句进行查询处理。

3.hive建立在hadoop之上提供了以下功能:

(1)、可以将数据通过sql语句来处理,支持提取,转换,加载以及数据分析等大数据作业。

(2)、可以将结构化日志数据转化为文件存储在HDFS或者Hase等数据存储系统上。

(3)、底层用mapreduce对数据进行计算,也可以自己通过mapreduce,spark编写程序来拓展hive的功能来实现更多自定义的数据处理。

4.hive的实质就是将HQL语言转化为mapreduce。它适合离线数据的处理。

下面有一张图我们来简单了解一下hive在hadoop生态系统的位置:

《Hive安装部署以及初步使用》 图片发自简书App

由上图可以看出hive在数据处理方面占着很重要的位置,同时也可以看出它是运行在yarn上面的。

3.hive的工作原理

在知道了什么是hive之后,我们有必要了解一下hive的工作原理。

《Hive安装部署以及初步使用》 图片发自简书App

我们来通过上面hive的架构图来看看它的工作原理:

我们在上述hive的介绍当中了解到hive是将数据转换为文件存储在hdfs文件系统当中的,它对数据的计算处理底层实质上也是mapreduce。hive的元数据(表名,所属的数据库,拥有者,字段,表所在的目录,表的类型等等)都是存储在Meta store中,对于meta store下文会讲解,读者这里不必深究。在了解上面hive的核心之后再看他的架构图就很简单了。首先客户通过CLI(客户端工具,命令行)或者JDBC连接到hive服务器,Driver需要读取元数据(meta store)来加载数据,当客户端输入HQL命令时,Driver首先会通过SQL Parser来解析该sql,将sql语句转换成抽象语法树(AST),并且判断是否存在该表,字段是否存在,再通过编译器将AST转换为逻辑执行计划(比如map,reduce),然后通过Query Optimizer对执行计划进行优化,最后将优化后的逻辑执行计划交给mapreduce进行执行处理,将结果存储到hdfs文件系统上。

4.hive的优点以及使用场景:

*hive使用简单的HQL语句对数据进行查询处理,降低了程序员的学习成本,提高了开发效率。

*避免去写繁琐的程序(mapreduce),提高开发效率,元数据共享,支持多多客户端操作,同时也易于扩展。

二、安装部署Hive

这里是hive的下载地址:(http://archive.apache.org/dist/hive/)

本文选择hive 0.13的版本进行安装,读者可以选择自己需要的版本进行安装。

这里写图片描述

上面是hive安装所需的环境(来自官网),因此读者必须安装jdk1.7或以上的版本,并且需要hadoop环境的安装。对于这些环境读者可以查阅相关资料来安装,也可阅读我前面的文章进行安装。这里不赘述。

1.在下载好hive安装包之后,先将其解压:

$ tar -xzvf hive-x.y.z.tar.gz

如果读者阅读官网会让你配置hive的环境变量并且导出变量,这样做的目的是方便在任何目录下启动hive,这里我习惯上在hive的安装目录下启动,因此就不配置环境变量了,如果想配置可以查看官方文档。

2.在hive的安装目录下回有以下文件夹:

这里写图片描述

然后进入hive的安装目录下有一个conf文件夹我们将hive-env.sh.template文件重命名为hive-env.sh然后修改下面配置(分别是hadoop安装目录和hive conf文件夹所在目录)。

# Set HADOOP_HOME to point to a specific hadoop install directory

HADOOP_HOME=/opt/modules/hadoop-2.5.0

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/opt/modules/hive-0.13.1/conf

要想启动hive首先要启动hdfs文件系统,接着还要在hdfs文件系统上创建下面的目录并且修改权限:

$ $HADOOP_HOME/bin/hadoop fs -mkdir      /tmp

  $ $HADOOP_HOME/bin/hadoop fs -mkdir      /user/hive/warehouse

  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w  /tmp

  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w  /user/hive/warehouse

3.在执行完上面的操作后我们就可以启动hive了,切换到hive安装目录下:

[shinelon@hadoop-senior hive-0.13.1]$ bin/hive

4.我们可以对hive进行简单的测试:

show databases ;

use default;

show tables ;

create table shinelon_log(id int,name string);

select * from shinelon_log;

select count(*) from shinelon_log;

其实和MySQL语句很相似,几乎差不多,经过上面的测试我们就可以感受到hive的使用很简单,不过在执行select count(*) from shinelon_log;语句时我们会发现hive其实运行的是mapreduce程序,这也就很好的解释了上述hive的原理。下面我们为了更好的理解hive,可以创建一个文件(student.txt),在里面写入测试数据,其中列之间用tab键隔开:

1001    zhangsan

1002    lisi

1003    wangwu

然后在hive创建一张表:

create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;

上面的语句可能后半段不容易让初学者明白,ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’是设置数据分隔符,刚开始我们介绍到hive对结构化日志数据的处理,所谓结构化数据就是列与列之间有一定的界定符号来分割。

load data local inpath ‘/opt/datas/student.txt’into table student ;

select * from student ;

select id from student ;

然后我们执行上述语句就会发现hive已经成功的将数据映射到student表当中。

5.在开发hive时我们会启动多个客户端来进行操作,但是对于刚安装的hive它会将元数据存储在自己的内存数据库(derby)当中,由于启动hive它就要加载元数据,而此时元数据存储在内存数据库中,资源竞争,所以只允许启动一个hive客户端。怎么解决呢?我们一般将元数据存储在MySQL服务器或者oracle服务器中,这里我们来讲解将元数据存储到MySQL中。

三、linux下安装MySQL并且设置hive元数据存储

1.安装MySQL

注意:MySQL和hive是安装在同一台服务器上。

首先下载MySQL安装包,将其解压,然后判断服务器是否安装有MySQL,并且将其卸载:

[shinelon@hadoop-senior softwares]$ unzip mysql-libs.zip

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -qa|grep mysql

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -e –nodeps mysql-libs-5.1.66-2.el6_3.x86_64

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -ivh MySQL-server-5.6.24-1.el6.x86_64.rpm

[shinelon@hadoop-senior mysql-libs]$ sudo rpm -ivh MySQL-client-5.6.24-1.el6.x86_64.rpm

安装好MySQL之后,就可以登录测试一下,linux下MySQL root用户初始随机密码防止在/root/.mysql_secret文件下,可以查看复制登录。

《Hive安装部署以及初步使用》 图片发自简书App

默认的在mysql数据库下有一个user表存储着服务器用户名以及密码,因为只允许MySQL 的root用户登录,因此我们不能远程登录,可能会受到权限的限制,为了防止后续任务出现问题,这里我们将host为localhost的一条记录改为host为%:

mysql> update user set host=’%’ where host=’localhost’;

然后删除其他字段,只留这一条记录,这样我们就可以远程在其他主机上登录了。

2.设置hive元数据存储位置

下面我们将hive的元数据存储到mysql中。

在hive安装目录的conf目录下创建一个文件夹hive-site.xml文件,添加如下配置:

<?xml version=”1.0″?>

<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>

<configuration>

    <property>

        <name>javax.jdo.option.ConnectionURL</name>

        <value>jdbc:mysql://hadoop-senior.shinelon.com/metastore?createDatabaseIfNotExist=true</value>

        <description>JDBC connect string for a JDBC metastore</description>

    </property>

    <property>

        <name>javax.jdo.option.ConnectionDriverName</name>

        <value>com.mysql.jdbc.Driver</value>

        <description>Driver class name for a JDBC metastore</description>

    </property>

    <property>

        <name>javax.jdo.option.ConnectionUserName</name>

        <value>root</value>

        <description>username to use against metastore database</description>

    </property>

    <property>

        <name>javax.jdo.option.ConnectionPassword</name>

        <value>123456</value>

        <description>password to use against metastore database</description>

    </property>

</configuration>

然后还要将MySQL驱动包拷贝到hive的lib目录下:

[shinelon@hadoop-senior mysql-connector-java-5.1.27]$ cp mysql-connector-java-5.1.27-bin.jar /opt/modules/hive-0.13.1/lib/

至此,我们就配置好元数据,在我们重启hive以及MySQL数据库后会发MySQL数据库多了一个数据库metastore,这个数据库也是我们上面配置文件connectionUrl中执行的。

《Hive安装部署以及初步使用》 图片发自简书App

这时我们也可以启动多个hive客户端进行操作了。

上述是我对hive的认识以及安装部署总结,不足之处还望指教,谢谢!

    原文作者:不清不慎
    原文地址: https://www.jianshu.com/p/177f099988f0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞