Hive MetaStore同步方法

    xiaoxiao2025-09-10  67

    我们知道,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数据库中。

    登录到需要元数据库所有的节点,执行如下命令: 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的文件。

    将这个文件复制到您需要同步的目标Hive元数据库节点上将所有的表信息同步到目标数据库中,执行如下命令: 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

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

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

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

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

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

    相关资源:七夕情人节表白HTML源码(两款)
    最新回复(0)