建立在关系模型之上的数据库称为关系型数据库(关系模型是由埃德加·科德于1970年提出的),关系型数据库借助集合代数等数学概念处理数据库中的数据。数据查询语言SOL是基于关系型数据库的语言,能够对关系型数据库中的数据进行检索和操作。关系模型由关系数据结构、关系操作集合、关系完整性约束3个部分组成。当前主流的关系型数据库有Oracle、SOL Server、Access.MySQL等。
图1-1 Hive图
大型网站中用户的并发性会非常高,对于传统关系型数据库来说,硬盘I/O(读写操作)是一个很大的瓶颈。
海量数据的高效率读写
在信息时代飞速发展的情况下,而关系型数据库查询一张包含海量数据的表的效率是非常低的。
在基于Web的结构中,数据库的横向扩展是非常困难的当其个应用系统的用户量和访问量剧增时,传统数据库无法添加更多的硬件或服冬节占来扩展其性能和负载能力。
Hive是基于 Hadoop的一个类关系型数据库的数据仓库工具,能够将结构化数据文件映射为数据库表并提供完整的查询功能。Hive定义了简单的类SQL查询语言HiveQL或HQL,它使熟悉 SQL的用户查询数据更加方便Hive的学习成本低,不需要专门开发mapReduce应用就可以通过类SQL语句快速实现 MapReduce的统计,能够对数据仓库进高效的数据统计分析。
Driver: 该组件包括Complier Optimizer 和Executor,能将用户编写的HQL语句进行编译解析、生成执行计划,然后调用MapReduce进行数据分析。
Metastore: 元数据服务组件,用来存储Hive元数据,因此Hive能够把Metastore服务分离并安装到远程集群,做到降低Hive服务与Metastore服务的耦合度,保证Hive运行
Thrift Server: Thrift是Facebook旗下的软件框架,能够进行跨语言服务的开发,Hive集成了该服务,支持不同语言调用Hive接口。
CLI:Command Line Interface,命令行接口。
Thrift客户端: Hive架构中多数客户端接口是建立在Thrift之上的,包括JDBC和ODBC接口
Web GUI: Hive提供了通过网页访问Hive服务的服务,对应Hive的HWI组件。
Hive作为Hadoop的基础数询和分析。Hive提供了-系列数据提取、转化、加载的工具。Hive 定义了类SQL的查询数据仓库工具,可以对存储在Hadoop中的大规模数据进行查询HiveQL或HQL,它使熟悉SQL的用户查询数据更方便。同时,HiveQL允许开发者通过自定义Mapper和Reducer来完成自带Mapper和Reducer无法完成的分析工作
因为hive是基于Hadoop框架的仓库数据工具,Hadoop提交作业又有较大的时间延迟,导致hive不适合做低延迟的应用
MySQL关系型数据库管理系统由瑞典MySQL AB公司开发,目前属于甲骨文公司旗下。Hive内部对MySQL提供了很好的支持并提供了类SQL查询语言(即HiveQL或HQL),它允许能够熟练使用SQL查询的用户对数据进行查询。同时也允许能够熟练使用MapReduce的开发者通过开发自定义Mapper和Reducer来处理内建的Mapper和Reducer MySQL支持FreeBSD、Linux、MAC、Windows等多种操作系统,Hive数据仓库工具借助MySQL数据库进行文件存储主要基于以下几点。
?数据较为安全。
?使用便捷。
?多语言支持: MySQL为C、C++、Python、JAVA、Perl、PHP、Ruby等多种编程语言提供了API,访问和使用方便。
?移植性好:MySQL 是跨平台的,安装简单小巧。
?支持大量数据查询和存储:MySQL可以承受大量的并发访问。
Hive官网上介绍了Hive的3种安装方式,分别对应不同的应用场景。
(1)内嵌模式(元数据保村在内嵌的数据库derby种,允许一个会话链接,尝试多个会话链接时会报错),此模式连接到一个In-memory 的数据库Derby,一般用于Unit Test(单位测试)
(2)本地模式(本地安装mysql 替代derby存储元数据)
通过网络连接到一个数据库中,是最经常使用到的模式。
(3)远程模式(远程安装mysql 替代derby存储元数据)
远程服务器模式。用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
1.内嵌模式的安装与配置:
该模式下ConnectionURL指向hive内嵌数据库derby,在master下
(1)配置hive-site.xml:
vi ?hive-site.xml?
<property> ?
? <name>javax.jdo.option.ConnectionURL</name> ?
? <value>jdbc:derby:;databaseName=metastore_db;create=true</value>?
</property> ?
<property> ?
? <name>javax.jdo.option.ConnectionDriverName</name> ?
? <value>org.apache.derby.jdbc.EmbeddedDriver</value>?
</property> ?
<property> ?
? <name>hive.metastore.local</name> ?
? <value>true</value>?
</property> ??
<property> ?
? <name>hive.metastore.warehouse.dir</name> ?
? <value>/user/hive/warehouse</value> ?
</property> ?
末尾追加:
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/export/server/hive/data/${user.name}</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hive/apache-hive-1.2.2-bin/tmp/${hive.session.id}_resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hive/apache-hive-1.2.2-bin/tmp/root/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</description>
</property>
(2)配置环境变量:
vi /etc/profile:
export HIVE_HOME=/usr/hive/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
(3)配置hive-env.sh:
vi ?hive-env.sh
HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export HIVE_CONF_DIR=/usr/hive/apache-hive-2.1.1-bin/conf
export HIVE_AUX_JARS_PATH=/usr/hive/apache-hive-2.1.1-bin/lib
(4)启动hadoop
cd /usr/hadoop//hadoop-2.7.3
sbin/start-all.sh
(5)启动元数据服务(或不需要)
bin/hive --service metastore
(6)初始化hive
schematool –initSchema –dbType derby
(7)启动hive
bin/hive
至此,内嵌模式已部署完成
关于本地模式和远程模式的安装与部署请看下期