基于Hadoop数据仓库Hive1.2部署及使用

以下基于上篇Hadoop2.6集群部署:http://lizhenliang.blog.51cto.com/7876557/1661354

接下来安装Hadoop数据仓库Hive,上节了解HBase简单使用,听起来HBase与Hive有些类似,概念也有点模糊,那我们先了解下他们之间有什么区别:

HBase是一种分布式、面向列的NoSQL数据库,基于HDFS存储,以表的形式存储数据,表由行和列组成,列划分到列族中。HBase不提供类SQL查询语言,要想像SQL这样查询数据,可以使用Phonix,让SQL查询转换成hbase的扫描和对应的操作。

Hive是运行在Hadoop之上的数据仓库,将结构化的数据文件映射为一张数据库表,提供简单类SQL查询语言,称为HQL,并将SQL语句转换成MapReduce任务运算。有利于利用SQL语言查询、分析数据,适于处理不频繁变动的数据。Hive底层可以是HBase或者HDFS存储的文件。

两者都是基于Hadoop上不同的技术,相互结合使用,可处理企业中不同类型的业务,利用Hive处理非结构化离线分析统计,利用HBase处理在线查询。

Hive三种元数据存储方式:

1>.本地derby存储,只允许一个用户连接Hive,适用于测试环境

2>.本地/远程MySQL存储,支持多用户连接Hive,适用于生产环境

三、Hive安装与配置(以下将元数据存储到远程MySQL配置)

1.在MySQL创建Hive元数据存放库和连接用户

mysql> create database hive;
mysql> grant all on *.* to‘hive‘@‘%‘ identified by ‘hive‘;
mysql> flush privileges;

2.安装与配置Hive(在HMaster0安装)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml
<configuration>
    <!--以下是MySQL连接信息-->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://192.168.18.210:3306/hive?createDatabaseIfNotExist=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive_user</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive_pass</value>
    </property>
</configuration>

3.配置系统变量

# vi /etc/profile
HIVE_HOME=/opt/apache-hive-1.2.0-bin
PATH=$PATH:$HIVE_HOME/bin
export HIVE_HOME PATH
# source /etc/profile

4.启动Hive

# hive --service metastore &   #启动远程模式,否则你只能在本地登录

5.检查是否正常启动

查看进程是否启动:

[[email protected] ~]# jps
2615 DFSZKFailoverController
30027 ResourceManager
29656 NameNode
25451 Jps
10270 HMaster
14975 RunJar     #会启动一个RunJar进程

执行hive命令会进入命令界面:

[[email protected] ~]# hive
Logging initialized usingconfiguration in file:/opt/apache-hive-1.2.0-bin/conf/hive-log4j.properties
hive> show databases;
OK
default
Time taken: 0.986 seconds,Fetched: 1 row(s)

查看数据库,默认有一个default库,现在就可以用你熟悉的SQL语言了。

6.客户端连接Hive(必须有Hadoop环境)

# tar zxvf apache-hive-1.2.0-bin.tar.gz
# mv apache-hive-1.2.0-bin /opt
# vi hive-site.xml
<configuration>
<!--通过thrift方式连接hive-->
   <property>
       <name>hive.metastore.uris</name>
        <value>thrift://192.168.18.215:9083</value>
   </property>
</configuration>

配置好连接信息,连接命令行:

# /opt/apache-hive-1.2.0-bin/bin/hive

7.Hive常用SQL命令

7.1 先创建一个测试库

 hive> create database test;

7.2 创建tb1表,并指定字段分隔符为tab键(否则会插入NULL)

 hive> create table tb1(id int,name string)row format delimited fields terminated by ‘\t‘

如果想再创建一个表,而且表结构和tb1一样,可以这样:

 hive> create table tb3 like tb1;

查看下表结构:

 hive> describe tb3;
 OK
 id                     int            
 name                   string                  
 Time taken: 0.091 seconds, Fetched: 2 row(s)

7.3 从本地文件中导入数据到Hive表

先创建数据文件,键值要以tab键空格:

 # cat kv.txt 
 1       zhangsan
 2       lisi
 3       wangwu

再导入数据:

 hive> load data local inpath‘/root/kv.txt‘ overwrite into table tb1;

7.4 从HDFS中导入数据到Hive表

 # hadoop fs -cat /kv.txt   #查看hdfs中要导入的数据
 1       zhangsan
 2       lisi
 3       wangwu
 hive> load data inpath ‘/kv.txt‘overwrite into table tb1;

7.5 查询是否导入成功

 hive> select * from tb1;
 OK
 1       zhangsan
 2       lisi
 3       wangwu
 Time taken: 0.209 seconds,Fetched: 3 row(s)

