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

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

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

  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元数据存放库和连接用户


1

2

3

mysql> create database hive;

mysql> grant all on *.* to'hive'@'%' identified by 'hive';

mysql> flush privileges;

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


1

2

# tar zxvf apache-hive-1.2.0-bin.tar.gz

# mv apache-hive-1.2.0-bin /opt


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# 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.配置系统变量


1

2

3

4

5

# 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


1

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

5.检查是否正常启动

查看进程是否启动:


1

2

3

4

5

6

7

[root@HMaster0 ~]# jps

2615 DFSZKFailoverController

30027 ResourceManager

29656 NameNode

25451 Jps

10270 HMaster

14975 RunJar     #会启动一个RunJar进程

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


1

2

3

4

5

6

[root@HMaster0 ~]# 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环境)


1

2

# tar zxvf apache-hive-1.2.0-bin.tar.gz

# mv apache-hive-1.2.0-bin /opt


1

2

3

4

5

6

7

8

# vi hive-site.xml

<configuration>

<!--通过thrift方式连接hive-->

   <property>

       <name>hive.metastore.uris</name>

        <value>thrift://192.168.18.215:9083</value>

   </property>

</configuration>

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


1

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

7.Hive常用SQL命令

 7.1 先创建一个测试库


1

 hive> create database test;

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


1

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

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


1

 hive> create table tb3 like tb1;

 查看下表结构:


1

2

3

4

5

 hive> describe tb3;

 OK

 id                     int            

 name                   string                  

 Time taken: 0.091 seconds, Fetched: 2 row(s)

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

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


1

2

3

4

 # cat kv.txt 

 1       zhangsan

 2       lisi

 3       wangwu

 再导入数据:


1

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

 7.4 从HDFS中导入数据到Hive表


1

2

3

4

5

 # hadoop fs -cat /kv.txt   #查看hdfs中要导入的数据

 1       zhangsan

 2       lisi

 3       wangwu

 hive> load data inpath '/kv.txt'overwrite into table tb1;

 7.5 查询是否导入成功


1

2

3

4

5

6

 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表目录下只有一级目录):


1

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

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

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


1

2

 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 查看表数据


1

2

3

4

5

6

7

8

9

 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仓库中表目录变化


1

2

3

4

5

 # 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表目录下有一级目录,一级目录下再有子级目录)


1

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

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


1

2

 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 查看表数据


1

2

3

4

5

6

7

8

9

 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仓库中表目录变化


1

<span style="color:rgb(0,0,0);"# hadoop fs -ls -R /user/hive/warehouse/test.db/tb3<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35/user/hive/warehouse/test.db/tb3/dt=2015-06-26<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:35 /user/hive/warehouse/test.db/tb3/dt=2015-06-26/location=beijing<br> -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<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45 /user/hive/warehouse/test.db/tb3/dt=2015-06-27<br> drwxr-xr-x   - root supergroup          0 2015-06-26 04:45/user/hive/warehouse/test.db/tb3/dt=2015-06-27/location=shanghai<br> -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<br></span>

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

 7.14 查看表分区信息


1

 hive> show partitions tb2;

 7.15 根据分区查询数据


1

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

 7.16 重命名分区


1

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

 7.17 删除分区


1

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

 7.18 模糊搜索表


1

 hive> show tables 'tb*';

 7.19 给表新添加一列


1

 hive> alter table tb1 addcolumns (commnet string);

 7.20 重命名表


1

 hive> alter table tb1 rename to new_tb1;

 7.21 删除表


1

 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下:


1

2

# 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下:


1

# cp mysql-connector-java-5.1.10-bin.jar /opt/apache-hive-1.2.0-bin/lib


时间: 2024-08-13 03:42:19

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

基于Hadoop的数据仓库Hive基础知识

Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理.特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hive将HQL语句转换成MR任务进行执行. 一.概述 1-1 数据仓库概念 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrated).相对稳定的(Non-Volatile).反应历史变化(Time Variant)的数据集合,用于支持

hive (基于hadoop的数据仓库)

1.简介 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能. 与传统关系数据库相比的优势是:能够处理海量数据. 劣势是:它只提供查询功能,不能增.删.改.涉及到分布式计算的任务分发,查询时间在分钟级,不能当实时工具用. 运行机理:将sql语句转换为MapReduce任务,让Hadoop处理. 2.查询语句 hive //此命令打开hive的CLI(Command Line Interface). show databases;//

