零基础班第十四课 - Hive安装部署与快速入门

一、Hive简介

二、Hive下载

三、Hive元数据

四、Hive的使用

五、Hive启动出现的问题

六、思考及作业:

一、Hive简介

简介:

  • Hive是一个数据仓库(data warehouse),能够读、写、管理大量数据,它是构建在Hadoop之上的数据仓库。

  • 数据存储在hdfs,用MapReduce执行,运行是yarn。

为什么MapReduce的执行性能不理想
进程运行中jps查看进程会有一个runjar进程,使用jps -l 或jps -m查看该进程。

部署的前提条件:

  • 生产上的东西全都是linux上操作的,除了微软(windows);有条件Mac开发最好,没有条件虚拟机上装系统就行了。
  • native io,跑着跑着报错
Requirements:
jdk1.7+
hadoop2.x
linux系统
本次部署使用软件:hive-1.1.0-cdh5.7.0

二、Hive下载:

一、下载:

  • 下载地址:wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
  • 解压缩:tar -xzvf hive-1.1.0-cdh5.7.0
  • 移动至app目录下(app目录用于专门存储软件):mv hive-1.1.0-cdh5.7.0 ~/app

hive下目录介绍:

在这里插入图片描述
1、bin目录:存放脚本执行文件.
2、conf目录:存放配置文件,对于Hadoop来说它的conf目录是:HADOOP_HOME/etc/hadoop;对于Hive来说它的conf目录是:HIVE_HOME/conf.
3、习惯配置当前用户环境变量:
vi ~/.bash_profile 配置完后source生效

二、部署

  • 添加环境变量,使得任意窗口都能执行Hive命令:
export HIVE_HOME = /home/hadoop/app/hive-1.1.0-cdh5.7.0
PATH=$HIVE_HOME/bin:$PATH
source ~./bash_profile
注意点:新开session(窗口)不需要source生效;已开窗口没有source的话,则环境变量不生效。

2.1、MapReduce跑一个WordCount案例:

第一步:
本地数据准备:在/home/hadoop/data目录下准备一份ruozeinput.txt文件:

cat ruozeinput.txt
ruoze   ruoze   ruoze
jepson  jepson
john

第二步:

  • 先创建输入路径:hdfs dfs -mkdir -p /wordcount/input
  • ruozeinput.txt文件上传hdfs:hdfs dfs -put ruozeinput.txt /wordcount/input

第三步:

  • start-yarn.sh 启动yarn
  • 进入到这个目录:/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce,注意这个目录下有一个官方提供的jar包:hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar

wordcount的命令:

hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /wordcount/input/ruozeinput.txt /wordcount/output
hadoop 跟上 jar 跟上官方给的这个jar包(hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar) 跟上wordcount 跟上输入路径(计算wordcount文件的路径) 跟上输出路径(结果输出路径)

在这里插入图片描述

2.2、 Hive案例:

第一步:

先确保hdfs启动成功,jps查看到三进程已经启动,使用hive启动hive。
在这里插入图片描述

第二步:

1、在hive中创建d6_wc表,使用建表语句:create table d6_wc(sentence string);
此时表中数据是空的。
在这里插入图片描述
2、把本地/home/hadoop/data/ruozeinput.txt这个文件加载至我们创建的d6_wc表。
语法如下:

  • load data local inpath ‘/home/hadoop/data/ruozeinput.txt’ into table d6_wc;
  • select * from d6_wc;
    在这里插入图片描述
    分析下过程:
    我们看到上面的数据是以tab键分割
    1)、把每一行的数据按照制表符"\t"键进行分割;
    2)、求每个单词出现的次数
  • select word,count(1) c from d6_wc group by word order by c desc;
select word, count(1) c
	from xxx
	group by word
	order by c desc;

可以使用Hive中自带的函数:

  • select explode(split(senetence,’\t’)) as word from d6_wc;
select word, count(1) as c
from
(select explode(split(sentence,'\t')) as word from d6_wc) as a 			//as a这个别名是后加的,不写会报错:missing EOF at 'by' near 'group'
group by word
order by c desc;

