标签(空格分隔): 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&nbsp;&nbsp;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简介以及部署的更多相关文章

  1. # hadoop入门第六篇:Hive实例

    前言   前面已经讲了如何部署在hadoop集群上部署hive,现在我们就做一个很小的实例去熟悉HIVE QL.使用的数据是视频播放数据包括视频编码,播放设备编码,用户账号编码等,我们在这个数据基础上 ...

  2. JavaMail入门第五篇 解析邮件

    上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格式.规范复杂得很.不过,我们所用的浏览器内置了解析各种数据类 ...

  3. Hadoop入门第四篇:手动搭建自己的hadoop小集群

    前言 好几天没有更新了,本来是应该先写HDFS的相关内容,但是考虑到HDFS是我们后面所有学习的基础,而我只是简单的了解了一下而已,后面准备好好整理HDFS再写这块.所以大家在阅读这篇文章之前,请先了 ...

  4. Android JNI入门第五篇——基本数据类型使用

    前面讲到了java和native数据类型,这里就开始做一下使用: 第一步:新建工程 第二部:书写 java方法: public class NativeMethod { static { System ...

  5. Visualforce入门第五篇_2017.3.1

    Visualforce添加过滤器,实现数据的筛选 参考原文:https://trailhead.salesforce.com/modules/visualforce_fundamentals/unit ...

  6. Hadoop入门第三篇-MapReduce试手以及MR工作机制

    MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...

  7. JavaMail入门第四篇 接收邮件

    上一篇JavaMail入门第三篇 发送邮件中,我们学会了如何用JavaMail API提供的Transport类发送邮件,同样,JavaMail API中也提供了一些专门的类来对邮件的接收进行相关的操 ...

  8. JavaMail入门第三篇 发送邮件

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  9. java入门第五步之数据库项目实战【转】

    在真正进入代码编写前些进行一些工具的准备: 1.保证有一个可用的数据库,这里我用sql server 2000为例,2.拥有一个ide,如ecelise或myeclipse等,这里我使用的是myecl ...

随机推荐

  1. hdu1213-How Many Tables---基础并查集

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 题目大意: 今天是Ignatius的生日,他邀请了许多朋友.现在是吃晚饭的时间,Ignatiu ...

  2. 关于C#的垃圾回收机制,Finalize和Dispose的区别(自认为很清晰了,有疑问的评论)

    来到个新地方,新学习C#,前面看到C#的垃圾回收,Finalize和Dispose时,总是一知半解,迷迷糊糊.这次好了,前面连续两次面试问到这个问题,脑子里不是很清晰,加上用英文来表达,更是雪上加霜的 ...

  3. 2018.6.5 Oracle plsql编程 游标的使用

    --3.查询10部门所有员工的姓名.(ref游标实现) 动态游标 declare --创建一种游标类型 type type_cursor is ref cursor; --声明变量指定游标类型 v_c ...

  4. 使用PinYin4j,获取汉字的拼音字母

    需要导入的文件 <!-- 引入pinyin4J的依赖 --> <dependency> <groupId>com.belerweb</groupId> ...

  5. Docker学习笔记--2 镜像的创建

    如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等应用服务环境,有下面三种方法: 1,根据系统镜像创建Docker容器,这时容器就相当于是一个虚拟机,进入容 ...

  6. Nginx 配置支持 WAF

    WAF(Web Application Firewall),中文名叫做“Web应用防火墙” WAF的定义是这样的:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提 ...

  7. Spring的datasource配置详解【转】

    一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource ...

  8. Python的集合与字典练习

    集合与字典练习 question1 问题描述:有一个列表,其中包括 10 个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表 ...

  9. A1065 A+B and C (64bit) (20)(20 分)

    A1065 A+B and C (64bit) (20)(20 分) Given three integers A, B and C in [-2^63^, 2^63^], you are suppo ...

  10. 动态规划:HDU3496-Watch The Movie(二维费用的背包问题)

    Watch The Movie Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...