十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章给大家分享的是有关Hive能做什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都网络公司-成都网站建设公司成都创新互联公司10余年经验成就非凡,专业从事成都网站设计、网站制作,成都网页设计,成都网页制作,软文营销,广告投放等。10余年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:18980820575,我们期待您的来电!
Hive能做什么?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL https://my.oschina.net/u/2000675/blog/746016#navbar-header),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL(Hive SQL),它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作(HQL函数库)。
为什么要使用Hive?
操作接口采用类SQL语法,提供快速开发的能力
避免了去写MapReduce,减少开发人员的学习成本
扩展功能很方便
Hive与传统数据库对比
Hive | RDBMS | |
查询语言 | HQL | SQL |
数据存储 | HDFS | Raw Device or Local FS |
执行 | MapReduce | Excutor |
执行延迟 | 高 | 低 |
处理数据规模 | 大 | 小 |
数据类型 | 全部数据(历史和在线---分析) | 在线数据 |
冗余程度 | 高冗余 | 低冗余(通过范式) |
... | ... | ... |
... | ... | ... |
Hive的架构
用户接口主要有三个:CLI,Client 和WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WUI是通过浏览器访问Hive。
Hive将元数据存储在数据库中,如MySQL、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。
Thriff (参考http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/)
Hive相关概念
Operator(最小的处理单元):每个操作符代表HDFS的一个操作或者一道MapReduce作业
Operator都是Hive定义的一个处理过程
Operator定义(树状结构):
protectedList>childOperators; protectedList >parentOperators; protectedbooleandone;// 初始化值为false
ANTLR词法语法分析工具解析HQL
Hive的三种模式
Local模式:该模式连接到一个In-memory的数据库Derby,一般用于Unit Test
Hive单用户模式:通过网络连接到一个数据库中,是最经常使用到的模式
Hive多用户模式:用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
1.本地 derby 这种方式是最简单的存储方式,只需要在 hive-site.xml 做如下配置便可注:使用 derby 存储方式时,运行 hive 会在当前目录生成一个 derby 文件和一个 metastore_db 目录。这种存储方式的弊端是在同一个目录下同时只能有一个 hive 客户端能使用数据库,否则会提示如下错误 [html] view plaincopyprint? hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metast ore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask hive> show tables; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Failed to start database 'metastore_db', see the next exception for details. NestedThrowables: java.sql.SQLException: Failed to start database 'metastore_db', see the next exception for details. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 2.本地 mysql 这种存储方式需要在本地运行一个 mysql 服务器,并作如下配置(需要将 mysql 的驱动 jar 包拷贝到$HIVE_HOME/lib 目录下)。 # /opt/hive-1.2.1/conf/hive-site.xml javax.jdo.option.ConnectionURL jdbc:derby:;databaseName=metastore_db;create=true javax.jdo.option.ConnectionDriverName org.apache.derby.jdbc.EmbeddedDriver hive.metastore.local true hive.metastore.warehouse.dir /user/hive/warehouse 附: 安装 mysql Yum install mysql-server -y 启动服务 service mysqld start mysql 修改 mysql 权限: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION; flush privileges; delete from user where Host != '%'; 删除多余会对权限造成影响的数据刷新权限 [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected at jline.TerminalFactory.create(TerminalFactory.java:101) 错误的原因: Hadoop jline 版本和 hive 的 jline 不一致 3.远端 mysql 3.1.remote 一体 这种存储方式需要在远端服务器运行一个 mysql 服务器,并且需要在 Hive 服务器启动 meta 服务。 这里用 mysql 的测试服务器,ip 位 192.168.1.214,新建 hive_remote 数据库,字符集位 latine1 hive.metastore.warehouse.dir /user/hive_remote/warehouse hive.metastore.local true javax.jdo.option.ConnectionURL jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword password 注:这里把 hive 的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开, 3.2.Remote 分开 将 hive-site.xml 配置文件拆为如下两部分 -服务端配置文件 启动:hive --service metastore hive.metastore.warehouse.dir /user/hive/warehouse javax.jdo.option.ConnectionURL jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword password hive.metastore.local false hive.metastore.uris thrift://192.168.1.188:9083 -客户端配置文件 启动:hive hive.metastore.warehouse.dir /user/hive/warehouse javax.jdo.option.ConnectionURL jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456 hive.metastore.warehouse.dir /user/hive/warehouse hive.metastore.local false hive.metastore.uris thrift://slave2:9083
感谢各位的阅读!关于“Hive能做什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!