Hive 运行模式总结

Hive 基础概念

Hive是基于Hadoop的一个数据仓库,Hive能够将SQL语句转化为MapReduce任务进行运行。

  Hive架构图分为以下四部分。

   

  1、用户接口

    Hive有三个用户接口:

    • 命令行接口(CLI):以命令行的形式输入SQL语句进行数据数据操作
    • Web界面:通过Web方式进行访问。     
    • Hive的远程服务方式:通过JDBC等方式进行访问。              

  2、元数据存储

    将元数据存储在关系数据库中(MySql、Derby),元数据包括表的属性、表的名称、表的列、分区及其属性以及表数据所在的目录等。

  3、解释器、编译器、优化器

    分别完成SQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。

  4、数据存储

    Hive没有专门的数据存储格式,也没有为数据建立索引,Hive中所有数据都存储在HDFS中。

    Hive包含以下数据模型:表、外部表、分区和桶

 

Metadata,Metastore 的作用

  Metadata即元数据:   元数据包含用Hive创建的database、tabel等的元信息。元数据存储在关系型数据库中。如Derby、MySQL等。

  Metastore的作用是:  客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

  有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。

 

Metastore Database & Server 运行模式

我的Hive 版本是3.1.2,很多参数设置都是该版本的。若是hive1、2,请参考https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration#AdminManualMetastoreAdministration-HiveMetastoreAdministration

 

Metastore Databse

默认使用的是derby,这个数据库有两种使用模式。

 

Database Embedded 模式 

        数据库作为一个lib,和hive server、metastore server位于同一个进程,metastore server负责启动和关闭数据库。若不给配置文件或使用hive-default-template生成的配置文件,就是这种模式。因为数据库位于某进程内,数据处于内存中,若其他进程需要访问改数据库只能以只读模式打开,因此不能在Embedded模式的数据库上创建两个metastore server(因为他们都需要读写功能)。

常见的配置信息如下:

Config Param

Config Value

Comment

javax.jdo.option.ConnectionURL

jdbc:derby:;databaseName=
../build/test/junit_metastore_db;create=true

Derby database located at hive/trunk/build...

javax.jdo.option.ConnectionDriverName

org.apache.derby.jdbc.EmbeddedDriver

Derby embeded JDBC driver class.

详情参考: https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration#AdminManualMetastoreAdministration-Local/EmbeddedMetastoreDatabase(Derby)

 

Database Remote 模式

       数据库作为服务器模式,独立一个进程运行,可被多个metastore进程共享。常见的配置信息如下:

Config Param

Config Value

Comment

javax.jdo.option.ConnectionURL

jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true

metadata is stored in a MySQL server

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

MySQL JDBC driver class

javax.jdo.option.ConnectionUserName

<user name>

user name for connecting to MySQL server

javax.jdo.option.ConnectionPassword

<password>

password for connecting to MySQL server

当然derby也是可以使用服务器模式的,详情参看:https://cwiki.apache.org/confluence/display/Hive/HiveDerbyServerMode

 

当前支持的数据库服务器列表:

Database

Minimum Supported Version

Name for Parameter Values

See Also

MySQL5.6.17mysql 
Postgres9.1.13
postgres
 
Oracle11goraclehive.metastore.orm.retrieveMapNullsAsEmptyStrings
MS SQL Server2008 R2mssql 

 

 

Metastore Server 运行模式

 

Server Embedded 模式

      Metastore Server 和 Hive Server 运行在同一进程之内,为Hive Server 提供meta 数据服务。hive.metastore.uris没有值时默认就是Embedded模式,此时的metastore database 可以是embedded / remote 模式。

Config Param

Hive 2 Parameter

Config Value

Comment

metastore.thrift.uris

hive.metastore.uris

 

not needed because this is local store

详情参考: https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+3.0+Administration#AdminManualMetastore3.0Administration-EmbeddedMode

 

Server Remote 模式

Metastore Server 以独立进程运行,可为多个Hive Server提供服务。需要提供的配置如下:

Configured On

Parameter

Hive 2 Parameter

Format

Default Value

Comment

Servermetastore.thrift.porthive.metastore.portinteger9083Port Thrift will listen on.
Clientmetastore.thrift.urishive.metastore.uristhrift://<HOST>:<PORT>[, thrift://<HOST>:<PORT>...]noneHOST = hostname, PORT = should be set to match metastore.thrift.port on the server (which defaults to 9083. You can provide multiple servers in a comma separate list.

详情参看:https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+3.0+Administration#AdminManualMetastore3.0Administration-MetastoreServer

 

启动meatstore server命令:

hive --service metastore

 

连接 remote metastore server时,仅需要做如下配置:

Config Param

Config Value

Comment

hive.metastore.uris

thrift://<host_name>:<port>

host and port for the Thrift metastore server. If hive.metastore.thrift.bind.host is specified, host should be same as that configuration. Read more about this in dynamic service discovery configuration parameters.

hive.metastore.warehouse.dir

<base hdfs path>

Points to default location of non-external Hive tables in HDFS.

 

Hive 运行模式

Hive的运行模式主要由metastore database的运行模式和metastore server的运行模式组合产生四种不同形式。

 

1. embedded metastore database + embedded metastore server

不添加任何配置或者拷贝hive-default-template.xml生成的配置hive-site.xml就是这种启动模式。本地独立使用hive时,可采用该模式。

 

2. embedded metastore database + remote metastore server 

就是使用嵌入式数据库作为metastore的存储,独立metastore服务共hive server 或其他引擎(如spark sql)使用。本地spark+hive时可以采用该模式。但是这个模式很容易出错,spark+hive推荐使用模式4.

