HIVE安装使用说明.docx
- 文档编号:4410335
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:271.76KB
HIVE安装使用说明.docx
《HIVE安装使用说明.docx》由会员分享,可在线阅读,更多相关《HIVE安装使用说明.docx(14页珍藏版)》请在冰豆网上搜索。
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
修改以下内容的值
mysql:
//10.68.19.183:
3306/hive
...
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配置
2181,hdfs2:
2181,hdfs3:
2181
4.3.启动HiveServer2
$$HIVE_HOME/bin/hiveserver2
4.3.验证集群启用
$zkCli.sh
$ls/hiveserver2
4.4.集群的使用
JDBC或ODBC采用以下方式进行连接
jdbc:
hive2:
//
其中:
例如:
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HIVE 安装 使用说明