Hive基本概念入门与安装部署,使用(简单清晰,一目了然!)

猿人菌 2021-01-22 18:01:48
hive 入门 概念 基本 基本概念


在经过几天MapReduce的学习之后,我们总算是来到了Hive阶段。本篇博客小菌将为大家带来Hadoop组件之——Hive的介绍! 首先在开始之前,再让我们通过一张熟悉的图片来回顾一下Hadoop生态系统的组成部分!

我们可以清楚地看到,Hive的图案是一只长着大象脑袋的蜜蜂!为什么是长着大象的脑袋?小菌在这里为大家留下一个悬念,答案就在图里~~接下来我们正式进入Hive的学习!!!

Hive基本概念

1.1、Hive简介

什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。 其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,hive可以理解为一个将SQL转换为MapReduce的任务的工具。

为什么使用Hive

直接使用Hadoop所面临的问题:

  • 人员学习成本太高
  • 项目周期要求太短
  • MapReduce实现复杂查询逻辑开发难度太大

为什么要使用Hive:

  • 操作接口采用类SQL语法,提供快速开发的能力。
  • 避免了去写MapReduce,减少开发人员的学习成本。 功能扩展很方便。

Hive的特点

  • 可拓展 Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
  • 延展性 Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
  • 容错性 良好的容错性,节点出现问题SQL仍可完成执行。

1.2、 Hive架构

架构图

基本组成

  • 用户接口: 包括CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
  • 元数据存储: 通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  • 解释器、编译器、优化器、执行器: 完成HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执行。

1.3、 Hive与Hadoop的关系

Hive利用HDFS存储数据,利用MapReduce查询分析数据

1.4、Hive与传统数据库对比

hive用于海量数据的离线数据分析

  1. 数据格式。Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。
  2. Hive在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换。
  3. Hive 在加载的过程中不会对数据本身进行任何修改,甚至不会对数据进行扫描。而只是将数据内容复制或者移动到相应的 HDFS 目录中。
  4. Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。
  5. Hive 在加载数据的过程中不会对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于数据的访问延迟较高,决定了Hive 不适合在线数据查询。
  6. Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是一致的。

总结: hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析

1.5、Hive的数据存储

1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)

2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

  • db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
  • table:在hdfs中表现所属db目录下一个文件夹
  • external table:与table类似,不过其数据存放位置可以在任意指定路径
  • partition:在hdfs中表现为table目录下的子目录
  • bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

1.6、HIVE的安装部署

我们在此处选择第一台机器作为我们hive的安装机器。

友情提示: Hive的功能基于MapReduce和HDFS,所以在保证Hive能正常运行的前提是MapReduce和HDFS能正常使用!

1.6.1 安装

1.6.1.1、derby版hive直接使用:

1、解压hive

cd /export/softwares tar -zxvf hive-1.1.0-cdh5.14.0.tar.gz -C ../servers/

2、直接启动 bin/hive

cd ../servers/
cd hive-1.1.0-cdh5.14.0/
bin/hive
hive> create database mytest;

当我们在一台节点上的Hive上创建了一个数据库,跑到其他节点上发现不存在!说明每个节点上的数据不统一!

缺点:多个地方安装hive后,每一个hive是拥有一套自己的元数据,大家的库、表就不统一;

因为用这种方式hive的元数据无法统一,所以这种方式基本就"没用"了!因此,我们需要换下面一种方式实现各节点的数据共享!!!

1.6.1.2、使用mysql共享hive元数据:

mysql数据库的安装

  1. 在线安装mysql相关的软件包
yum install mysql mysql-server mysql-devel
  1. 启动mysql的服务
/etc/init.d/mysqld start
chkconfig mysqld on
  1. 进入mysql的客户端然后进行授权
use mysql;

配置远程连接

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

刷新 flush privileges;

  1. 设置root用户连接mysql的用户名密码
update user set password=password('123456') where user='root';

刷新 flush privileges;

修改hive的配置文件

  • 修改hive-env.sh

添加我们的hadoop的环境变量:

cd /export/servers/hive-1.1.0-cdh5.14.0/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh

修改的文件中具体位置如下:

HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0 #Hive Configuration Directory can be controlled by: export HIVE_CONF_DIR=/export/servers/hive-1.1.0-cdh5.14.0/conf

  • 修改hive-site.xml
cd /export/servers/hive-1.1.0-cdh5.14.0/conf
vim hive-site.xml
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node01:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node01</value>
</property>
<!--
<property>
<name>hive.metastore.uris</name>
<value>thrift://node03.hadoop.com:9083</value>
</property>
-->
</configuration>

配置文件中node01为该节点的主机别名,如若不同请自行修改!

上传mysql的lib驱动包

接着最重要的一步,就是将mysql的lib驱动包上传到hive的lib目录下

cd /export/servers/hive-1.1.0-cdh5.14.0/lib

将mysql-connector-java-5.1.38.jar 上传到这个目录下

成功之后,效果展示:

本次的分享就到这里了,喜欢的小伙伴们不要忘了点赞关注小菌,后续小菌将会分享更多的Hive教程,敬请期待ヾ(๑╹◡╹)ノ"

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[猿人菌]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1778567

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云