基于hadoop分析,了解hive的使用

一、Hadoop理论

  Hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式。

Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理)

  Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元。

  用函数式变成Mapreduce代替SQL,SQL是查询语句,而Mapreduce则是使用脚本和代码,而对于适用于关系型数据库,习惯SQL的Hadoop有开源工具hive代替。

  hadoop使用java编写,版本较为混乱,初学者可从1.2.1开始学习

    1.成百上千台服务器组成集群,需要时刻检测服务器是否故障

    2.用流读取数据更加高效快速

    3.存储节点具有运算功能,省略了服务器之间来回传数据的网络带宽限制

    4.一次写入,多次访问,不修改数据

    5.多平台

-------------------------------------------------------------------------------------------------------------------------------------

namenode:master

负责总体调度,处理协调请求等(一个集群只能有一个namenode,但是可以多个集群组成一个更大的集群,这时就有多个namenode,这时的namenode有两种状态,一种叫active并且一个大集群只能有一个namenode处于该状态,一种为standby)

namenode两大功能:接受客户端读写服务,存放元数据(DataNode存储的位置等基本信息,fsimage和edits文件)

fsimage是namenode格式化时产生的,edits是用户操作增删改查的时候生成的日志

datanode:slave,存储节点,会备份,一般本地2分,其他服务器一份

机架:多个DataNod节点组成,master通过机架感知技术得知所需数据的位置

数据块:存储单元,一般64M(hadoop2中是128M)

时刻保持心跳通讯,保证每个数据都备份于3个节点上

5的read为第一个数据块读完后,读下一个数据块,如果在读取过程中某一个数据块出问题,则会记录下来并且找其他的备份,并且以后不再读取错误数据块

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------

DataNode数据节点 

  1. 以数据块为单位储存数据
  2. 数据保存的目录由hadoop.tmp.dir决定
  3. Secondary NameNode第二名称节点 
    1. 主要是合并日日志
    2. 日志合并过程 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

分布式计算Yarn``MapReduce

  1. ResourceManager(资源管理器) 
    1. 接受客户端的请求:执行任务
    2. 分配任务资源
    3. 分配任务
  2. NodeManager(节点管理器,运行MapReduce任务) 
    1. 从DataNode获取数据,执行任务

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

map负责分批运算,如果要统计1TB数据中my的出线次数,则可以启用100个map,每个map统计0.01TB数据,最终由reduce汇总

作业(Job):运行一个MapReduce所需要用到的所有jar组件

任务(Task):mapTask和ReduceTask

Key相同的结果进行reduce统计合并

作业提交一般提交jar包和配置文件

调度一般来说默认采取FIFO调度,即先考虑优先级,然后先进先出

TaskTracker会不断向JobTracker传达任务信息,如果空闲会主动申请作业

一般的生产环境都是完全分布式模式。

二、Hive的原理以及使用

  hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析Facebook公司最早完成并开源了hive框架,可以将sql语句直接翻译成MapReduce程序。Hive是基于Hadoop的一个数据仓库工具,可以将结构化数据文件映射成一张表,并提供类似SQL的查询功能。Hive相当于一个客户端。

Hive框架的作用:

(1)可以让不懂java的数据分析人员使用hadoop进行数据分析;

(2)MapReduce开发非常繁琐复杂,使用hive可以提高效率。

(3)统一的元数据管理,可与impala/spark共享元数据。

2. Hive基础:

(1)使用HQL作为查询接口;使用MapReduce进行计算;数据存储在HDFS上;运行在Yarn上。

(2)Hive比较灵活和可扩展性,支持UDF和多种文件格式。

(3)Hive适合离线数据分析(批量处理、延时要求很大)。

Hive 是 SQL解析引擎,它将SQL语句转译成Map/Reduce Job然后在Hadoop执行。Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在Map/Reduce Job里使用这些数据。

  Hive的系统结构

  由上图可知,HDFS和Mapreduce是Hive架构的根基。Hive架构包括如下组件:CLI(command line interface)、JDBC/ODBC、Thrift Server、WEB GUI、metastore和Driver(Complier、Optimizer和Executor),这些组件可以分为两大类:服务端组件客户端组件

  (1)客户端组件:

  ①CLI:command line interface,命令行接口。

  ②Thrift客户端:上面的架构图里没有写上Thrift客户端,但是Hive架构的许多客户端接口是建立在Thrift客户端之上,包括JDBC和ODBC接口。

  ③WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的hwi组件(hive web interface),使用前要启动hwi服务。

  (2)服务端组件:

Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。

  ②Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性

  ③Thrift服务:Thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。

  (3)底层根基:

—>Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)

Hive的执行流程

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

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券