hive metastore(HMS)

hive metastore各类模式

嵌入模式

该模式建议仅用于测试。

img

该模式下,元存储使用Derby数据库,并且数据库和元存储服务都在主HiveServer2进程中。当您启动HiveServer2进程时,两者都会为您启动。此模式所需的配置工作最少,但是一次只能支持一个活动用户,性能较差,生产不推荐使用,只能用于简单测试。

本地模式

img

在本地模式下,Hive Metastore服务与主HiveServer2进程在同一进程中运行,但是metastore数据库在单独的进程中运行,用户可以通过jdbc的方式去访问hiveserver。这种方式hiveserver2和metastore可能性能上会相互影响,生产上不推荐使用。

分离模式

img

在该模式下,Hive Metastore服务单独运行在JVM进程中。HiveServer2,HCatalog,Impala和其他进程可以通过使用Thrift方式去访问Metastore(使用hive.metastore.uris属性)。metastore服务通过JDBC与metastore数据库通信(使用javax.jdo.option.ConnectionURL属性)。数据库,HiveServer2进程和元存储服务都可以位于同一主机上,但是在单独的主机上运行HiveServer2进程可以提供更好的可用性和可伸缩性。

相对于本地模式,独立模式的主要优点是,不需要管理员与每个Hive用户共享metastore数据库的JDBC登录信息,可以快速排查定位问题。生产建议使用此模式。

metastore ha模式

image-20201119173849569

  • Hive Server MetaStore启动

    跟单节点配置一样,只不过在多台服务器上启动MetaSotre

    启动:nohup $HIVE_HOME/bin/hive –metastore &

  • 配置Hive Client HA

    vi $HIVE_HOME/conf/hive-site.xml

    添加配置如下:

  1. <property>
  2. <name>hive.metastore.uris</name>
  3. <value>thrift://dw1:9083,thrift://dw2:9083</value>
  4. <description>A comma separated list of metastore uris on which metastore service is running</description>
  5. </property>
  6. <property>
  7. <name>hive.cluster.delegation.token.store.class</name>
  8. <value>org.apache.hadoop.hive.thrift.MemoryTokenStore</value>
  9. <description>Hive defaults to MemoryTokenStore, or ZooKeeperTokenStore</description>
  10. </property>

metastore生产建议

通常,您需要限制与Hive Metastore的并发连接。大量开放连接会影响性能,后端数据库问题,Hive使用不当(例如极其复杂的查询,连接泄漏以及其他问题)也会影响性能。尝试进行以下更改:

​ 建议Hive Metastore底层存储为SSD磁盘。

​ 单个查询访问不超过10,000个表分区。如果出现多表管理的情况,请计算跨所有表访问的合并分区数。

​ 数据库后台,生产上建议使用mysql高可用模式。HiveServer连接到HMS,只有HMS连接到RDBMS,后端花费的时间越长,HMS需要更多的内存来响应相同的请求,可适当优化和调整数据库。

使用与管理

管理metastore

目前易数运维平台easyops已经集成metastore启动和关闭,安装部署等手动操作,直接可以在界面上进行操作,大大简化了运维人员复杂的操作。

image-20201119174612368

如何使用metastore相关工具

使用Hive schematool 为当前Hive版本初始化Metastore schema 或从旧版本升级架构。如果该工具在该处可用,该工具将尝试从Metastore中查找当前schema。

schematool 确定初始化或升级schema所需的SQL脚本,然后在Metastore数据库执行这些脚本。Metabase数据库连接信息(如JDBC URL,JDBC驱动程序和数据库凭证)从Hive配置中提取。如果需要,您可以提供备用数据库凭据。

以下选项是schematool 其中的一部分:

  1. $ schematool -help
  2. usage: schemaTool
  3. -dbType <databaseType> Metastore database type
  4. -dryRun List SQL scripts (no execute)
  5. -help Print this message
  6. -info Show config and schema details
  7. -initSchema Schema initialization
  8. -initSchemaTo <initTo> Schema initialization to a version
  9. -passWord <password> Override config file password
  10. -upgradeSchema Schema upgrade
  11. -upgradeSchemaFrom <upgradeFrom> Schema upgrade from a version
  12. -userName <user> Override config file user name
  13. -validate Validate the database
  14. -verbose Only print SQL statements

dbType 选项必须始终指定,并且可以是以下之一:

  1. derby|mysql|postgres|oracle
先决条件配置

在你使用schematool之前 ,您必须将以下属性添加到/etc/hive/conf/hive-site.xml 文件:

  • javax.jdo.option.ConnectionURL
  • javax.jdo.option.ConnectionDriverName

例如,以下 hive-site.xml, 如果您使用MySQL数据库作为您的Hive Metastore,hive1 是数据库用户名:

  1. <property>
  2. <name>javax.jdo.option.ConnectionURL</name>
  3. <value>jdbc:mysql://my_cluster.com:3306/hive1?useUnicode=true&amp;characterEncoding=UTF-8</value>
  4. </property>
  5. <property>
  6. <name>javax.jdo.option.ConnectionDriverName</name>
  7. <value>com.mysql.jdbc.Driver</value>
  8. </property>
用法示例

