10分钟零基础就可搞懂的Hadoop架构原理,阿里架构师详解( 二 )


TaskTracker叫任务跟踪器,MapReduce体系的最后一个后台进程,位于每个slave节点上,与datanode结合(代码与数据一起的原则),管理各自节点上的task(由jobtracker分配),
每个节点只有一个tasktracker,但一个tasktracker可以启动多个JVM,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态,
Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS) 。
Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行 。
Hive
1.定义
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行 。
Hive是建立在 Hadoop 上的数据仓库基础构架 。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制 。
Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据 。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mApper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作 。
2.组成

10分钟零基础就可搞懂的Hadoop架构原理,阿里架构师详解

文章插图
 
分析:Hive架构包括:CLI(Command Line Interface)、JDBC/ODBC、Thrift Server、WEB GUI、Metastore和Driver(Complier、Optimizer和Executor),这些组件分为两大类:服务端组件和客户端组件
3.客户端与服务端组件
(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的接口 。
4.Hive与传统数据库的异同
(1)查询语言
由于 SQL 被广泛的应用在数据仓库中,因此专门针对Hive的特性设计了类SQL的查询语言HQL 。熟悉SQL开发的开发者可以很方便的使用Hive进行开发 。
(2)数据存储位置
Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS中的 。而数据库则可以将数据保存在块设备或者本地文件系统中 。
(3)数据格式
Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”t”、”\x001″)、行分隔符(”n”)以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile以及RCFile) 。
(4)数据更新
由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的 。因此,Hive中不支持
对数据的改写和添加,所有的数据都是在加载的时候中确定好的 。而数据库中的数据通常是需要经常进行修改的,因此可以使用INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 。
(5)索引
Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引 。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高 。由于MapReduce的引入,Hive可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive仍然可以体现出优势 。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟 。由于数据的访问延迟较高,决定了Hive不适合在线数据查询 。


推荐阅读