如何使用RDS创建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-bp735.mysql.rds.aliyuncs.com

2.2 创建Hive元数据库

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

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-bp735.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文件。

2.5 配置RDS白名单

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

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

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://yn: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了。
时间: 2024-08-31 22:48:11

如何使用RDS创建Hive元数据库的相关文章

创建Hive/hbase相关联时的表异常

hive> CREATE TABLE hperson(id string, name string,email string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id,cf1:name,cf2:email") TBLPROPERTIES ("hbase.table.

E-Mapreduce(Hadoop大生态)资料汇总

引言 当前E-Mapreduce资料散落在各个地方,此文档汇总E-Mapreduce的基本资料. E-MapReduce 是一项Web服务,简化了大数据处理,提供的大数据框架可以让您轻松.高速.经济.安全.稳定地处理大数据,满足如日志分析.数据仓库.商业智能.机器学习.科学模拟等业务需求. 您可以运行常用的计算框架(例如:Hadoop.Spark)与阿里云其它的数据存储服务(例如 OSS.RDS)中的数据进行互动. 如果想尝试使用,请访问:E-Mapreduce产品首页 产品PDF 阿里云E-M

hadoop学习笔记--10.hive安装与配置

一.hive安装 1.环境要求 1. Java 1.7或以上 2. Hadoop 2.x (preferred), 1.x (not supported by Hive 2.0.0 onward). 2.安装配置 Hive没有才有hadoop.HBase或者是Zookeeper的主从架构,所以只用在所需要的机器上安装即可. 1. 解压 tar -zxvf apache-hive-0.13.1-bin.tar.gz 把解压的文件夹移到自己需要的存放的目录. 2. 配置环境 sudo vi /etc

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 th

阿里云上踩着RDS的2个坑

最近发现阿里云RDS管理控制台升级了,界面更好看了,操作也更方便了,但在美丽的外表下却藏着坑,不小心被我们睬着了. 8月31日下午,我们在RDS管理控制台中创建了一个新的数据库帐号,创建时选择了绑定多个数据库. 然后,这个新建帐户的状态显示为"创建中",这时该新建帐户可以登录,但不能访问任何数据库. 过了2分多钟,帐户状态由"创建中"变为"激活"后,才可以正常访问所绑定的数据库. 之前我们很久没有在RDS进行帐户管理操作了,今天这样一个如此简单.

当Docker遇到数据库:在阿里云容器服务中使用RDS

Docker与持久化服务 最近一段时间以来,微服务架构和Docker成为了技术社区的"网红".其背后的原因是将微服务与Docker的结合在一起对现有的软件生命周期从架构设计.开发测试到运维迭代构成了一种"颠覆性"的力量:微服务鼓励开发者将整个软件解构为较小的功能组件:每个组件能够独立开发.运维.伸缩和容错:组件之间通过标准的服务接口进行通信,而组件可以选择最适合的技术栈来实现.而容器技术进一步拓展了这种解耦性,它能够将软件与其部署环境分离,利用容器敏捷和可移植的使得

如何在Hive中使用Json格式数据

总体来说,有两大类方法: 1.将json以字符串的方式整个入Hive表,然后使用LATERAL VIEW json_tuple的方法,获取所需要的列名. 2.将json拆成各个字段,入Hive表.这将需要使用第三方的SerDe,例如:https://code.google.com/p/hive-json-serde/ 本文将主要使用第二种方法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 wget https://hive-json-serde.googl

Sqoop导入关系数据库到Hive

Sqoop 是 apache 下用于 RDBMS 和 HDFS 互相导数据的工具.本文以 mysql 数据库为例,实现关系数据库导入到 hdfs 和 hive. 1. 安装 Sqoop 使用 rpm 安装即可. yum install sqoop sqoop-metastore -y 安装完之后需要下载 mysql jar 包到 sqoop 的 lib 目录. 这里使用 hive 的 metastore 的 mysql 数据库作为关系数据库,以 TBLS 表为例,该表结构和数据如下: mysql

hive多表关联查询问题

问题描述 hive多表关联查询问题 环境: yun01-nn-01 192.168.56.11 namenade yun01-nn-02 192.168.56.12 namenade yun01-dn-01 192.168.56.13 datanade yun01-dn-02 192.168.56.14 datanade 192.168.56.110 安装mysql 4台服务器安装了hadoop2.6+zookeeper3.4.5+hbase1.0+hive2.0,1台服务器安装mysql 启动