HIVE安装使用说明.docx

上传人:b****6 文档编号:4410335 上传时间:2022-12-01 格式:DOCX 页数:14 大小:271.76KB
下载 相关 举报
HIVE安装使用说明.docx_第1页
第1页 / 共14页
HIVE安装使用说明.docx_第2页
第2页 / 共14页
HIVE安装使用说明.docx_第3页
第3页 / 共14页
HIVE安装使用说明.docx_第4页
第4页 / 共14页
HIVE安装使用说明.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

HIVE安装使用说明.docx

《HIVE安装使用说明.docx》由会员分享,可在线阅读,更多相关《HIVE安装使用说明.docx(14页珍藏版)》请在冰豆网上搜索。

HIVE安装使用说明.docx

HIVE安装使用说明

HIVE安装使用说明

一、Hive简介

1.1.Hive是什么

Hadoop作为分布式运算的基础架构设施,统计分析需要采用MapReduce编写程序后,放到Hadoop集群中进行统计分析计算,使用起来较为不便,Hive产品采用类似SQL的语句快速实现简单的MapReduce统计,很大程度降低了Hadoop的学习使用成本。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供基础的SQL查询功能,可以将SQL语句转换为MapReduce任务运行,而不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

1.2.部署架构

Hive中的Driver为核心驱动部分,包括SQL语句的解释、编译为MapReduce任务,并进行优化、执行。

Hive用户访问包括4种运行和访问方式,一是CLI客户端;二是HiveServer2和Beeline方式;三是HCatalog/WebHCat方式;四是HWI方式。

其中CLI、Beeline均为控制台命令行操作模式,区别在于CLI只能操作本地Hive服务,而Beeline可以通过JDBC连接远程服务。

HiveServer2为采用Thrift提供的远程调用接口,并提供标准的JDBC连接访问方式。

HCatalog是Hadoop的元数据和数据表的管理系统,WebHCat则提供一条Restful的HCatalog远程访问接口,HCatalog的使用目前资料很少,尚未充分了解。

HWI是HiveWebInterface的简称,可以理解为CLI的WEB访问方式,因当前安装介质中未找到HWI对应的WAR文件,未能进行使用学习。

Hive在运行过程中,还需要提供MetaStore提供对元数据(包括表结构、表与数据文件的关系等)的保存,Hive提供三种形式的MetaStore:

一是内嵌Derby方式,该方式一般用演示环境的搭建;二是采用第三方数据库进行保存,例如常用的MySQL等;三是远程接口方式,及由Hive自身提供远程服务,供其他Hive应用使用。

在本安装示例中采用的第二种方式进行安装部署。

备注:

在本文后续的安装和说明中,所有示例均以HiverServer2、Beeline方式进行。

另:

因Hive在查询时性能较差,后期拟计划采用SPARK或Presto进行替代,因此本安装手册不对Hive的集群方案进行描述。

1.3.环境说明

本安装示例在Ubuntu14.04.3的虚拟器中进行安装,并提前安装配置Hadoop。

机器名

IP地址

安装软件

启用服务

hdfs1

10.68.19.184

Hive

Hadoop

hdfs2

10.68.19.182

Hadoop

hdfs3

10.68.19.183

MySQL

Hadoop

二、MySQL安装配置

2.1.MySQL安装

登录到hdfs3中,安装MySQL服务器。

$sudoapt-getinstallmysql-server

修改my.cfg的配置文件

$sudovi/etc/mysql/my.cfg

修改内容如下:

bind-address      =10.68.19.183

:

wq

重新启动mysql服务

$sudoservicemysqlrestart

2.2.创建Hive需要的数据库和用户

$mysql-uroot-p

依次输入以下命令:

#创建hive用户

insertintomysql.user(Host,User,Password)values("localhost","hive",password("hive"));

#创建数据库

createdatabasehive;

#授权

grantallonhive.*tohive@'%'identifiedby'hive';

grantallonhive.*tohive@'localhost'identifiedby'hive';

flushprivileges;

#退出

exit

三、Hive安装

3.1.下载Hive