博客地址:http://lizhenliang.blog.51cto.com

 

 上面是基本表的简单操作,为了提高处理性能,Hive引入了分区机制,那我们就了解分区表概念:

1>.分区表是在创建表时指定的分区空间

2>.一个表可以有一个或多个分区,意思把数据划分成块

3>.分区以字段的形式在表结构中,不存放实际数据内容

 分区表优点:将表中数据根据条件分配到不同的分区中,缩小查询范围,提高检索速度和处理性能。

单分区表:

7.6 创建单分区表tb2(HDFS表目录下只有一级目录):

hive> create table tb2(idint,name string) partitioned by (dt string) row format delimited fieldsterminated by ‘\t‘;

注:dt可以理解为分区名称。

7.7 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath ‘/root/kv.txt‘ into table tb2 partition (dt=‘2015-06-26‘);
 hive> load data local inpath ‘/root/kv.txt‘ into table tb2 partition (dt=‘2015-06-27‘);

7.8 查看表数据

 hive> select * from tb2;
 OK
 1       zhangsan  2015-06-26
 2       lisi     2015-06-26
 3       wangwu   2015-06-26
 1       zhangsan  2015-06-27
 2       lisi   2015-06-27
 3       wangwu   2015-06-27
 Time taken: 0.223 seconds,Fetched: 6 row(s)

7.9 查看HDFS仓库中表目录变化

 # hadoop fs -ls -R /user/hive/warehouse/test.db/tb2
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:12/user/hive/warehouse/test.db/tb2/dt=2015-06-26
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:12 /user/hive/warehouse/test.db/tb2/dt=2015-06-26/kv.txt
 drwxr-xr-x   - root supergroup          0 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27
 -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:15/user/hive/warehouse/test.db/tb2/dt=2015-06-27/kv.txt

可以看到tb2表导入的数据根据日期将数据划分到不同目录下。

 多分区表:

7.10 创建多分区表tb3(HDFS表目录下有一级目录,一级目录下再有子级目录)

 hive> create table tb3(idint,name string) partitioned by (dt string,location string) row formatdelimited fields terminated by ‘\t‘;

7.11 从文件中把数据导入到Hive分区表,并定义分区信息

 hive> load data local inpath ‘/root/kv.txt‘ into table tb3 partition (dt=‘2015-06- 26‘,location=‘beijing‘);
 hive> load data local inpath ‘/root/kv.txt‘ into table tb3 partition (dt=‘2015-06-27‘,location=‘shanghai‘);

7.12 查看表数据

 hive> select * from tb3;
 OK
 1       zhangsan  2015-06-26      beijing
 2       lisi     2015-06-26      beijing
 3       wangwu    2015-06-26      beijing
 1       zhangsan  2015-06-26      shanghai
 2       lisi     2015-06-26      shanghai
 3       wangwu    2015-06-26      shanghai
 Time taken: 0.208 seconds,Fetched: 6 row(s)

7.13 查看HDFS仓库中表目录变化

 # hadoop fs -ls -R /user/hive/warehouse/test.db/tb3 drwxr-xr-x   - root supergroup          0 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26 drwxr-xr-x   - root supergroup          0 2015-06-26 04:35 /user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing/kv.txt drwxr-xr-x   - root supergroup          0 2015-06-26 04:45 /user/hive/warehouse/test.db/tb3/dt=2015-06-27 drwxr-xr-x   - root supergroup          0 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai -rwxr-xr-x   3 root supergroup         27 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai/kv.txt

可以看到表中一级dt分区目录下又分成了location分区。

7.14 查看表分区信息

 hive> show partitions tb2;

7.15 根据分区查询数据

 hive> select name from tb3 where dt=‘2015-06-27‘;

7.16 重命名分区

 hive> alter table tb3 partition (dt=‘2015-06-27‘,location=‘shanghai‘) rename to partition(dt=‘20150627‘,location=‘shanghai‘);

7.17 删除分区

 hive> alter table tb3 droppartition (dt=‘2015-06-26‘,location=‘shanghai‘);

7.18 模糊搜索表

 hive> show tables ‘tb*‘;

7.19 给表新添加一列

 hive> alter table tb1 addcolumns (commnet string);

7.20 重命名表

 hive> alter table tb1 renameto new_tb1;

7.21 删除表

 hive> drop table new_tb1;

8.启动过程中遇到错误

报错1:

[ERROR]Terminal initialization failed; falling back to unsupported

java.lang.IncompatibleClassChangeError:Found class jline.Terminal, but interface was expected

解决方法,将hive/lib下jline包拷贝到hadoop/yarn/lib下:

