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生态系统的位置:

图片发自简书App


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

3.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文件下,可以查看复制登录。

图片发自简书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中执行的。

图片发自简书App


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



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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容