从官网(http:

//hive.apache.org/downloads.html)上下载最新的稳定版本地址,并上传到服务器上。

本安装示例采用的版本为apache-hive-1.2.1-bin.tar.gz。

3.2.解压并配置环境变量

解压安装文件到/opt目录

$tar-zxvfapache-hive-1.2.1-bin.tar.gz-C/opt

修改环境变量

$sudovi/etc/profile

修改如下内容

exportHIVE_HOME=/opt/hive-1.2.1

exportPATH="$JAVA_HOME/bin:

$HADOOP_HOME/bin:

$HIVE_HOME/bin:

$PATH"

:

wq

启用配置

$source/etc/profile

3.3.修改配置文件

$cd$HIVE_HOME

$cpconf/hive-default.xml.templateconf/hive-site.xml

$viconf/hive-site.xml

修改以下内容的值

javax.jdo.option.ConnectionURL

jdbc:

mysql:

//10.68.19.183:

3306/hive

JDBCconnectstringforaJDBCmetastore

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

DriverclassnameforaJDBCmetastore

javax.jdo.option.ConnectionPassword

hive

passwordtouseagainstmetastoredatabase

javax.jdo.option.ConnectionUserName

hive

Usernametouseagainstmetastoredatabase

hive.exec.local.scratchdir

/data/hive/scratach

LocalscratchspaceforHivejobs

hive.downloaded.resources.dir

/data/hive/download

Temporarylocaldirectoryforaddedresourcesintheremotefilesystem.

hive.querylog.location

/data/hive/querylog

LocationofHiveruntimestructuredlogfile

hive.server2.logging.operation.log.location

/data/hive/operation_logs

Topleveldirectorywhereoperationlogsarestoredifloggingfunctionalityisenabled

...

3.4.创建需要的目录

$mkdir/data/hive

$mkdir/data/hive/scratach

$mkdir/data/hive/download

$mkdir/data/hive/querylog

$mkdir/data/hive/operation_logs

3.5.上传MySQL驱动

将mysql-connector-java-5.1.36.jar上传到$HIVE_HOME/lib目录下。

3.6.启动

$hiveserver2

3.7.基本操作验证

$beeline

!

connectjdbc:

hive2:

//hdfs1:

10000

输入当前用户名,密码为空

或者直接输入

$./bin/beeline–ujdbc:

hive2:

//hdfs1:

10000

#查看当前数据库

showdatabases;

#查看所有表

showtables;

#创建表

createtableusers(user_idint,fnamestring,lnamestring);

#插入数据

INSERTINTOusers(user_id,fname,lname)VALUES(1,'john','smith');

INSERTINTOusers(user_id,fname,lname)VALUES(2,'john','doe');

INSERTINTOusers(user_id,fname,lname)VALUES(3,'john','smith');

#查询数据

select*fromuserslimit2;

selectcount

(1)fromusers;

3.8.数据导入示例

示例场景说明:

先将输入导入到tmp_sell_day_corp_cig,再将数据写入sell_day_corp_cig中。

创建表

createtabletmp_sell_day_corp_cig

sell_dstring,

cig_codestring,

stat_codestring,

statyearsmallint,

halfyearsmallint,

quartersmallint,

statmonthsmallint,

stattendaysmallint,

statdatesmallint,

cig_provincestring,

cig_factorystring,

trademark_codestring,

cig_insidestring,

cig_gradestring,

cig_famousstring,

cig_hundredstring,

cig_kindstring,

cig_lowstring,

cig_seizurestring,

sell_amountdouble,

sell_total_moneydouble,

gross_profitdouble,

demand_amountdouble

partitionedby(corp_codestring)

ROWFORMATDELIMITEDFIELDSTERMINATEDBY',';

createtablesell_day_corp_cig

sell_dstring,

cig_codestring,

stat_codestring,

statyearsmallint,

halfyearsmallint,

quartersmallint,

statmonthsmallint,

stattendaysmallint,

statdatesmallint,

cig_provincestring,

cig_factorystring,

trademark_codestring,

cig_insidestring,

cig_gradestring,

cig_famousstring,

cig_hundredstring,

cig_kindstring,

cig_lowstring,

cig_seizurestring,

sell_amountdouble,

sell_total_moneydouble,

gross_profitdouble,

demand_amountdouble

partitionedby(corp_codestring)

clusteredby(sell_d)sortedby(cig_code)INTO16BUCKETS

STOREDASorcfile;

导入数据到临时表

LOADDATALOCALINPATH'/home/whcyit/data.txt'OVERWRITEINTOTABLEtmp_sell_day_corp_cigpartition(corp_code='11420101');

启用分桶,写入正式表

sethive.enforce.bucketing=true;

INSERTOVERWRITETABLEsell_day_corp_cigpartition(corp_code='11420101')

selectsell_d,cig_code,stat_code,statyear,halfyear,quarter,statmonth,stattenday,statdate,cig_province,cig_factory,trademark_code,cig_inside,cig_grade,cig_famous,cig_hundred,cig_kind,cig_low,cig_seizure,sell_amount,sell_total_money,gross_profit,demand_amountfromtmp_sell_day_corp_cigWHEREcorp_code='11420101';

显示分区

SHOWPARTITIONSsell_day_corp_cig;

查询数据

selectcount

(1)fromsell_day_corp_cig;

selectsum(a.sell_amount),sum(a.sell_total_money),a.cig_code,a.corp_codefromsell_day_corp_cigagroupbya.cig_code,a.corp_code;

建立索引

createindexidx_sell_day_corp_cigontablesell_day_corp_cig(cig_code)

as'pact.CompactIndexHandler'

withdeferredrebuild

INTABLEidx_sell_day_corp_cig_table;

alterindexidx_sell_day_corp_cigonsell_day_corp_cigrebuild;

四、HIVE集群配置

在Hive上述的安装配置中MetaStore和HiverServer2(ThriftServer)两个部分存储单点问题,对于MetaStore因采用数据库进行保存,需要使用数据库本身的方式实现高可用。

对于HiverServer2的集群方式一般可以采用两种模式:

一是采用HAProxy(四层应用集群)进行流量分发,二是采用ZooKeeper实现Hive集群配置。

本安装仅说明采用ZooKeeper实现HiveServer2的高可用方式。

4.1.ZooKeeper高可用的原理

4.2.修改hive-site.xml配置

hive.zookeeper.quorum

hdfs1:

2181,hdfs2:

2181,hdfs3:

2181

hive.server2.support.dynamic.service.discovery

true

hive.server2.zookeeper.namespace

hiveserver2

4.3.启动HiveServer2

$$HIVE_HOME/bin/hiveserver2

4.3.验证集群启用

$zkCli.sh

$ls/hiveserver2

4.4.集群的使用

JDBC或ODBC采用以下方式进行连接

jdbc:

hive2:

//;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=

其中:

ZooKeeper地址和端口

例如:

Stringurl="jdbc:

hive2:

//hdfs1:

2181,hdfs2:

2181,hdfs3:

2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2";

Connectioncon=DriverManager.getConnection(url,"whcyit","");

备注:

该连接方式不支持beeline客户端,当JDBC驱动能够正常运行识别。

五、Hive基础概念

5.1.Hive与传统数据库的区别

Hive作为基于Hadoop的数据仓库产品,虽然其采用类似数据库定义语言(DDL,create/drop/alter/truncate/show/describe)、数据库操作语言(DML:

load/insert/update/delete/import/export)、SQL语言实现了数据的统计分析功能,但其与传统关系型数据库有着很大区别。

但Hive同样在飞速发展中,越来越多的传统数据库特性在Hive中得到了支持,例如:

ACID事务特性、索引、视图等。

⏹不支持删除操作

Hive默认情况下不支持数据删除操作,如需要删除单条记录需要启动hive的测试模式,对于实际数据仓库类应用中应不存在类似应用。

对于大批量删除,只能采用重新导入数据的方式进行覆盖。

⏹不支持存储过程

Hive没有提供存储过程的支持,对于复杂汇总依旧不能采用SQL进行有效处理。

第三方提供了HPL/SQL的支持(http:

//www.hplsql.org/download)还需要进一步的学习。

⏹不支持部分SQL特性

不支持主外键、条件约束;

不支持类似SQL中in的用法(子查询),可以采用leftsemijoin(半连接)进行替代;

5.2.Hive支持的数据模型

Hive中所有的数据都存储在HDFS中,Hive中包含以下数据模型:

Table(表),ExternalTable(外部表),Partition(分区),Bucket(桶)。

Hive中的Table和数据库中的Table在概念上是类似的,每一个Table在Hive中都有一个相应的目录存储数据。

例如,一个表app,它在HDFS中的路径为:

/user/hive/warehouse/app。

Partition(分区)对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。

在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。

Buckets(桶)对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。

ExternalTable指向已经在HDFS中存在的数据,可以创建Partition。

它和Table在元数据的组织上是相同的,而实际数据的存储则有较大的差异。

Table(内部表)的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。

删除表时,表中的数据和元数据将会被同时删除。

ExternalTable只有一个过程,加载数据和创建表同时完成(CREATEEXTERNALTABLE……LOCATION),实际数据是存储在LOCATION后面指定的HDFS路径中,并不会移动到数据仓库目录中。

当删除一个ExternalTable时,仅删除hive的元数据,不会删除hdfs上对应的文件。

5.3.Hive的数据存储格式

Hive支持以下存储格式:

⏹TextFile

文本格式(默认)。

⏹SequenceFile

SequenceFile是HadoopAPI提供的一种二进制文件,它将数据以的形式序列化到文件中

⏹RCFile

RCFile是Hive推出的一种专门面向列的数据格式。

它遵循“先按列划分,再垂直划分”的设计理念。

当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。

⏹ORCFile

全称为OptimizedRowColumnaerfile,针对RCFile存储格式进行一些优化。

⏹Avro

Avro是一种用于支持数据密集型的二进制文件格式。

它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。

5.4.Hi

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1