一开始的报错:

  • FAILED: ParseException line 4:6 missing EOF at ‘by’ near ‘group’
  • 报错原因:需要在子查询中加别名,参照如下博客信息。
  • https://blog.csdn.net/xieganyu3460/article/details/82392022?utm_source=blogxgwz7

注意到如下图,输入完这串命令是跑MapReduce作业的,结果能顺利输出出来。
在这里插入图片描述

2.3、jps查看到RunJar进程

在这里插入图片描述

-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。

-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。

三、Hive元数据

  • Hive是构建在hadoop之上的,Hive的数据存放在hdfs上;即hive data --> hdfs

问题:文本文件有schema信息吗? 。
比如:ruozeinput.txt 就是一个普通的不能再普通的文本文件
解释:我们学习关系型数据库的时候,有数据库、表,在表中:有列的名字和类型(name/type),table/database/column(name/type) 这些叫做schema信息。

元数据信息(metadata):描述数据的数据

eg:对于ruozeinput.txt来说, 它是一行一行的数据,我们之前的sql是把每一行当做一个字段;sentence对于表来说是列的名字,对于元数据来说是字段的一个名称。

  • d6_wc是一个表名,在元数据中也是有一个表名与之对应。现在有了schema信息后,单独拿出来这个名字就会很容易。

举例了解Hive元数据:

假设:cat emp.txt

员工编号员工名字员工岗位员工上级领导编号员工入职时间工资奖金部门编号
7639Smithclerk790219800205550020

1、此时这份emp.txt表对于hdfs来说并不清楚员工名字是第几个字段;

2、有了schema以后,我们创建一张表会创建字段以及字段类型(create table empid string),这些就是schema信息;此时我们去单独拿出name信息就比较好拿。

3、这个列在这个数据中处于第几位得知道,比如这份数据中我们肉眼观察到第二列才是名字,第一列是员工编号;

  • 元数据信息除了列名信息以外还涉及到index的概念,

4、建表语句

  • create table xxx(a string, b string, c int)
  • 如果定义的时候位置反掉,查询数据会不对。
    也就是table/database/column(name type index)

5、schema就是元数据信息里的东西
生产上基本都用mysql做hive信息的存储;意味着我们还要配置MySQL。

问题:如果要访问MySQL,需要哪些东西?

  • Answer:需要url、user、password、driver(驱动)

问题:为何存储在Hive中?Hive是数据仓库,它是存储在hdfs上的,访问hdfs的速度和访问关系型数据库的速度?
在这里插入图片描述

Hive安装步骤总结:

1、下载
2、解压到~/app
3、把bin添加到环境变量
4、拷贝MySQL的驱动到lib目录下:
5、$HIVE_HOME/conf目录下vi hive-site.xml
我们需要安装MySQL的驱动:

  • 在这个目录下:/home/hadoop/app/hive/lib,把我们本地准备好的mysql驱动包使用rz命令上传上去。

  • mysql-connector-java-5.1.46-bin.jar 包

链接:https://pan.baidu.com/s/1T0neIzdwAZzNbFSgseAipg 
提取码:a7cj 
复制这段内容后打开百度网盘手机App,操作更方便哦

vi hive-site.xml

特别重要:链接过程中参数不对就会报错,百度而不得解
<configuration>
        <property>
        <name>javax.jdo.option.ConnectionURL</name>       元数据库的链接地址
         <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>      数据库不用手工创建
         </property>

        <property>
         <name>javax.jdo.option.ConnectionDriverName</name>      
                 <value>com.mysql.jdbc.Driver</value>                           指定mysql驱动
         </property>

        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>hive</value>                                        指定mysql用户名,我用的是hive用户名     
         </property>

        <property>
                <name>javax.jdo.option.ConnectionPassword</name>      
                <value>960210</value>                              指定mysql密码 请输入自己的MySQL连接密码
         </property>
</configuration>

在这里插入图片描述

3.1、环境搭建好后考虑HA

