Hadoop入门第五篇:Hive简介以及部署
标签(空格分隔): Hadoop Hive hwi
1.Hive简介
之前我一直在Maxcompute上进行大数据开发,所以对数仓这块还算比较了解,在接受Hive的时候基本上没什么大的障碍。所以,有需求用到hive的同学,应该对数据仓库相关概念以及数仓设计模型有了大致的了解了。简单来说,Hive是一个基于Hadoop文件系统智商的数据仓库架构(数据存储还是HDFS),它为数仓的管理提供了:ETL工具,数据存储管理以及大型数据集的查询和分析功能。
此外,Hive还提供了HiveQL,类似SQL的语法,这块因为跟MaxCompute提供的SQL语法比较接近,我也就不具体讲了,它原理其实还是通过MapReduce去执行任务,后面我们部署hive,并跑sql的时候会看到mr的相关日志就明白了。
2.Hive的数据存储
Hive是建立在HDFS基础之上的,Hive本身并没有专门的数据存储格式,也不能为数据建立索引,因为用户可以非常自由的组织Hive中的表,只要告诉文件位置,列分隔符和行分隔符就行了。因此,我们在数仓设计以及提供data mart的时候,可以给不同的角色/部门提供不同的表名,但其实数据只需要一份(建表必须声明是外部表)。
2.1Hive的四类数据模型
- 表这个概念与我们接触到数据库的表类似,只不过hive表中都对应了一个存储目录,比如video_play 对应的是/user/hive/warehouse/video_play,大家可以在50070对应的页面上查看hdfs文件目录。
- Hive中的每个分区都对应数据库中相应分区列的一个索引,但是它的分区方式与索引不一样,Hive的一个分区对应表下的一个目录。比如我们实际中都会收集每天的日志,以每天甚至小时作为分区,那么day='20170818' hour='00'对应的就是/user/hive/warehouse/video_play/day=20170818/hour=00
- Bucket(桶)对指定列进行Hash计算,会根据哈希值切分数据,使每个桶对应一个文件。比如对视频id进行分散,哈希值为0的视频id对应的播放数据目录为/user/hive/warehouse/video_play/day=20170818/hour=00/part-00000
- 外部表(External Table)指向已经在HDFS中存在的数据,也可以创建分区。但是外部表只需要创建表,加载数据和创建表是同时完成的,数据不会移动到数据仓库目录中,删除外部表是不会删除数据的,仅仅删除元数据。
2.2Hive的元数据存储
- 元数据的概念,了解数仓的同学应该比较清楚了,元数据就是指Hive中的表名,表各个字段,表分区等等这些信息,而这些信息是存储在关系型数据库中的,所以在部署Hive的时候,首先要部署关系型数据库。
3.Hive的部署
Hive相当于在Hadoop和HDFS之上为用户封装了一层便于用户使用的接口,所以Hive是在Hadoop基础上才能部署。
3.1关系型数据库安装
由于centos7已经没有mysql了,默认的是maria-db,所以我选择的是mariadb,大家可以直接参考这篇文章的mariadb安装部分centos7 mariadb安装,同时添加一个hive用户用来管理hive的元数据
3.2Hive下载以及部署
- 从hive官网下载安装包,我使用的是1.2.2,在${HADOOP_HOME}下解压
- 配置hive系统环境变量
HIVE_HOME=/data/opt/hadoop-2.8.1/apache-hive-1.2.2-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME PATH - 修改Hive配置文件
cp hive-defaulst.xml.template hive-site.xml
添加如下相关的xml配置
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
```
同时,需要下载MySQL的JDBC驱动包,直接在[Maven公库][2]寻找相关jar包链接,在\$\{HIVE\_HOME\}/lib目录下wget就可以了
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.27/mysql-connector-java-5.1.27.jar
后台执行nohup hive --service metastore > /dev/null 2> /dev/null &
执行jps,如果看到RunJar就说明OK了,直接执行hive,,就可以启动客户端了。
###3.3 hwi(Hive WebUI)的部署
hive的web页面,里面可以查看hadoop的相关表结构,也可以直接在这个里面提交Hive QL查询语句得到结果,web页面还是很方便的,对之后的数据分析或者是其他开发同学使用。
部署参考链接[Hwi部署参考文档][3]
####3.3.1编译war包
下载hive的src代码,解压,进入到hwi项目下执行命令jar cfM hive-hwi-1.2.2.war -C web .
在当前目录下会有一个war包,拷贝到\$\{HIVE\_HOME\}/lib
####3.3.2 添加hwi配置,hive-site.xml
如下,在hive-site.xml文件中添加一下配置,注意war包的路径是基于\$\{HIVE\_HOME\}的相对路径,不要写成绝对路径
```xml
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-1.2.2.war</value>
<description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description>
</property>
<property>
<name>hive.hwi.listen.host</name>
<value>master</value>
<description>This is the host address the Hive Web Interface will listen on</description>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
<description>This is the port the Hive Web Interface will listen on</description>
</property>
3.3.3 添加jar包
由于本身的war包拷贝进去,依然缺少相关jar包,大致需要jdk中的tools.jar,commons-el-1.0.jar
jasper-compiler-5.5.23.jar jasper-runtime-5.5.23.jar
3.3.4 ant安装
去ant官网下载安装包,并且配置环境变量就OK了
3.3.5 启动脚本
nohup bin/hive --service hwi > /dev/null 2> /dev/null &
打开http://master:9999/hwi就可以了
Hadoop入门第五篇:Hive简介以及部署的更多相关文章
- # hadoop入门第六篇:Hive实例
前言 前面已经讲了如何部署在hadoop集群上部署hive,现在我们就做一个很小的实例去熟悉HIVE QL.使用的数据是视频播放数据包括视频编码,播放设备编码,用户账号编码等,我们在这个数据基础上 ...
- JavaMail入门第五篇 解析邮件
上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...
- Hadoop入门第四篇:手动搭建自己的hadoop小集群
前言 好几天没有更新了,本来是应该先写HDFS的相关内容,但是考虑到HDFS是我们后面所有学习的基础,而我只是简单的了解了一下而已,后面准备好好整理HDFS再写这块.所以大家在阅读这篇文章之前,请先了 ...
- Android JNI入门第五篇——基本数据类型使用
前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: public class NativeMethod { static { System ...
- Visualforce入门第五篇_2017.3.1
Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...
- Hadoop入门第三篇-MapReduce试手以及MR工作机制
MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...
- JavaMail入门第四篇 接收邮件
上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...
- JavaMail入门第三篇 发送邮件
JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...
- java入门第五步之数据库项目实战【转】
在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...
随机推荐
- BZOJ 3878: [Ahoi2014]奇怪的计算器
BZOJ 3878: [Ahoi2014]奇怪的计算器 标签(空格分隔): OI-BZOJ OI-线段树 Time Limit: 10 Sec Memory Limit: 256 MB Descrip ...
- 2018.2.5 PHP如何写好一个程序用框架
随着PHP标准和Composer包管理工具的面世,普通开发者撸一个框架已经不再是什么难事了. 无论是路由管理.ORM管理.还是视图渲染都有许许多多优秀的包可以使用.我们就像堆积木一样把这些包用comp ...
- 2017.12.19 Java包的静态导入import static和import的区别
import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com-..ClassName;而静态导入是这样:import static com-..ClassN ...
- python_63_装饰器6
#decorator意思:1.装饰器 2.语法糖 import time user,passwd='qi','123' def auth(func): def wrappper(*args, **kw ...
- 5-15 笔记 jtopo使用
Jtopo的核心对象有6个,分别是Stage(舞台对象),Scene(场景对象),Node(节点对象),Link(连线对象),Container(容器对象),Effect.Animate(动画效果) ...
- Redis学习记录(三)
1.Redis集群的搭建 1.1redis-cluster架构图 架构细节: (1)所有的redis节点批次互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail ...
- Linux学习记录(一)
1.Linux的简介 1.1.Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林 ...
- VPS搭建***
yum -y install epel-release** yum update yum -y install python-setuptools m2crypto supervisor easy_i ...
- CSS+JS实现流星雨动画
引言 平常会做一些有意思的小案例练手,通常都会发到codepen上,但是codepen不能写分析. 所以就在博客上开个案例分享系列,对demo做个剖析.目的以分享为主,然后也希望各路大神 ...
- 精读《sqorn 源码》
1 引言 前端精读<手写 SQL 编译器系列> 介绍了如何利用 SQL 生成语法树,而还有一些库的作用是根据语法树生成 SQL 语句. 除此之外,还有一种库,是根据编程语言生成 SQL.s ...