标签(空格分隔): 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. 理顺react,flux,redux这些概念的关系

    作者:北溟小鱼hk链接:https://www.zhihu.com/question/47686258/answer/107209140来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  2. 2018.5.30 Oracle数据库PLSQL编程---游标的使用

    显示游标的步骤 /* 显示游标处理步骤 1.声明游标 语法结构:cursor 游标名称 is SQL 语句; 2.打开游标 语法结构:open游标名称; 3.提取数据 语法结构:fetch 4.关闭游 ...

  3. 管理员必备的几个Linux系统监控工具

    需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧.大多数Linux发行版本都装备了大量的监控工具.这些工具提供了能用作取得相关信息和系统活动的量度指标.你能使用这些工具发现造成性 ...

  4. daemon函数实现原理 守护进程

    linux提供了daemon函数用于创建守护进程,实现原理如下: #include <unistd.h> int daemon(int nochdir, int noclose); 1.  ...

  5. CSS清除浮动方法总结

    什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高 ...

  6. 牛客小白月赛5 A 无关(relationship) 【容斥原理】【数据范围处理】

    题目链接:https://www.nowcoder.com/acm/contest/135/A 题目描述 若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关.   给出一个含有k个元素的 ...

  7. LAMP PHP 详解

    目录 LAMP PHP 详解 LAMP 请求流程与原理 PHP 简介 PHP Zend Engine Opcode php 配置详解 php 加速器 部署LAMP 使用 php 连接 mysql 最基 ...

  8. linux常用指令学习记录

    前言 本文主要为学习贴,用来记录一些 linux上的常用指令 以供参考. 文件内容查看 cat 从上往下阅读文件内容 cat [-AbEnTv] ${FILE_NAME) cat -n /etc/is ...

  9. C++从键盘读入数组并存储

    C++从键盘读取任意长度的数组,现总结如下: //读取指定长度的数组 int main() { int n = 0; cin >> n; vector<int> p(n); f ...

  10. [Poj1273]Drainage Ditches(网络流)

    Description 给图,求最大流 最大流模板题,这里用dinic Code #include <cstdio> #include <cstring> #include & ...