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

一、Hive简介

二、Hive下载

  • 2.1 MapReduce跑一个WordCount案例
  • 2.2 Hive案例
  • 2.3 jps查看到RunJar进程

三、Hive元数据

  • 3.1 环境搭建好后考虑HA

四、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下目录介绍:

零基础班第十四课 - Hive安装部署与快速入门_第1张图片
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。
零基础班第十四课 - Hive安装部署与快速入门_第2张图片

第二步:

1、在hive中创建d6_wc表,使用建表语句:create table d6_wc(sentence string);
此时表中数据是空的。
零基础班第十四课 - Hive安装部署与快速入门_第3张图片
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;
    零基础班第十四课 - Hive安装部署与快速入门_第4张图片
    分析下过程:
    我们看到上面的数据是以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作业的,结果能顺利输出出来。
零基础班第十四课 - Hive安装部署与快速入门_第5张图片

2.3、jps查看到RunJar进程

零基础班第十四课 - Hive安装部署与快速入门_第6张图片

-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

员工编号 员工名字 员工岗位 员工上级领导编号 员工入职时间 工资 奖金 部门编号
7639 Smith clerk 7902 19800205 5500 20

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安装部署与快速入门_第7张图片

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

特别重要:链接过程中参数不对就会报错,百度而不得解

        
        javax.jdo.option.ConnectionURL       元数据库的链接地址
         jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8      数据库不用手工创建
         

        
         javax.jdo.option.ConnectionDriverName      
                 com.mysql.jdbc.Driver                           指定mysql驱动
         

        
                javax.jdo.option.ConnectionUserName
                hive                                        指定mysql用户名,我用的是hive用户名     
         

        
                javax.jdo.option.ConnectionPassword      
                960210                              指定mysql密码 请输入自己的MySQL连接密码
         


零基础班第十四课 - Hive安装部署与快速入门_第8张图片

3.1、环境搭建好后考虑HA

了解:cli、beeline 、HUE

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

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

零基础班第十四课 - Hive安装部署与快速入门_第9张图片

进行测试:

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

零基础班第十四课 - Hive安装部署与快速入门_第10张图片

原因:

  • 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插入还会产生很多小文件。

你可能感兴趣的:(零基础班Hive课程)