HIVE安装使用说明Word文档格式.docx
《HIVE安装使用说明Word文档格式.docx》由会员分享,可在线阅读,更多相关《HIVE安装使用说明Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
Hive
Hadoop
hdfs2
10.68.19.182
hdfs3
10.68.19.183
MySQL
二、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("
));
#创建数据库
createdatabasehive;
#授权
grantallonhive.*tohive@'
%'
identifiedby'
hive'
;
localhost'
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"
启用配置
$source/etc/profile
3.3.修改配置文件
$cd$HIVE_HOME
$cpconf/hive-default.xml.templateconf/hive-site.xml
$viconf/hive-site.xml
修改以下内容的值
<
configuration>
<
property>
name>
javax.jdo.option.ConnectionURL<
/name>
value>
jdbc:
mysql:
//10.68.19.183:
3306/hive<
/value>
description>
JDBCconnectstringforaJDBCmetastore<
/description>
/property>
javax.jdo.option.ConnectionDriverName<
com.mysql.jdbc.Driver<
DriverclassnameforaJDBCmetastore<
javax.jdo.option.ConnectionPassword<
hive<
passwordtouseagainstmetastoredatabase<
javax.jdo.option.ConnectionUserName<
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<
...
/configuration>
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:
#查看当前数据库
showdatabases;
#查看所有表
showtables;
#创建表
createtableusers(user_idint,fnamestring,lnamestring);
#插入数据
INSERTINTOusers(user_id,fname,lname)VALUES(1,'
john'
'
smith'
);
INSERTINTOusers(user_id,fname,lname)VALUES(2,'
doe'
INSERTINTOusers(user_id,fname,lname)VALUES(3,'
#查询数据
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
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='
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='
显示分区
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采用以下方式进行连接
//<
zookeeper_ensemble>
serviceDiscoveryMode=zooKeeper;
zooKeeperNamespace=<
hiveserver2_namespace>
其中:
ZooKeeper地址和端口
例如:
Stringurl="
2181,hdfs2:
2181,hdfs3:
2181/;
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提供的一种二进制文件,它将数据以<
key,value>
的形式序列化到文件中
⏹RCFile
RCFile是Hive推出的一种专门面向列的数据格式。
它遵循“先按列划分,再垂直划分”的设计理念。
当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。
⏹ORCFile
全称为OptimizedRowColumnaerfile,针对RCFile存储格式进行一些优化。
⏹Avro
Avro是一种用于支持数据密集型的二进制文件格式。
它的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。
5.4.Hi