Hive MetaStore同步方法

我们知道,Hive在方便的用SQL方式管理Hadoop的数据的时候,使用了MetaStore来保存所有表的信息,例如表名,字段名,类型,分隔符,序列化的方式等等。当我们使用OSS作为我们的数据存储的时候,我们会创建很多的外表,例如

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 LOCATION 'OSS://bucket/path/dt/country'

当我们在处理这样的数据的时候,这些表是可以通用的,也就是说我可以更换集群,但是这些表都是一样的,不需要变更。

然而如果我们使用集群内部的数据库来保存这些元信息,那么如果我们新建了集群,就无法共享到这些数据,需要在另一个集群上重新执行一遍创建数据表的Hive语句,或者把所有的表信息都同步到新集群上,这里我们会介绍几个方法来完成这个任务。

A. Mysql dump

一般Hive都会使用Mysql来作为它的默认元数据库,我们可以通过Mysql的dump功能将整个Hive的库dump出来,并同步到另一个Mysql数据库中。

  1. 登录到需要元数据库所有的节点,执行如下命令:
mysqldump --databases <databaseName> --single-transaction > hive_databases.sql –p

这里的是指Hive的元数据库的名字,默认情况下是hivemeta
在执行以后需要您输入root账号的密码,如果您不是以root账号操作,请加上-u指定操作的Mysql账号。如下:

mysqldump --databases <databaseName> --single-transaction > hive_databases.sql -u <user> –p

成功运行以后,会在当前目录下得到一个hive_databases.sql的文件。

  1. 将这个文件复制到您需要同步的目标Hive元数据库节点上
  2. 将所有的表信息同步到目标数据库中,执行如下命令:
 mysql <databaseName> < hive_databases.sql

这里的是指Hive的元数据库的名字,默认情况下是hivemeta

这个是一个不错的方式,很方便。理论上其他类型的数据,只要有自己的导入导出的支持,也可以这样做。

B. Hive Import/Export

Hive从0.8.0开始支持Import和Export命令,可以将需要同步的表以及它的数据一同导出,然后导入到目标位置。
参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

  1. 导出表信息
export table <tablename> to '<path>';

是需要导出的表的名字
是要导出的位置,默认使用hdfs的路径

  1. 复制所有的信息到目标集群
    将path下的数据复制到目标集群中,可以通过oss来做中转。
  2. 导入表信息
    将数据存放到目标集群的hdfs目录中,然后执行
import from '<path>';

是数据存放的位置,默认使用hdfs的路径

使用这个方式,不是很方便,首先需要一张一张表的来操作导出,不能直接批量。
然后它在export的时候会默认把数据也导出,这个会徒增我们的操作量,不推荐。

时间: 2024-10-09 20:07:39

Hive MetaStore同步方法的相关文章

Hive Metastore Thrift Server Partition的压力测试

测试环境: 虚拟机10.1.77.84 四核Intel(R) Xeon(R) CPU E5649  @ 2.53GHz,8G内存 起单台metastore server JVM args : -Xmx7000m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC 测试表Schema: table name: metastore_stress_testing # col_name data_type comment a string None # Par

Hive Metastore ObjectStore PersistenceManager自动关闭的bug

最近在测试HCatalog,由于Hcatalog本身就是一个独立JAR包,虽然它也可以运行service,但是其实这个service就是metastore thrift server,我们在写基于Hcatalog的mapreduce job时候只要把hcatalog JAR包和对应的hive-site.xml文件加入libjars和HADOOP_CLASSPATH中就可以了.不过在测试的时候还是遇到了一些问题,hive metastore server在运行了一段时间后会抛如下错误 2013-0

hive metastore 不是连接到指定的mysql 急!!!

问题描述 安装好了hive,mysql,启动hive执行showdatabases只看到一个default数据库,没有看到我mysql里的数据库,感觉hive登录的metastore不是我指定的mysql,哪位大神帮忙看一下,万分感谢!!!hive>showdatabases;OKdefaultTimetaken:0.031seconds,Fetched:1row(s)mysql>showdatabases;+--------------------+|Database|+----------

ambari 安装集群 Hive Metastore Stopped

问题描述 Metastoreonmaster.hadoopfailed(Traceback(mostrecentcalllast):File"/var/lib/ambari-agent/cache/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py",line190,inexecutetimeout=int(check_command_timeout))File"/usr/lib/pyt

Hive事物和锁管理

摘自Hive技术文档,锁管理:https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-LockManager 有几个参数需要修改下,使得Hive支持事物和并发: Lock Manager A new lock manager has also been added to Hive, the DbLockManager.  This lock manager stores all loc

Hive配置Kerberos认证

关于 Kerberos 的安装和 HDFS 配置 kerberos 认证,请参考 HDFS配置kerberos认证. 关于 Kerberos 的安装和 YARN 配置 kerberos 认证,请参考 YARN配置kerberos认证. 1. 环境说明 系统环境: 操作系统:CentOs 6.6 Hadoop版本:CDH5.4 JDK版本:1.7.0_71 运行用户:root 集群各节点角色规划为: 192.168.56.121 cdh1 NameNode.ResourceManager.HBas

那些年使用Hive踩过的坑

1.概述 这个标题也是用血的教训换来的,希望对刚进入hive圈的童鞋和正在hive圈爬坑的童鞋有所帮助.打算分以下几个部分去描述: Hive的结构 Hive的基本操作 Hive Select Hive Join Hive UDF Hive的M/R 使用Hive注意点 优化及优化详情 优化总结 调优的经常手段 解决Hive问题的途径 这篇文章只是起个头,为描述其他部分做下准备.下面我赘述下Hive的结构和一些基本的操作. 2.介绍 Hive 是建立在 Hadoop 上的数据仓库基础构架.它提供了一

hive datanucleus cache不一致的问题

现象: 最近有用户反应hive里面对某张表修改了几个字段名后,在另外的窗口中还是看到原字段名,比较奇怪. 我一开始想到可能是cache的问题,由于我们启用了两个metastore server,而用户客户端是随机选择一个建立链接的,所以有可能是修改表结构在第一个server中,而查询在第二个server,各自都有datanucleus cache所以导致不一致,我简单模拟了场景 模拟场景: hive client 1: 1. set hive.metastore.local=false; 2.

Hive Server 2的调研,安装和部署

背景 我们使用Hive Server 1已经很长时间了,用户ad-hoc query,hive-web, wormhole,运营工具等都是通过hive server来提交语句.但是hive server极其不稳定,经常会莫名奇妙假死,导致client端所有的connection都被block住了.对此我们不得不配置一个crontab检查脚本,会不断执行"show tables"语句来检测server是否假死,如果假死,只能杀死daemon进程重启.另外Hive Server 1的con