wordpress调用网站最新文章,wordpress 网站 上传,旅游网站首页设计,安徽建设厅网站打不开Apache Hive概述
什么是Hive
Apache Hive是一款建立在Hladoop之上的开源数据仓库系统#xff0c;可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表#xff0c;基于表提供了一种类似SQL的查询模型#xff0c;称为Hive查询语言(HQL)#xff0c;用于访…Apache Hive概述
什么是Hive
Apache Hive是一款建立在Hladoop之上的开源数据仓库系统可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表基于表提供了一种类似SQL的查询模型称为Hive查询语言(HQL)用于访问和分析存储在Hadoop文件中的大型数据集。Hive核心是将HQL转换为MapReduce程序然后将程序提交到Hadoop集群执行。Hive由Facebook实现并开源。
为什么使用Hive
使用Hadoop MapReduce直接处理数据所面临的问题 人员学习成本太高需要掌握java语言MapReduce实现复杂查询逻辑开发难度太大 使用Hive处理数据的好处 操作接口采用类SQL语法提供快速开发的能力简单、容易上手避免直接写MapReduce减少开发人员的学习成本支持自定义函数功能扩展很方便背靠Hadoop擅长存储分析海量数据集
Hive和Hadoop关系
从功能来说数据仓库软件至少需要具备下述两种能力︰存储数据的能力、分析数据的能力Apache Hive作为一款大数据时代的数据仓库软件当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力而是借助Hadoop。Hive利用HDFS存储数据利用MapReduce查询分析数据。这样突然发现Hive没啥用不过是套壳Hladoop罢了。其实不然Hive的最大的魅力在于用户专注于编写HQLHive帮您转换成为MapReduce程序完成对数据的分析。 Hive的功能模拟 Hive能将数据文件映射成为一张表这个映射是指什么? 答文件和表之间的对应关系 Hive软件本身到底承担了什么功能职责? 答SQL语法解析编译成为MapReduce Apache Hive架构、组件
架构图 组件
用户接口包括CLI、JDBC/OOBC、WebGUI。其中CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。元数据存储通常是存储在关系数据库如mysql/derby中。Hive 中的元数据包括表的名字表的列和分区及其属性表的属性是否为外部表等表的数据所在目录等。Driver驱动程序包括语法解析器、计划编译器、优化器、执行器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS 中并在随后有执行引擎调用执行。执行引擎Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持MapReduce、Tez、Spark三种执行引擎。
Apache Hive数据模型
Data Model概念
数据模型∶用来描述数据、组织数据和对数据进行操作是对现实世界数据特征的描述。Hive的数据模型类似于RDBMS库表结构此外还有自己特有模型。Hive中的数据可以在粒度级别上分为三类∶ Table 表Partition 分区Bucket 分桶 DataBases 数据库
Hive作为一个数据仓库在结构上积极向传统数据库看齐也分数据库(Schema )每个数据库下面有各自的表组成。默认数据库default。Hive的数据都是存储在HDFS上的默认有一个根目录在hive-site.xml中由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse。因此Hive中的数据库在HDFS上的存储路径为︰${hive.metastore.warehouse.dir}/databasename.db比如名为itcast的数据库存储路径为/user/hive/warehouse/itcast.db
Tables 表
Hive表与关系数据库中的表相同。Hive中的表所对应的数据通常是存储在HDFPS中而表相关的元数据是存储在RDBMS中。Hive中的表的数据在HDFS上的存储路径为${hive.metastore.warehouse.dir}/databasename. db/tablename比如, itcast的数据库下t_user表存储路径为/user/hive/warehouse/itcast.db/t_user Partitions 分区
Partition分区是hive的一种优化手段表。分区是指根据分区列例如“日期day”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。分区在存储层面上的表现是table表目录下以子文件夹形式存在。一个文件夹表示一个分区。子文件命名标准分区列分区值Hive还支持分区下继续创建分区所谓的多重分区。 Buckets 分桶
Bucket分桶表是hive的一种优化手段表。分桶是指根据表中字段例如“编号ID”)的值经过hash计算规则将数据文件划分成指定的若干个小文件。分桶规则hashfunc(字段)%桶仓数余数相同的分到同一个文件。 分桶的好处是可以优化join查询和方便抽样查询。Bucket分桶表在HDFS中表现为同一个表目录下数据根据hash散列之后变成多个文件。 Hive和MySQL对比
Hive虽然具有RDBMS数据库的外表包括数据模型、SQL语法都十分相似但应用场景却完全不同。Hive只适合用来做海量数据的离线分析。Hive的定位是数据仓库面向分析的OLAP系统。因此时刻告诉自己Hive不是大型数据库也不是要取代MySQL承担业务数据处理。
Apache HiveMySQL定位数据仓库数据库使用场景离线数据分析业务数据事务处理查询语言HQLSQL数据存储HDFSLocal FS执行引擎MR、Tez、SparkExcutor执行延迟高低处理数据规模大小常见操作导入数据、查询增删改查
Metadata、Metastore介绍
什么是元数据
元数据(Metadata)又称中介数据、中继数据为描述数据的数据 data about data )主要是描述数据属性( property )的信息用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
Hive Metadata
Hive Metadata即Hive的元数据。包含用Hive创建的database、table、表的位置、类型、属性字段顺序类型等元信息。元数据存储在关系型数据库中。如hive内置的Derby、或者第三方如MySQL等。
Hive Metastore
Metastore即元数据服务。Metastore服务的作用是管理metadata元数据对外暴露服务地址让各种客户端通过连接metastore服务由metastore再去连接MySQL数据库来存取元数据。有了metastore服务就可以有多个客户端同时连接而且这些客户端不需要知道MySQL数据库的用户名和密码只需要连接metastore 服务即可。某种程度上也保证了hive元数据的安全。 Metastore配置方式
metastore服务配置有3种模式内嵌模式、本地模式、远程模式。区分3种配置方式的关键是弄清楚两个问题 Metastore服务是否需要单独配置、单独启动Metadata是存储在内置的derby中还是第三方RDBMS比如MySQL。 本系列中使用企业推荐模式--远程模式部署。
内嵌模式本地模式远程模式Metastore是否单独配置、启动否否是Metadata存储介质DerbyMySQLMySQL
内嵌模式
内嵌模式(Embedded Metastore)是metastore默认部署模式。此种模式下元数据存储在内置的Derby数据库并且Derby数据库和metastore服务都嵌入在主HiveServer进程中当启动HiveServer进程时Derby和metastore都会启动。不需要额外起Metastore服务。但是一次只能支持一个活动用户适用于测试体验不适用于生产环境。 本地模式
本地模式( Local Metastore )下Metastore服务与主liveServer进程在同一进程中运行但是存储元数据的数据库在单独的进程中运行并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。本地模式采用外部数据库来存储元数据推荐使用MySQL。hive根据hive.metastore.uris参数值来判断如果为空则为本地模式。缺点是∶每启动一次hive服务都内置启动了一个metastore。 远程模式
远程模式(Remote Metastore ) 下Metastore服务在其自己的单独JVM上运行而不在HiveServer的JVM中运行。如果其他进程希望与Metastore服务器通信则可以使用Thrift Network API进行通信。远程模式下需要配置hive.metastore.uris 参数来指定metastore服务运行的机器ip和端口并且需要单独手动启动metastore服务。元数据也采用外部数据库来存储元数据推荐使用MySQL。在生产环境中建议用远程模式来配置Hive Metastore。在这种情况下其他依赖hive的软件都可以通过Metastore访问hive。由于还可以完全屏蔽数据库层因此这也带来了更好的可管理性/安全性。 Apache Hive安装部署
安装前准备
由于Apache Hive是一款基于HIadoop的数据仓库软件通常部署运行在Linux系统之上。因此不管使用何种方式配置Hive Metastore必须要先保证服务器的基础环境正常Hadoop集群健康可用。服务器基础环境集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装Hadoop集群健康可用启动Hive之前必须先启动Hadoop集群。特别要注意需等待HDFS安全模式关闭之后再启动运行Hlive。Hive不是分布式安装运行的软件其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算。
Hadoop与Hive整合
因为Hive需要把数据存储在HDFS上并且通过MapReduce作为执行引擎处理数据因此需要在Hadoop中添加相关配置属性以满足Hive在Hadoop上运行。修改Hadoop中core-site.xml并且Hadoop集群同步配置文件重启生效。 具体安装步骤请参考B站P19-22https://www.bilibili.com/video/BV1L5411u7ae/ Hive命令行客户端
Hive发展至今总共历经了两代客户端工具。第一代客户端deprecated不推荐使用$HIVE_HOME/bin/hive是一个shellUltil。主要功能:一是可用于以交互或批处理模式运行Hive查询;二是用于Hive相关服务的启动比如metastore服务。第二代客户端recommended推荐使用$HIVE_HOME/bin/beeline是一个JDBC客户端是官方强烈推荐使用的Hive命令行工具和第—代客户端相比性能加强安全性提高。 Hive Beeline Client
Beeline在嵌入式模式和远程模式下均可工作。在嵌入式模式下它运行嵌入式Hive(类似于Hive Client)而远程模式下beeline通过Thrift连接到单独的HiveServer2服务上这也是官方推荐在生产环境中使用的模式。那么问题来了HiveServer2是什么? HiveServer1哪里去了
HiveServer、HiveServer2服务
HiveServer、HiveServer2都是Hive自带的两种服务允许客户端在不启动CLI(命令行的情况下对Hive中的数据进行操作且两个都允许远程客户端使用多种编程语言如java, python等向hive提交请求取回结果。但是HiveServer不能处理多于一个客户端的并发请求。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2进而解决了该问题。HiveServer已经被废弃。HiveServer2支持多客户端的并发和身份认证旨在为开放API客户端如JDBC、ODBC提供更好的支持。
Hive服务和客户端
HiveServer2通过Metastore服务读写元数据。所以在远程模式下启动HiveServer2之前必须先首先启动metastore服务。特别注意远程模式下Beeline客户端只能通过HiveServer2服务访问Hive。而bin/hive是通过Metastore服务访问的。具体关系如下 bin/hive 客户端
在hive安装包的bin目录下有hive提供的第一代客户端 bin/hive。该客户端可以访问hive的metastore服务从而达到操作hive的目的。友情提示∶如果你是远程模式部署请手动启动运行metastore服务。如果是内嵌模式和本地模式直接运行bin/hive , metastore服务会内嵌一起启动。可以直接在启动Hive metastore服务的机器上使用bin/hive客户端操作此时不需要进行任何配置。 bin/beeline 客户端
hive经过发展推出了第二代客户端beeline但是beeline客户端不是直接访问metastore服务的而是需要单独启动hiveserver2服务。在hive安装的服务器上首先启动metastore服务然后启动hiveserver2服务。 在node3上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。Beeline是JDBC的客户端通过JDBC协议和Hiveserver2服务进行通信协议的地址是jdbc:hive2://node1:10000 属性配置的3种方式
概述 Hive除了默认的属性配置之外还支持用户使用时修改配置 修改Hive配置之前作为用户需要掌握两件事: 1.有哪些属性支持用户修改属性的功能、作用是什么2.支持哪种方式进行修改是临时生效还是永久生效的。 Hive配置属性是在HiveConf. Java类中管理的可以参考文件以获取当前使用版中可用的配置属性列表 从Hive 0.14.0开始会从HiveConf.java类中直接生成配置模板文件hive-default.xml.template 详细的配置参数大全可以参考Hive官网配置参数https://cwiki.apache.org/confluence/display/Hive/ConfigurationProperties
配置方式一hive-site.xml
在$HIVE_HOME/conf路径下可以添加一个hive-site.xml文件把需要定义修改的配置属性添加进去这个配置文件会影响到基于这个Hive安装包的任何一种服务启动、客户端使用方式。
比如使用MIySQL作为元数据的存储介质把连接MySQL的相关属性配置在hive-site.xml文件中这样不管是本地模式还是远程模式启动不管客户端本地连接还是远程连接都将访问同一个元数据存储介质。 配置方式二–hiveconf命令行参数
hiveconf是一个命令行的参数用于在使用Hive CLI或者Beeline CLI的时候指定配置参数。
这种方式的配置在整个的会话session中有效会话结束失效。
比如在启动hive服务的时候为了更好的查看启动详情可以通过hiveconf参数修改日志级别 配置方式三set命令
在Hive CLI或Beeline中使用set命令为set命令之后的所有SQL语句设置配置参数这个也是会话级别的。这种方式也是用户日常开发中使用最多的一种配置参数方式。
因为Hive倡导一种谁需要、谁配置、谁使用的一种思想避免你的属性修改影响其他用户的修改。 配置方式四服务特定配置文件
hivemetastore-site.xml、hiveserver2-site.xml
Hive Metastore会加载可用的hive-site.xml以及hivemetastore-site.xml配置文件。HiveServer2会加载可用的hive-site.xml以及hiveserver2-site.xml。如果HiveServer2以嵌入式模式使用元存储则还将加载hivemetastore-site.xml。
总结
配置方式优先级set设置 hiveconf参数 hive-site.xml配置文件set参数声明会覆盖命令行参数hiveconf命令行参数会覆盖配置文件hive-site.xml设定日常开发使用中如果不是核心的需要全局修改的参数属性建议使用set命令进行设置另外Hive也会读入Hadoop的配置因为Hive是作为Hadoop的客户端启动的Hive的配置会覆盖Hadoop的配置