Hive之快速入门以及安装部署

1.生产中常使用的SQL on hadoop 框架

主流sql on hadoop有Hive、Spark SQL、Phonix

扩展1:hadoop 由hdfs,yarn,mr组成,守护进程nn与rm容易出现单点故障,而生产中要求是任何一个流程都要考虑到单点故障,任何一个组件环节都必须是HA(高可用),生产中nn,rm都至少两个,实时热备。

2.Hive简介

Hive是Apache基金会的一个开源顶级的项目,官网:hive.apache.org。

Hive是数据仓库,由Facebook贡献,使用SQL进行大数据的处理和分析

Hive可管理的分布式存储:HDFS/S3等

Hive可底层执行引擎:MR(Apache2.0过时)、spark 、Tez

Hive运行在yarn等

扩展1:如果一个框架最终不能落地SQL,那么这个框架就有待选择。

扩展2:hvie源码位置:github.com/apache/hive ,任何一个人都可成为源码的contributors(修改部分源码,被采纳)或commit(大功能改进或添加新功能被采纳)

扩展3:若想一个项目成为顶级项目,必须先进行孵化,例如某孵化项目http://livy.incubator.apache.org/,它的地址有incubator,表示孵化的意思,生产技术选型慎用孵化组件,可能哪天就没了。

3.hive部署

3.1下载hive-1.1.0-cdh5.7.0.tar.gz

Hive之快速入门以及安装部署_第1张图片

我这里为了和已经安装的hadoop-2.6-cdh.5.7.0保持一致,故下载的是对应的cdh版的hive。

3.2 解压并添加环境变量

rz  #上传文件
tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C  ../app/ #解压
vi ~/.bash_profile  #编辑环境变量文件,添加如下内容
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH=$HIVE_HOME/bin:$PATH
source ~/.bash_profile #更新环境变量

3.3添加mysql jdbc jar包

mv mysql-connector-java-5.1.25.jar  ../app/hive-1.1.0-cdh5.7.0/lib/ #在lib目录添加jdbcjar

3.4配置/conf/hive-site.xml

该文件,没有提供hive-sit.xml的模板,故我们需要copy一份xml文件模板添加如下内容。


    javax.jdo.option.ConnectionURL
 jdbc:mysql://localhost:3306/ruoze_d6?createDatabaseIfNotExist=true&characterEncoding=UTF-8



    javax.jdo.option.ConnectionDriverName
    com.mysql.jdbc.Driver



    javax.jdo.option.ConnectionUserName
    root



    javax.jdo.option.ConnectionPassword
    123456

3.5 启动hive

[hadoop@hadoop002 ~]$ hive  #进入hive客户端

which: no hbase in (/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/bin:/usr/java/jdk1.8.0_152/bin:/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin)

Logging initialized using configuration in jar:file:/home/hadoop/app/hive-1.1.0-cdh5.7.0/lib/hive-common-1.1.0-cdh5.7.0.jar!/hive-log4j.properties

WARNING: Hive CLI is deprecated and migration to Beeline is recommended. #hive客户端过时,推荐使用Beeline。

hive> show databases;  #显示数据库
OK
default
Time taken: 2.048 seconds, Fetched: 1 row(s)

此时打开mysql我们会发现创建了新的数据库,该数据库用于维护hive的元数据。此时的mysql是单节点的,生产中不行,mysql要采用主备。

扩展4:hive安装依赖,mysql,hdfs

扩展5:数据存储在hdfs,hive的元数据(Metadata)存储在mysql上

4.hive sql 与RDBMS对比

4.1hive的sql是类sql但是和RDBMS的sql没有任何关系

4.2hive执行上的速度远远低于RDBMS,不适用与时效性的业务需求,适合进行批量任务的作业

4.3hive虽然支持事务,但是比较鸡肋

4.4hive在高版本是支持insert与update单条记录操作但是性能很差。

4.4hive不存在集群概念,它本身是一个客户端,不需要考虑单点故障问题,但是它调用的存储系统以及计算引擎是分布式的可扩展至上万台,而RDBMS虽然也能集群部署,但是几十台就已经达到了上限

4.4hive支持P级别以上数据处理,而传统的RDBMS数据上G后性就很差了

扩展6:大数据不怕数据量大,就怕数据倾斜,

扩展7:shuffle时key数量太少会导致数据倾斜,列如spark在做reduce或reducebykey类似的聚合操作时此时,若key数据量很少,我们可在原有的key上拼接一个1~10的随机数生成新的key,然后以新的key来规约,之后再规约。

5.Hive SQL与MR操作WC对比

5.1MR进行WC

hadoop jar ~/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /wordcount/inputdata /wordcount/outputdata9

5.2 HIVE SQL进行单词统计

create table d6_wc(sentence string); #创建表
load data local inpath '/home/hadoop/data/*' into table d6_wc; #加载本地数据
select word, count(1) c
from
(select explode(split(sentence,'\t')) as word from d6_wc) t 
group by word
order by c desc;   #进行单词统计

扩展8:说 Hive不难,就是写SQL实现,这是很片面的回答,还要从架构层面、语法层面、底层执行层面思考和优化。

 

你可能感兴趣的:(Hive,Hive入门,Hive安装,单点故障,高可用)