如何使用RDS创建Hive元数据库

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 1. 问题背景 E-MapReduce中支持的Hive,会默认在Master节点的Mysql数据库中记录元数据信息。通常,用户会将数据存储在E-MapReduce的HDFS中,使用Hive处理HDFS中的数据。当集群释放时,节点的所有数据包括HDFS数据和Hive元数据都会被删除。前面我撰文说过,

1. 问题背景

E-MapReduce中支持的Hive,会默认在Master节点的Mysql数据库中记录元数据信息。通常,用户会将数据存储在E-MapReduce的HDFS中,使用Hive处理HDFS中的数据。当集群释放时,节点的所有数据包括HDFS数据和Hive元数据都会被删除。前面我撰文说过,我们鼓励用户将数据存储在OSS中,这样可以实现存储和计算的分离,享受到OSS的弹性高可用。更多细节你可以看一下这篇文章。除此之外,我们可能有多个集群,很自然地需要多个集群共享一个Hive元数据仓。总结来说,我们希望在E-MapReduce集群外部创建Hive元数据仓。那么怎么才能做得到呢?了解阿里云生态产品的人会很自然地想到,是否可以用RDS来做Hive元数据仓?答案是肯定的,下面将演示如何在E-MapReduce上使用RDS创建Hive元数据仓。

2. Hive+RDS元数据仓

2.1 创建RDS实例

这里不赘述如何在RDS上创建数据库,如有需要请查看RDS相关文档。创建完数据库,我们需要以下这三个信息:

    数据库帐号:hive
    数据库密码:Hive001
    数据库内网地址:rm-bp************735.mysql.rds.aliyuncs.com

rds1

rds2

2.2 创建Hive元数据库

创建Hive元数据库hivemeta,字符集选择 latin1,授权账户hive读写权限。

rds7

2.3 准备自定义配置文件

前面我已经说过,E-MapReduce默认使用Master节点的Mysql作为元数据仓。为了使用RDS来作为元数据仓,我们要修改默认的Hive配置文件。这里我们需要准备一个自定义的配置文件。关于自定义配置文件格式,我们可以看E-MapeReduce官方文档。下面是我的配置文件hive-site.json:

   {
    "configurations": [
        {
            "classification": "hive-site",
            "properties": {
                "javax.jdo.option.ConnectionUserName": "hive",
                "javax.jdo.option.ConnectionPassword": "Hive001",
                "javax.jdo.option.ConnectionURL": "jdbc:mysql://rm-bp************735.mysql.rds.aliyuncs.com:3306/hivemeta?createDatabaseIfNotExist=true",
                "hive.metastore.uris": "thrift://localhost:9083"
            }
        }
    ]
}

将上面的文件上传到OSS任意目录,下一步会用到这个配置文件。

2.4 E-MapReduce上创建集群

这里不赘述集群创建过程,如有需要请查看E-MapReduce相关文档。需要注意的是,在第三步“软件配置”中,我们需要在“软件配置(可选)”这一项选择OSS中的hive-site.json文件。

rds13

2.5 配置RDS白名单

将上一步创建的集群机器内网IP配置到RDS白名单中。

  • 集群详情页找到所有机器的内网IP,如下:
    rds8
  • 将机器内网IP加入到白名单中

rds9

rds10

2.6 登录集群使用hive

  • 使用Master节点root账户和密码登录Master节点
    Last login: Thu May  5 10:02:12 2016 from 42.120.74.97

    Welcome to aliyun Elastic Compute Service!
    
    [root@emr-header-1 ~]# 
  • 切换到hadoop账户
    [root@emr-header-1 ~]# su hadoop
    [hadoop@emr-header-1 root]$ 
  • [可选]更新JDBC驱动包:我创建RDS实例时选择的是Mysql5.6,使用Hive时会碰到“com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1”的错误,这个错是因为jdbc驱动包版本过低导致的。下载最新的jdbc驱动包,替换/opt/apps/apache-hive-2.0.0-bin/lib目录下的“mysql-connector-java-3.1.14-bin.jar”为最新包(测试可用)。 这一步也可以放到创建集群的引导操作做
  • 初始化Hive元数据库: /opt/apps/apache-hive-2.0.0-bin/bin/schematool -initSchema -dbType mysql
  • 启动metastore服务: hive --service metastore
  • 开始Hive查询
  • 启动Hive
    [hadoop@emr-header-1 ~]$ hive

    Logging initialized using configuration in file:/etc/emr/hive-conf-1.0.1/hive-log4j.properties
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/opt/apps/hadoop-2.6.0/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/opt/apps/hbase-1.1.1/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/opt/apps/apache-hive-1.0.1-bin/lib/hive-jdbc-1.0.1-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
    hive> 
  • 创建表

    hive> CREATE EXTERNAL TABLE emrusers (
    > userid INT,
    > movieid INT,
    > rating INT,
    > unixtime STRING )
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '\t'
    > LOCATION 'oss://y***********n:m************************4@xxx.oss-cn-hangzhou-internal.aliyuncs.com/tmp/hive';
  • 统计条数
    hive> select count(*) from emrusers;
    WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. tez, spark) or using Hive 1.X releases.
    Query ID = hadoop_20160505102931_a476ce8d-7c4e-45f8-a953-4e8e37c91354
    Total jobs = 1
    Launching Job 1 out of 1
    Number of reduce tasks determined at compile time: 1
    In order to change the average load for a reducer (in bytes):
      set hive.exec.reducers.bytes.per.reducer=<number>
    In order to limit the maximum number of reducers:
      set hive.exec.reducers.max=<number>
    In order to set a constant number of reducers:
      set mapreduce.job.reduces=<number>
    Starting Job = job_1462363452366_0004, Tracking URL = http://xxxxxxxxxx:20888/proxy/application_1462363452366_0004/
    Kill Command = /usr/lib/hadoop-current/bin/hadoop job  -kill job_1462363452366_0004
    Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
    2016-05-05 10:35:06,061 Stage-1 map = 0%,  reduce = 0%
    2016-05-05 10:35:14,163 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 3.59 sec
    2016-05-05 10:35:20,453 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 5.1 sec
    MapReduce Total cumulative CPU time: 5 seconds 100 msec
    Ended Job = job_1462363452366_0004
    MapReduce Jobs Launched: 
    Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 5.1 sec   HDFS Read: 8168 HDFS Write: 7 SUCCESS
    Total MapReduce CPU Time Spent: 5 seconds 100 msec
    OK
    100000
    Time taken: 36.085 seconds, Fetched: 1 row(s)

3. 说明

  1. 2.6中的测试脚本和数据可以在开源Demo项目中找到。
  2. E-MapReduce将会很快支持Hue和Zeppline,到时候就可以进行交互式使用Hive和Spark了。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
15天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
990 7
Mysql 数据库主从复制
|
15天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
5天前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用合集之如何实现类似mysql实例中的数据库功能
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6天前
|
消息中间件 DataWorks 关系型数据库
DataWorks产品使用合集之遇到无法连接到本地 MySQL 数据库的问题,该如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
8天前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
35 3
|
7天前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7天前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
14天前
|
关系型数据库 数据库 RDS
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
46 0