使用 schematool 命令行工具,导航到它所在的目录:

  • 如果您使用parcel安装CDH,schematool 通常位于:/opt/cloudera/parcels/CDH/lib/hive/bin/schematool
  • 如果您使用软件包安装CDH, schematool 通常位于:/usr/lib/hive/bin/schematool

找到可执行文件后,可以使用 schematool 执行以下操作:

  • 使用initSchema 将您的Metastore初始化为新的Hive。
  1. $ schematool -dbType mysql -initSchema -passWord <db_user_pswd> -userName
  2. <db_user_name>
  3. Metastore connection URL:
  4. jdbc:mysql://<cluster_address>:3306/<user_name>?useUnicode=true&characterEncoding=UTF-8
  5. Metastore Connection Driver : com.mysql.jdbc.Driver
  6. Metastore connection User: <user_name>
  7. Starting metastore schema initialization to <new_version>
  8. Initialization script hive-schema-<new_version_number>.mysql.sql
  9. Initialization script completed
  10. schemaTool completed
  • 使用info 获取模式信息。
  1. $ schematool -dbType mysql -info -passWord <db_user_pswd> -userName
  2. <db_user_name>
  3. Metastore connection URL:
  4. jdbc:mysql://<cluster_address>:3306/<user_name>?useUnicode=true&characterEncoding=UTF-8
  5. Metastore Connection Driver : com.mysql.jdbc.Driver
  6. Metastore connection User: <user_name>
  7. Hive distribution version: <new_version>
  8. Required schema version: <new_version>
  9. Metastore schema version: <new_version>
  10. schemaTool completed
  • 如果您尝试从未存储版本信息的旧版metastore获取架构信息,或者架构未初始化,则该工具将按如下所示报告错误。
  1. $ schematool -dbType mysql -info -passWord <db_user_pswd> -userName
  2. <db_user_name>
  3. Metastore connection URL:
  4. jdbc:mysql://<cluster_address>:3306/<user_name>?useUnicode=true&characterEncoding=UTF-8
  5. Metastore Connection Driver : com.mysql.jdbc.Driver
  6. Metastore connection User: <user_name>
  7. Hive distribution version: <new_version>
  8. Required schema version: <new_version>
  9. org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version,
  10. Cause:<cause_description>
  11. *** schemaTool failed ***
  • 您可以通过指定特定发行版来升级架构 -upgradeSchemaFrom 。-upgradeSchemaFrom选项需要Hive版本
  1. $ schematool -dbType mysql -passWord <db_user_pswd> -upgradeSchemaFrom
  2. 0.13.1 -userName <db_user_name>
  3. Metastore connection URL:
  4. jdbc:mysql://<cluster_address>:3306/<user_name>?useUnicode=true&characterEncoding=UTF-8
  5. Metastore Connection Driver : com.mysql.jdbc.Driver
  6. Metastore connection User: <user_name>
  7. Starting upgrade metastore schema from version 0.13.1 to <new_version>
  8. Upgrade script upgrade-0.13.1-to-<new_version>.mysql.sql
  9. Completed pre-0-upgrade-0.13.1-to-<new_version>.mysql.sql
  10. Completed upgrade-0.13.1-to-<new_version>.mysql.sql
  11. schemaTool completed
  • 使用 -validate 选项来验证Metastore schema。以下示例显示schematool 与此选项一起使用时对Metastore模式执行的验证类型:
  1. $ schematool -dbType mysql -passWord <db_user_pswd> -userName
  2. <db_user_name> -validate
  3. Starting metastore validation
  4. Validating schema version
  5. Succeeded in schema version validation.
  6. [SUCCESS]
  7. Validating sequence number for SEQUENCE_TABLE
  8. Succeeded in sequence number validation for SEQUENCE_TABLE
  9. [SUCCESS]
  10. Validating metastore schema tables
  11. Succeeded in schema table validation.
  12. [SUCCESS]
  13. Validating database/table/partition locations
  14. Succeeded in database/table/partition location validation
  15. [SUCCESS]
  16. Validating columns for incorrect NULL values
  17. Succeeded in column validation for incorrect NULL values
  18. [SUCCESS]
  19. Done with metastore validation: [SUCCESS]
  20. schemaTool completed
  • 如果您想查找schema升级所需的所有脚本,请使用 dryRun 选项。
  1. $ schematool -dbType mysql -upgradeSchemaFrom 0.10.0 -dryRun -passWord
  2. <db_user_pswd> -userName <db_user_name>
  3. Metastore connection URL:
  4. jdbc:mysql://<cluster_address>:3306/<user_name>?useUnicode=true&characterEncoding=UTF-8
  5. Metastore Connection Driver : com.mysql.jdbc.Driver
  6. Metastore connection User: <user_name>
  7. Starting upgrade metastore schema from version 0.10.0 to <new_version>
  8. Upgrade script upgrade-0.10.0-to-0.11.0.mysql.sql
  9. Upgrade script upgrade-0.11.0-to-0.12.0.mysql.sql
  10. Upgrade script upgrade-0.12.0-to-0.13.0.mysql.sql
  11. Upgrade script upgrade-0.13.0-to-0.14.0.mysql.sql
  12. Upgrade script upgrade-0.14.0-to-1.1.0.mysql.sql
  13. Upgrade script upgrade-1.1.0-to-<new_version>.mysql.sql
  14. schemaTool completed