使用embedded database + remote metastore server 模式时,数据库需要初始化一个干净的数据库,不能使用hiveserver2使用(embedded database + embedded metastore server)启动过的数据库。否则会抛出“A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection” exception. 

>$HIVE_HOME/bin/schemaTool -initSchema --dbType "derby"

> $HIVE_HOME/bin/hive --service metastore

>$HIVE_HOME/bin/hive --service hiveserver2 

一定要注意启动顺序,等metastore服务启动完成后再启动hiveserver2.

 

3. remote metastore database + embedded metastore server

使用独立的metastore数据库(如mysql),metastore server + hive server 位于同一个进程。单纯的仅使用hive的,多hiveserver集群推荐使用。

 

4. remote metastore database + remote metastore server

独立的数据库存储meta数据,独立的metastore服务供第三方调用,production环境,spark+hive等采用该模式。

 

 

参考文章:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-MetadataStore

https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+Administration#AdminManualMetastoreAdministration-HiveMetastoreAdministration

https://cwiki.apache.org/confluence/display/Hive/AdminManual+Metastore+3.0+Administration

https://www.cnblogs.com/netuml/p/7841387.html

 

<think>好的,我现在需要帮助用户解决Hive在本地模式运行时数据丢失的问题。首先,我得回忆一下Hive本地模式的运作机制。本地模式通常用于小规模数据处理,Hive会在本地执行作业,而不需要提交到Hadoop集群。这可能涉及到文件存储的位置和配置的问题。 用户提到数据丢失,可能的原因有几个。首先,本地模式Hive可能使用临时目录存储数据,而这些目录在作业完成后被清理。比如,Hive可能会将数据写入/tmp目录,而这个目录在系统重启或清理时会被删除。需要检查hive-site.xml中的配置项,比如hive.exec.local.scratchdir,确保其指向一个持久化的目录。 其次,用户可能在创建表时使用了外部表和内部表的区别。内部表在删除时,元数据和数据都会被删除,而外部表只删除元数据。如果用户误删了内部表,数据也会丢失。需要确认用户使用的是外部表,并通过LOCATION参数指定数据存储路径。 另外,数据写入时的权限问题也可能导致数据无法正确保存。需要检查Hive进程是否有权限写入目标目录,尤其是当用户自定义了存储路径时。 还可能涉及到事务配置的问题。本地模式下,如果启用了ACID事务,但配置不正确,可能导致数据提交失败。需要确认事务相关配置,如hive.support.concurrency和hive.txn.manager是否正确设置。 此外,用户可能在操作过程中手动删除了数据文件,或者在任务执行过程中中断导致数据不完整。需要检查日志文件,查找是否有异常或错误信息,帮助定位问题根源。 参考之前的引用,比如引用[1]提到Hive处理数据时通过子查询和group by减少数据量,可能和数据处理过程中的中间结果存储有关。本地模式下,中间结果的存储位置是否正确配置也可能影响数据持久性。 最后,可能需要建议用户备份数据,定期导出重要数据到安全的位置,避免本地存储的临时性导致的数据丢失。同时,推荐在完全分布式模式运行生产任务,利用Hadoop的数据冗余和可靠性特性,如引用[2]中提到的Hadoop的分布式存储和处理能力。 总结解决方案步骤:检查临时目录配置、使用外部表、验证权限、检查事务配置、查看日志、定期备份,并考虑迁移到分布式环境。</think>针对Hive本地模式下数据丢失问题,需从配置、存储机制和操作规范三方面综合排查。以下是具体解决方案及操作步骤: ### 一、检查本地临时目录配置 1. 修改Hive临时目录配置 在`hive-site.xml`中增加以下配置,将临时目录指向非系统默认路径(如自定义的持久化目录): ```xml <property> <name>hive.exec.local.scratchdir</name> <value>/opt/hive_data/tmp</value> <description>本地模式临时文件目录</description> </property> ``` 避免使用`/tmp`目录,系统清理或重启会导致数据丢失[^1]。 2. 验证目录权限 执行命令确保Hive进程有写入权限: ```bash chmod 777 /opt/hive_data/tmp chown hive:hive /opt/hive_data/tmp ``` ### 二、优化表存储策略 1. 使用外部表代替内部表 创建表时添加`EXTERNAL`关键字并指定存储路径: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS user_logs ( id INT, log_time TIMESTAMP ) LOCATION '/user/hive/warehouse/external_logs'; ``` 外部表删除时仅删除元数据,原始数据保留在HDFS中[^3]。 2. 禁用临时数据清理(仅限测试环境) 在配置文件中关闭自动清理: ```xml <property> <name>hive.exec.local.scratchdir.cleanup</name> <value>false</value> </property> ``` ### 三、增强数据可靠性措施 1. 启用本地事务支持 对于需要ACID特性的场景,添加事务配置: ```xml <property> <name>hive.support.concurrency</name> <value>true</value> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> </property> ``` 2. 建立备份机制 定期将本地数据同步到分布式存储: ```bash # 每日凌晨同步数据到HDFS hadoop fs -put /opt/hive_data/tmp/* /backup/hive_local/ ``` ### 四、日志分析与故障排查 1. 检查Hive运行日志 重点关注以下日志文件: - `hive.log`:记录元数据操作 - `hadoop-hive-*.log`:记录MapReduce任务详情 2. 验证数据生命周期 通过Hive CLI执行数据完整性检查: ```sql ANALYZE TABLE user_logs COMPUTE STATISTICS; SELECT COUNT(*) FROM user_logs; ``` ### 五、环境升级建议 对于生产环境,建议迁移至完全分布式模式(如引用[2]所述),通过以下步骤提升可靠性: 1. 部署HDFS实现数据多副本存储 2. 启用YARN资源管理 3. 配置ZooKeeper实现高可用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值