了解:cli、beeline 、HUE

1、了解那个环节会存在单点问题:MYSQL单点。

为什么这么说?因为MySQL是存储元数据信息,所有的元数据都拿不到,我们的Hive还能访问么?

在这里插入图片描述

进行测试:

  • vi hive-site.xml 我们假设这个写错了
  • 故意写错这句话:jdbc:mysql://localhost111:3306/ruoze_g6?createDatabaseIf
    NotExist=true&characterEncoding=UTF-8

在这里插入图片描述

原因:

  • hostname和ip没有配对上,启动hive,会出现如下图报错,此时要会注意看caused原因,host和ip对应不上

解决方法:MySQL采用主备方法。

  • 同时存在两个MySQL,一个挂了另外一个过来即可。

MySQL的单点问题,采用“主备”结构,哔哩哔哩搜“若泽数据”有视频;主备的意思是有2个MySQL,一个挂了另一个过来启动。

1、Hive是一个客户端,不存在集群的概念。意味着我们可以把它部署在DataNode、ResourceManager,这台机器挂了还有其它机器能提交。

重要:Important

1、在生产过程中,hive虽然没有集群的概念,也要部署多个;

2、假设我们在三台机器上部署了三个Hive,三台机器上有一个调度系统(schedule),调度系统定时把作业提交到执行机上,执行机上肯定要安装hive(执行机挂掉了,肯定就调用不过来),调用前要事先测试能够成功通信(类似ping通),这样的话Hive就不存在单点问题了。

四、Hive的使用

经典问题:

  • hive提供了一种类SQL的语法,Hive QL,问题:Hive当中的SQL和关系型数据库中的SQL有什么关系?

Answer:一毛钱关系都没有

1、从语法层面来讲:是非常类似的

Hive VS RDBMS
1、面向SQL编程,都是使用SQL
2、关系型数据库更快些 --> 时效性问题,Hive底层是基于mapreduce的,速度不快。

不能做的操作:

  • 在页面上做一个按钮去做mapreduce计算,再把结果返回,因为我们不知道底层数据量(跑几分钟,几个小时)。
  • Hive都是跑离线任务
  • Hive的延时性是非常高的,而RDBMS的延时性是很低的

Hive是支持事物的,在离线任务中,大数据的“事物”比较鸡肋

总结:

1、关系型数据库底层支持分布式的,hive底层的执行引擎(MapReduce)也是分布式的。

2、分布式就意味着会有很多节点,在hive中,spark可以布很多节点。

3、关系型数据库的集群有限制,布了二三十个就不行了。关系型数据库处理的数据不会太大,到G级别差不多了;而Hive这种大数据框架可以到PB级别,大数据机器只要集群资源够,不怕存储存不下。

4、大数据不怕数据量大,就怕数据倾斜。hive适用于离线批处理(延时性比关系型数据库高一些),有了hive以后可以使用SQL进行处理比mapreduce方便的多。

5、hadoop 、hive部署在廉价的机器上,关系型数据布在专用的机器上,一般是小型机。

五、Hive启动过程中出现的问题

  • Hive是运行在Hadoop集群上的 , 所以在安装Hive之前 , 应先启动Hadoop集群 。

  • 意思是:单节点机器的话就需要使用命令:start-dfs.sh,需要启动三进程NameNode、SecondaryNameNode、DataNode。

  • 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
    Exception in thread “main” java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby.

六、思考及作业

1)、Hive不难,就是写SQL实现, XXXX

  • 回答:在写SQL过程中整体架构是怎么考虑的,做了哪些功能的调整和优化,数据倾斜是怎么解决的。

  • 思考,单纯写SQL的话已经有那么多框架了,还要Hive干嘛?

2)、架构层面、语法层面、底层执行层面 都需要考虑优化

经典问题:

  • Hive的SQL是怎么转换为MapReduce作业的?

经典面试题:

  • 在关系型数据库一般用update、insert,Hive中一般使用load,问hive支不支持update insert?

  • hive高版本支持,但是性能差,insert插入还会产生很多小文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值