解读:基于Hadoop的大规模数据处理系统

Hadoop的组成部分 Hadoop是Google的MapReduce一个Java实现.MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行. Hadoop主要由HDFS.MapReduce和HBase等组成.具体的组成如下图: Hadoop的组成图 1. Hadoop HDFS是Google GFS存储系统的开源实现,主要应用场景是作为并行计算环境(MapReduce)的基础组件,同时也是BigTable(如HBase. HyperTable)的

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

为了满足日益增长的业务变化,京东的京麦团队在京东大数据平台的基础上,采用了Hadoop等热门的开源大数据计算引擎,打造了一款为京东运营和产品提供决策性的数据类产品-北斗平台. 一.Hadoop的应用业务分析 大数据是不能用传统的计算技术处理的大型数据集的集合.它不是一个单一的技术或工具,而是涉及的业务和技术的许多领域. 目前主流的三大分布式计算系统分别为:Hadoop.Spark和Strom: Hadoop当前大数据管理标准之一,运用在当前很多商业应用系统.可以轻松地集成结构化.半结构化甚至非结

基于Hadoop版本Tachyon:吞吐量要比HDFS高300多倍

Hadoop足够快吗?美国加州大学伯克利分校的AMPLab基于Hadoop的核心组件开发出一个更快的版本Tachyon.AMPLab从底层重建了Hadoop平台,"没有最快,只有更快". AMPLab在大数据领域最知名的产品是Spark,它是一个内存中并行处理的框架,Spark的创造者声称:使用Shark运行并行处理Job速度要比MapReduce快100倍.又因为Spark是在内存运行,所以Shark可与Druid或者SAP's HANA系统一较高下.Spark也为ClearStor

基于Hadoop云计算智能家居信息处理平台

近年来,在物联网等具有海量数据需求的应用变得越来越普遍时,无论是从科学研究还是从应用开发的角度来看,掌握云计算技术已成为一种趋势.智能家居作为物联网应用的主要领域之一,自然离不开云计算.云计算的发展使用户无需关注复杂的内部工作机制.无需具备丰富的分布式系统知识及开发经验,即可实现大规模分布式系统规定部署,以及海量数据的并行处理. Hadoop是目前较为成熟和应用较为广泛的云计算架构之一.Hadoop的核心思想是分布式并行处理.Hadoop技术中的关键技术是 HDFS(分布式文件系统)和Map/R

基于Hadoop的海量小型XML数据文件处理技术的设计和实现

基于Hadoop的海量小型XML数据文件处理技术的设计和实现 西安电子科技大学 孔鑫 本文重点研究了如下内容:1)设计了专门针对海量小数据XML文件进行处理的分布式海量小型XML数据处理系统(Distributed Massive SmallXML files system,DMSX),该系统的主要思想就是将海量小数据XML文件在Hadoop系统中高效的进行处理.2)该系统通过运用生产者-消费模式,多线程并发技术,多级缓存技术等,来提高系统的整体处理能力.3)该系统通过对合并后的文件进行分段存储

基于hadoop的推荐系统设计与实现

基于hadoop的推荐系统设计与实现 电子科技大学  唐真 主要工作内容如下:1.通过对Hadoop运行机制和MapReduce编程原理的研究,结合对推荐系统与推荐算法,特别是对以物质扩散推荐算法和热传导推荐算法为代表的网络推荐算法的深入分析,设计和实现基于Hadoop平台的网络推荐算法MapReduce化编程实现方案,将该算法复杂的计算任务分解为一系列MapReduce作业流程,以便于在Hadoop和云计算平台上进行分布式并行化处理,通过一系列实验测试证明算法在集群上具有良好的并行性和可扩展性

BigInsights:解读IBM基于Hadoop的数据分析平台

毫无疑问,大数据成了2012年的热门词.根据国外统计机构的报告,大数据处理在今年的市场规模已经达到700亿美元并且正以每年15-20%的速度增长.几乎所有主要的大科技公司都对大数据感兴趣,对该领域的产品及服务进行了大量投入.其中包括了IBM.Oracel.EMC.HP.Dell.SGI.日立.Yahoo等,而且这个列表还在继续. IBM也在2011年中旬对外发布了针对大数据处理和分析技术:在SmartCloud平台上新增基于Apache Hadoop的服务InfoSphere BigInsigh