之前学习了HBase,最近由于需要又学习了Hive,也整理了下资料总结了下。
一 简介
Hive是一个构建在Hadoop上的数据仓库框架,是Facebook应对每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的。Hive的设计目的就是让精通SQL技能的分析师能够在存放海量数据的HDFS上运行查询等其它复杂操作,具有良好的可扩展性,并提供了统一的元数据管理。
二 配置
首先了解下Hive的架构,如下图1所示是hive的架构图。
图1:Architecture
JDBC/ODBC通过Thrift server来连接hive,hive提供了JDBC驱动,以jdbc:hive://host:port/dbname形式配置JDBCURL后,java应用程序可以在指定的主机和端口连接到在另一个进程中运行的hive服务器。metastore是hive元数据存放的地方,默认情况下,metastore服务和hive服务运行在同一个jvm中,它包含一个内嵌的以本地磁盘作为存储的Derby数据库实例。另外,MySQL是一种推荐的独立metastore的选择。Hive具体配置如下:
1、 环境变量
–HIVE_HOME
–HIVE_CONF_DIR
–HIVE_AUX_JARS_PATH(集成Hbase时需要设置相关jar包)
–HADOOP_HOME/HADOOP_CONF_DIR
2、 配置文件
–hive-default.xml (默认不做修改)/hive-site.xml(用户的配置)
–hive-log4j.properties
3、元数据配置
–javax.jdo.option.ConnectionDriverName 元数据服务器
–javax.jdo.option.ConnectionURL jdbcURL
–javax.jdo.option.ConnectionUserName 用户名
–javax.jdo.option.ConnectionPassword 密码
三 原理
Hive的核心是把HiveQL语言通过编译器转换成物理上能执行的MapReduce任务。编译器将HiveQL转换成一组操作符,操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或MapReduce作业。Hive通过ExecMapper和ExecReduce执行MapReduce任务。
操作符 | 描述 |
TableScanOperator | 扫描hive表数据 |
ReduceSinkOperator | 创建将发送到Reducer端的<Key,Value>对 |
JoinOperator | Join两份数据 |
SelectOperator | 选择输出列 |
FileSinkOperator | 建立结果数据,输出至文件 |
FilterOperator | 过滤输入数据 |
GroupByOperator | GroupBy语句 |
MapJoinOperator | /*+mapjoin(t) */ |
LimitOperator | Limit语句 |
UnionOperator | Union语句 |
表1 操作符表
Hive编译器的执行过为:将SQL转换成抽象语法树(Parser)->将抽象语法树转换成查询块(Semantic Analyzer)-> 将查询块转换成逻辑查询计划(Logic Plan Generator)-> 重写逻辑查询计划(LogicalOptimizer)-> 将逻辑计划转成物理计划M/R jobs ( Physical Plan Generator)-> 选择最佳的Join策略(PhysicalOptimizer)。