`

Hive metastore三种存储方式

阅读更多

测试环境下Hive总出问题,metastore的配置有问题。抽了点时间,把Hive的meta数据几种存储方式都配置了下。Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。Hive官方wiki详细介绍了这三种方式,链接为:Hive Metastore

一、使用derby数据库存储元数据。

这种方式是最简单的存储方式,只需要在hive-default.xml或hive-site.xml做如下配置便可。

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
< 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.warehouse.dir</ name >
   < value >/user/hive/warehouse</ value >
</ property >

使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。

?
1
2
3
4
5
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

二、使用本机mysql服务器存储元数据。这种存储方式需要在本地运行一个mysql服务器,并作如下配置(下面两种使用mysql的方式,需要将mysql的jar包拷贝到$HIVE_HOME/lib目录下)。

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
< 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 >dandan</ value >
</ property >

三、使用远端mysql服务器存储元数据。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

1)Hive服务器端配置如下。

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
< 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 >dandan</ value >
</ property >

2)Hive客户端配置如下。

?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
< 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://localhost:9083</ value >
</ property >

3)服务进程启动如下,默认监听的端口是9083(Hive版本低于0.5的才这样启动)。

?
1
henshao@henshao-desktop:~/hive-0.3.99.1/conf$ $JAVA_HOME/bin/java  -Xmx1024m -Dlog4j.configuration=file://$HIVE_HOME/conf/hive-log4j.properties -Djava.library.path=$HADOOP_HOME/lib/native/Linux-amd64-64/ -cp $CLASSPATH:$HADOOP_HOME/hadoop-0.19.2-core.jar org.apache.hadoop.hive.metastore.HiveMetaStore

这里配置classpath太麻烦了,要把hadoop和hive的jar包都加到classpath上,手动加容易导致依赖错误。我写了一个简单的脚本,把$HIVE_HOME/lib下的jar全部连起来,用冒号分隔开。脚本代码如下。

?
01
02
03
04
05
06
07
08
09
10
11
12
13
#!/bin/bash
 
CLASSPATH=.
 
for dir in $*
do
     for file in ` ls $ dir `
     do
         CLASSPATH=$CLASSPATH:$ dir /$ file
     done
done
 
echo $CLASSPATH

运行时,只需要输入”./generate_classpath.sh $HIVE_HOME/lib”便可。然后将生成的字符串贴到.bashrc中,赋给CLASSPATH变量。

hive启动时有一个选项”–config”可以指定包含启动客户端用的配置文件的目录,该目录下需要有hive-default.xml或hive-site.xml文件。

?
1
hive --config conf_dir

根据我的实践发现,其实第二种方法也可以将Hive的元数据保存到一台远端服务器上,只要配置好javax.jdo.option.ConnectionURL这个连接串就行。

分享到:
评论
1 楼 107x 2015-09-10  
不错,谢谢!

相关推荐

    Hive metastore 使用达梦数据库存储元数据

    《Hive metastore 使用达梦数据库存储元数据详解》 在大数据处理领域,Hive作为一个分布式数据仓库工具,被广泛用于存储和管理大规模结构化数据。Hive的元数据是其核心组成部分,它包含了表、分区、列等信息,使得...

    详细调研hivemetastore管理机制.zip

    元数据的存储通常有两种方式:本地MySQL或远程Thrift服务器。当Hive客户端查询数据时,首先会通过Metastore获取相关的元数据信息,然后根据这些信息在HDFS上定位实际的数据。 Hive数据存储模式是理解Metastore工作...

    3-9+HiveMetaStore服务在快手的挑战与优化.pdf

    《3-9+HiveMetaStore服务在快手的挑战与优化》 在大数据处理领域,HiveMetaStore作为Hive的核心组件,负责管理元数据,包括表、分区、列、属性等信息,是Hive查询数据的基础。在快手这样的大型互联网公司中,Hive...

    hive systemctl启停hiveserver2和metastore服务.pdf

    在Hadoop生态系统中,Hive是一个基于HDFS的数据仓库工具,它允许用户使用SQL(HQL)查询和管理存储在Hadoop集群中的大数据集。然而,手动启动和停止Hive的服务,如HiveServer2和Metastore,可能会变得繁琐和耗时。...

    PyPI 官网下载 | hive_metastore_client-1.0.0-py3-none-any.whl

    `hive_metastore_client-1.0.0-py3-none-any.whl`是这个包的特定版本,表示这是针对Python 3编译的一个可安装的whl文件,whl是一种预编译的Python二进制格式,可以直接通过pip安装,无需编译源代码,从而简化了部署...

    hive远程连接详细配置

    在这个配置中,我们将介绍如何配置 Hive 客户端与 Hive 服务器的连接,包括远程 MySQL 和远程存储 metastore 的配置。 Hive 客户端配置 在 Hive 客户端配置中,我们需要配置 Hive 客户端连接到远程 metastore ...

    Hive的三种方式安装与搭建

    通过本文,我们了解了Hive的三种元数据存储方式——内嵌Derby方式、Local方式和Remote方式,并详细介绍了每种方式的配置步骤及注意事项。对于不同的应用场景,可以选择合适的方式来搭建Hive环境。内嵌Derby方式适用...

    Hbase 练习

    在HBase中查询数据可以通过`Get`和`Scan`两种方式实现。 - **使用Get**:当已知行键时,可以直接获取指定的数据。 - **使用Scan**:当需要扫描表中的一部分或全部数据时,可以使用Scan。 示例代码如下: ```java ...

    hive 三种启动方式及用途

    这篇博客主要探讨了Hive的三种启动方式及其用途,这对于我们理解如何有效管理和操作Hive系统至关重要。 1. **独立模式(Standalone Mode)** 在独立模式下,Hive运行在本地模式,不与任何Hadoop集群交互。这种模式...

    HIVE安装及详解

    * Hive Metastore:用于存储HIVE的元数据 * Hive Query Compiler:将SQL查询转换为MapReduce任务 * Hive Execution Engine:执行MapReduce任务 * Hive Storage Handler:用于存储数据 各组件的基本功能: * Hive ...

    Hive学习必备——配置Hive环境教程 免费分享哦~

    Hive Metastore数据库是Hive的核心组件之一,它用于存储Hive的元数据。在这里,我们将使用 Derby数据库来作为Hive Metastore数据库。 二、使用Xshell6连接Hive服务器 在这里,我们将使用Xshell6工具来远程连接到...

    Metastore组件

    HBase可以利用Metastore中存储的表结构信息来提供更方便的数据访问方式,而MapReduce程序在需要对Hive表进行处理时,同样可以利用Metastore中的元数据来优化任务的执行。 值得注意的是,虽然Metastore对于Hive来说...

    hive相关jar包

    2. **Hive Metastore**:这部分jar包用于存储Hive的元数据,包括表结构、分区信息、列类型等。元数据可以存储在本地MySQL、PostgreSQL或者远程Thrift服务器上。 3. **Hive SerDes(Serialization/Deserialization)...

    jdbc hive相关jar包

    2. **Hive Metastore服务**: Hive Metastore是Hive存储元数据的地方,包括表结构、分区信息等。对应的jar包提供了访问这些元数据的API,如`org.apache.hadoop.hive.metastore.HiveMetaStoreClient`。 3. **Hive ...

    hive-exec-2.1.1.jar

    Hive 提供了一种 SQL 接口来访问数据,这些数据通常存储在 Hadoop 的分布式文件系统(HDFS)中。 Hive 的主要组件包括: Hive Metastore:存储元数据(如表的模式、分区信息等)。 HiveServer2:提供客户端连接和 ...

    Hive2.x系列驱动,

    2. hive-metastore-2.1.1.jar:这是Hive元数据存储服务的实现,它存储了Hive表和分区的信息,包括它们在HDFS上的位置、列信息等。 3. hbase-protocol-1.1.1.jar 和 hbase-server-1.1.1.jar:这两个是Apache HBase的...

    spark2.3.1-with-hive

    Hive 是一种基于 Hadoop 的数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供 SQL 查询功能,使得非编程人员也能对大数据进行分析。 Spark 2.3.1 版本包含了一系列的改进和新特性,旨在提高性能、...

    hive官方翻译文档

    3. **元数据**:Hive MetaStore存储了关于Hive表的所有元数据,如表名、列名、分区信息、表的存储位置等。这些信息由Hive Metastore服务管理,为查询解析和执行提供基础。 4. **数据存储**:Hive将数据存储在HDFS上...

    spark-2.3.1-bin-hadoop2-without-hive.tgz

    1. **安装Hive**: 首先,你需要在集群上安装和配置Hive,包括设置Hive Metastore服务,存储元数据信息。 2. **配置Spark**: 在Spark的配置文件`spark-defaults.conf`中,需要设置`spark.sql.hive.metastore.uris`为...

    hive原理1介绍

    - **HCatalog**:作为Hive的一部分,HCatalog提供了一种统一的方式来管理Hadoop上的表和存储资源,使得其他工具如Pig和MapReduce可以更方便地读写数据。 #### 示例:内部表创建与使用 创建内部表的简单示例: ```...

Global site tag (gtag.js) - Google Analytics