# cp /opt/apache-hive-1.2.0-bin/lib/jline-2.12.jar /opt/hadoop-2.6.0/share/hadoop/yarn/lib/
# rm /opt/hadoop-2.6.0/share/hadoop/yarn/lib/jline-0.9.94.jar

报错2:

javax.jdo.JDOFatalInternalException:Error creating transactional connection factory

解决方法,在百度下载java连接MySQL包放到hive/lib下:

# cp mysql-connector-java-5.1.10-bin.jar /opt/apache-hive-1.2.0-bin/lib
时间: 2024-10-31 10:16:32

基于Hadoop数据仓库Hive1.2部署及使用的相关文章

基于hadoop的数据仓库工具:Hive概述

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hive是建立在 Hadoop 上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在 Hadoop 中的大规模数据的机

基于Hadoop离线大数据分析平台项目实战

基于Hadoop离线大数据分析平台项目实战  课程学习入口:http://www.xuetuwuyou.com/course/184 课程出自学途无忧网:http://www.xuetuwuyou.com 课程简介: 某购物电商网站数据分析平台,分为收集数据.数据分析和数据展示三大层面.其中数据分析主要依据大数据Hadoop生态系统常用组件进行处理,此项目真实的展现了大数据在企业中实际应用. 课程内容 (1)文件收集框架 Flume ①Flume 设计架构.原理(三大组件) ②Flume 初步使

(第7篇)灵活易用易维护的hadoop数据仓库工具——Hive

摘要: Hive灵活易用且易于维护,十分适合数据仓库的统计分析,什么样的结构让它具备这些特性?我们如何才能灵活操作hive呢? 博主福利 给大家推荐一套hadoop视频课程 [百度hadoop核心架构师,首次内部分享的企业级项目视频,价值3980元] 免费赠送100份,先到先得.联系老师微信ganshiyu1026,备注OSchina. 部分视频截图展示 Hive hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,Hive 定义了

【大数据干货】基于Hadoop的大数据平台实施——整体架构设计

大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星.我们暂不去讨论大数据到底是否适用于您的公司或组织,至少在互联网上已经被吹嘘成无所不能的超级战舰.好像一夜之间我们就从互联网时代跳跃进了大数据时代!关于到底什么是大数据,说真的,到目前为止就和云计算一样,让我总觉得像是在看电影<云图>--云里雾里的感觉.或许那些正

基于Hadoop大数据分析应用场景与实战

一.Hadoop的应用业务分析 大数据是不能用传统的计算技术处理的大型数据集的集合.它不是一个单一的技术或工具,而是涉及的业务和技术的许多领域. 目前主流的三大分布式计算系统分别为:Hadoop.Spark和Strom: Hadoop当前大数据管理标准之一,运用在当前很多商业应用系统.可以轻松地集成结构化.半结构化甚至非结构化数据集. Spark采用了内存计算.从多迭代批处理出发,允许将数据载入内存作反复查询,此外还融合数据仓库,流处理和图形计算等多种计算范式.Spark构建在HDFS上,能与H

基于Windows Server 2012 R2部署KMS服务器

基于Windows Server 2012 R2部署KMS服务器 关于Microsoft Windows / Microsoft Office "VLK" 和"MAK"两种激活的异同 "VLK"和"MAK"都是微软为"大客户"量身特定的激活方式.只要实施激活,就是永久激活."VLK"是Volume Licensing Key的缩写.微软对于"VLK"密钥施行"

(8)基于hadoop的简单网盘应用实现4

文件结构 (1).index.jsp首页面实现 index.jsp <%@ include file="head.jsp"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="org.apache.hadoop.fs.FileSta

基于Windows Server 2012 R2部署SQL 2012的AlwaysOn群集

SQL Server2012中新增的AlwaysOn简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案.在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移集群.都有其自身的局限性.而AlwaysOn作为微软新退出的解决方案,提取了数据库镜像和故障转移集群的优点.本文旨在通过实现一个AlwaysOn的实例来展现AlwaysOn. Windows2012群集要求作为群集运行的所有节点都必须采用投票算法确定该

基于Hadoop的数据分析综合管理平台之Hadoop、HBase完全分布式集群搭建

能够将热爱的技术应用于实际生活生产中,是做技术人员向往和乐之不疲的事. 现将前期手里面的一个项目做一个大致的总结,与大家一起分享.交流.进步.项目现在正在线上运行,项目名--基于Hadoop的数据分析综合管理平台. 项目流程整体比较清晰,爬取数据(txt文本)-->数据清洗-->文本模型训练-->文本分类-->热点话题发现-->报表"实时"展示,使用到的技术也是当今互联网公司常用的技术:Hadoop.Mahout.HBase.Spring Data Had