hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能 ,
hive使用hivesql 将hivesql 解析 真正mapReduce job 的转化,以及job优化, 执行统统有hvieParser,Planner,Optimizer组件完成,,个人的理解hivesql 解析器就就是一个"虚拟机" 但不负责的job执行
从hive的整体结构(图片来源:hadoop in action)可以了解hive的组件结构和组件.
交互连接方式:
Web GUI : HWI用户交互界面,和hivesQl交互, 通过metastore 取到元数据信息,提交HIVESQL query 到 Parser, Planner, Optimizer.
hiveServer http://hivehost:9999/hwi/
JDBC/ODBC: 通过DataBase Connectivity交互, 通过metastore 取到元数据信息,提交HIVESQL query 到 Parser, Planner, Optimizer.
CLI : command line interface , eg: linux 控制台 ,通过shell提交hivesql .,通过metastore 取到元数据信息,提交HIVESQL query 到 Parser, Planner, Optimizer.
元数据存储:
MeteStore : hive 数据仓库的元数据存储,内容 schema information ,通常是一个关系数据库, 采用mysql derby 等几种存储方式.主要HIVE的数据管理工作,
通常有如下几种方式
- 1 使用derby数据库存储元数据. 单用户环境.使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库
- 2 使用本机mysql服务器存储元数据,这种存储方式需要在本地运行一个mysql服务器,并需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下
-
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_remote?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>xxxx</value> </property>
- 3 使用远端mysql服务器存储元数据。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务
- hive服务器端配置如下
-
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_remote?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>xxxx</value> </property>
Hive客户端配置如下。<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>false</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://remoteSever:9083</value> </property>