`

配置hive元数据存储在mysql中

 
阅读更多

默认情况下,hive的元数据信息存储在内置的Derby数据中。Facebook将hive元数据存储在关系数据库
mysql中。配置过程如下:
1 安装好mysql

创建mysql密码

[root@expedia-hdp1 Downloads]# mysqladmin -u root password expedia


创建用户hadoop
hdpusr@expedia-HDP1:~/hive-0.7.1-bin/bin$ mysql -uroot -p****

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 5.1.61-0ubuntu0.11.10.1 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit;
Bye

 

创建新用户

mysql> create user 'hdpusr'@'localhost' IDENTIFIED BY '******';

mysql> grant all privileges on *.* to 'hdpusr'@'localhost' with grant option;

 

GRANT USAGE ON *.* TO 'hive'@'%' IDENTIFIED BY PASSWORD '*4DF1D66463C18D44E3B001A8FB1BBFBEA13E27FC' |

| GRANT ALL PRIVILEGES ON `hive`.* TO 'hive'@'%'

 

回收权限

mysql> revoke all on *.* from hdpusr@localhost

revoke只能取消用户的权限,而不可以删除用户,及时取消了所有权限,用户仍然可以连接到服务器,要想彻底删除用户,必须用delete语句将该用户的记录从mysql数据库中的user表中删除。

mysql> use mysql;

mysql> delete from user where user='hdpusr' and host='localhost';

 

切换用户
hdpusr@expedia-HDP1:~/hive-0.7.1-bin/bin$ mysql -uhdpusr -p******
mysql> exit;
Bye

 

2 修改配置文件hive-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/h1/warehouse</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hdpusr</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hdp</value>
  <description>password to use against metastore database</description>
</property>
</configuration>

3 下载mysql-connector-java-5.1.18,将其拷贝至hive安装目录lib文件夹下

hdpusr@expedia-HDP1:~/hive-0.7.1-bin/bin$ ./hive

hive> create table temp;

FAILED: Error in semantic analysis: Either list of columns or a custom serializer should be specified

此时检查mysql数据库,已经有hive创建的数据库hive及相关表了

 

原来是创建表语句出错了

hive> create table temp(id int, name string);
OK
Time taken: 2.702 seconds
hive> show tables;
OK
temp
Time taken: 0.167 seconds

 

列出函数及函数用法

hive> show functions
hive> describe function functionName

 

hive仅支持int和string等原子数据类型,但通过to_date unix_timestamp date_diff date_add date_sub等函数就能完成类似mysql同样复杂的时间日期操作

 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive               |
| mysql              |
+--------------------+
3 rows in set (0.04 sec)

mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables_in_hive  |
+-----------------+
| BUCKETING_COLS  |
| COLUMNS         |
| DATABASE_PARAMS |
| DBS             |
| PARTITION_KEYS  |
| SDS             |
| SD_PARAMS       |
| SEQUENCE_TABLE  |
| SERDES          |
| SERDE_PARAMS    |
| SORT_COLS       |
| TABLE_PARAMS    |
| TBLS            |
+-----------------+
13 rows in set (0.00 sec)

 

 

分区
hive与mysql分区有些区别,mysql分区是用表结构中的字段来分区(range,list,hash等),而hive不同,他需要手工指定分区列,这个列是独立于表结构,但属于表中一列,在加载数据时手动指定分区

创建表:

hive> create table test(id int, name string, regtime string) partitioned by(ds string) row format delimited fields terminated by ' ' stored as textfile;
OK
Time taken: 16.945 seconds

 

 

创建一个test.txt数据文件,内容如下:

1 Jack 2012-04-20 09:00:00

2 Lucy 2012-04-21 09:10:00

3 LiLei 2012-04-22 09:20:00

4 HMM 2012-04-23 09:30:00

 

 

hive> load data local inpath '/download/test.txt' overwrite into table test partition(ds='2012-04-22');
Copying data from file:/download/test.txt
Copying file: file:/download/test.txt
Loading data to table default.test partition (ds=2012-04-22)
OK
Time taken: 4.048 seconds
hive> load data local inpath '/download/test.txt' overwrite into table test partition(ds='2012-04-21');
Copying data from file:/download/test.txt
Copying file: file:/download/test.txt
Loading data to table default.test partition (ds=2012-04-21)
OK
Time taken: 0.917 seconds

 

有可能会抛出下面异常:

The ratio of reported blocks 0.9934 has not reached the threshold 0.9990. Safe mode will be turned off automatically.

 

解决方法:

1. 修改dfs.safemode.threshold.pct为一个比较小的值,缺省是0.999。 
2. hadoop dfsadmin -safemode leave命令强制离开

 

如果执行一个查询,hive会将其转换成map reduce在hadoop上执行(select * from test除外)

hive> select * from test where to_date(regtime)>to_date('2012-04-20');
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201202201821_0001, Tracking URL = http://nn0001:50030/jobdeta                                                                                                 ils.jsp?jobid=job_201202201821_0001
Kill Command = /download/hadoop-0.20.203.0/bin/../bin/hadoop job  -Dmapred.job.t                                                                                                 racker=nn0001:9001 -kill job_201202201821_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2012-02-20 18:31:51,213 Stage-1 map = 0%,  reduce = 0%
2012-02-20 18:32:03,432 Stage-1 map = 100%,  reduce = 0%
2012-02-20 18:32:12,594 Stage-1 map = 100%,  reduce = 100%
Ended Job = job_201202201821_0001
MapReduce Jobs Launched:
Job 0: Map: 1   HDFS Read: 519 HDFS Write: 174 SUCESS
Total MapReduce CPU Time Spent: 0 msec
OK
2       Lucy    2012-04-21      2012-04-21
3       LiLei   2012-04-22      2012-04-21
4       HMM     2012-04-23      2012-04-21
2       Lucy    2012-04-21      2012-04-22
3       LiLei   2012-04-22      2012-04-22
4       HMM     2012-04-23      2012-04-22
Time taken: 43.417 seconds

 

 

创建table时指定分隔符

CREATE TABLE if not exists t_order(
id int,
sale_id int,
customer_id int,
product_id int,
amount int
) PARTITIONED BY (ds STRING) row format delimited fields terminated by ' ';

 

hive> load data local inpath '/home/h1/Downloads/data.txt' overwrite into table t_order partition (ds='2012-05-04');

 

t_order.txt格式:

381 83 83 83 83
382 61 61 61 61
383 19 19 19 19
384 89 89 89 89
385 16 16 16 16
386 47 47 47 47
387 49 49 49 49
388 82 82 82 82
389 27 27 27 27
390 84 84 84 84
391 62 62 62 62
392 81 81 81 81

 

 

 

 

分享到:
评论

相关推荐

    Hive metastore 使用达梦数据库存储元数据

    然而,为了适应更复杂的业务需求和更高的性能,我们可以选择将Hive元数据存储在达梦数据库中。本文将详细介绍如何配置Hive metastore以使用达梦数据库。 首先,要在达梦数据库中创建metastore所需的用户和表空间。...

    Hive安装,使用MySQL作为元数据库

    在大数据处理领域,Apache Hive是一个基于Hadoop的数据仓库工具,它允许用户使用SQL(HQL,Hive Query Language)查询和管理存储在Hadoop分布式文件系统(HDFS)中的大量结构化数据。本教程将详细介绍如何安装Hive,...

    hive3.1.2+mysql驱动.zip

    在Hive中,元数据(如表的结构、分区信息等)的存储通常有两种方式:本地元数据存储和远程元数据存储。本地元数据存储将元数据保存在运行Hive Metastore服务的同一台服务器上,而远程元数据存储则允许在独立的数据库...

    hive数据存储模式

    上述配置指定了Hive元数据存储所需的数据库连接字符串以及驱动程序名称,以MySQL为例。 综上所述,Hive通过灵活的数据存储模式和元数据管理机制,为大规模数据分析提供了强大的支持。理解Hive的数据存储模式对于...

    cloudera manager中添加hive数据库使用mysql的配置步骤

    在Cloudera Manager中配置Hive使用MySQL数据库涉及多个步骤,从卸载CentOS默认MySQL到配置完毕,下面详细说明每一步的知识点。...完成所有步骤后,Hive就可以使用MySQL作为后端数据库来进行元数据存储和管理了。

    hive1.2.1-mysql-connector.rar

    - **配置Hive与MySQL集成**:在使用MySQL作为Hive元数据存储时,需要配置Hive-site.xml文件,设置`javax.jdo.option.ConnectionURL`、`javax.jdo.option.ConnectionDriverName`、`javax.jdo.option....

    mysql数据抽取,自动生成hive建表语句

    在实际业务中,将MySQL中的数据迁移到Hive进行分析和挖掘是一个常见的需求。本教程主要围绕“mysql数据抽取,自动生成hive建表语句”这一主题展开,讲解如何高效地实现这一过程。 首先,我们需要理解MySQL与Hive...

    java操作Hive源码之HiveJDBC实例(mysql数据库)

    本实例将聚焦于如何使用Java和HiveJDBC来操作基于MySQL的Hive元数据存储。以下是一份详细的步骤指南和相关知识点解释: 1. **HiveJDBC简介**: HiveJDBC是Hive提供的一种JDBC驱动,使得任何支持JDBC的应用程序,如...

    apache-hive-3.1.2+mysql-connector-java-5.1.32-bin.jar

    在Hive中,我们通常会配置MySQL作为元数据存储,用来保存表信息、分区信息等元数据,因此这个驱动程序是搭建Hive环境的必要组件。 `apache-hive-3.1.2-bin.tar.gz`是Apache Hive 3.1.2的二进制发行版,包含了运行...

    hive-3.1.2&mysql-5.7.2安装包.rar

    在 Hive 中设置 metastore(元数据存储)连接,可以选择本地 MySQL 实例作为 metastore 服务,这将提高 Hive 的性能和数据一致性。 总的来说,这个安装包提供了在大数据环境中使用 Hive 进行数据处理并与 MySQL ...

    数据仓库hive用到的mysql安装包

    mysql安装包,mysql外界数据库作为存储hive元数据的存储介质,它的存在,方便hive用户根据自身的需求对数据进行分析处理。

    hadoop集群配置之———hive安装与配置(超详细)

    Hive的表与HDFS目录紧密相关,Hive表中的数据被存储在HDFS的目录中,而表的元数据则存储在MySQL数据库中。这意味着Hive的操作实际上是操作HDFS上的文件,而Hive管理这些文件的方式,就是通过元数据的映射,把HQL语句...

    基于hadoop的hive数据仓库的配置

    以上步骤详细介绍了如何在Linux环境下搭建基于Hadoop的Hive数据仓库,包括Hive的安装、MySQL作为Hive元数据存储的配置以及Hive的初始化等关键步骤。通过这些配置,你可以利用Hive对Hadoop中的大规模数据进行高效的...

    hive-1.1.0-cdh5.14.2.tar.gz和mysql-connector-java-5.1.38.jar连接包

    6. **Hive与MySQL的集成**: 在配置Hive时,通过修改`hive-site.xml`配置文件,指定MySQL为元数据存储,并加载`mysql-connector-java-5.1.38.jar`到Hive的类路径中,就可以实现两者间的连接。 7. **HiveQL**: Hive...

    Linux hadoop,hive,javajdk,mysql数据库等压缩包

    在大数据环境中,MySQL通常用作元数据存储或与其他数据处理工具集成。`MySQL-server-5.1.73-1.glibc23.x86_64.rpm`和`MySQL-client-5.1.73-1.glibc23.x86_64.rpm`分别是MySQL服务器和客户端的RPM包,适合在Linux环境...

    《Hive数据仓库案例教程》教学大纲.pdf

    2. **Hive环境搭建**:这章介绍了Hive的安装、配置,包括MySQL的安装,Hive元数据的配置,以及如何使用HiveJDBC进行连接。实践环节让学生亲手操作Hive的部署,掌握配置过程。 3. **Hive基础**:本章涉及Hive的数据...

    8、NIFI综合应用场景-NiFi监控MySQL binlog进行实时同步到hive

    1. **模板配置**:在NiFi中,可以创建一个名为`mysql_to_hive_realtime`的模板,用于处理从MySQL binlog到Hive的数据流。模板中的处理器配置将包含捕获binlog事件、解析事件、转换数据格式以及将数据写入Hive的逻辑...

    hadoop上搭建hive成功后,连接mysql.pdf

    `命令查看数据库中的所有表,确认Hive是否已经成功将元数据存储在MySQL中。 **三、在Hive中操作** 1. **启动Hive CLI**: 在另一个新窗口中,输入`hive`启动Hive的命令行界面。 2. **查看Hive数据库**: 在Hive...

    大数据之Hive官方文档简要翻译(中文文档)

    元数据存储在与Hive服务在同一台机器上,这简化了设置,但不适合生产环境,因为它无法提供高可用性和扩展性。 2. **远程元存储数据库**:在生产环境中推荐使用,你可以选择像MySQL、PostgreSQL这样的外部数据库来...

    hive如何去安装与配置

    - `metastore.uris`:用于指定Hive元数据存储的Thrift服务器URI。 - `javax.jdo.option.ConnectionURL`:连接到MySQL等数据库的URL,用于存储Hive元数据。 - `hive.metastore.warehouse.dir`:HDFS上的Hive仓库目录...

Global site tag (gtag.js) - Google Analytics