- 浏览: 155361 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (113)
- Java工具类 (3)
- Hibernate (1)
- Struts>1&2 (0)
- Spring (0)
- Web前端 (1)
- 数据库 (2)
- 中间件 (3)
- 搜索引擎 (11)
- EJB (1)
- Log日志 (1)
- OS操作系统 (7)
- Java文档 (4)
- Security (1)
- Exception&Error (7)
- 日志&心情 (7)
- 开心一下 (3)
- 云计算 (41)
- Cache缓存 (4)
- MongoDB (1)
- OS操作系统 Linux (7)
- jquery (1)
- 机器学习 (2)
- Plugins (2)
- AJAX (1)
- Java工具 (1)
- WebService (1)
最新评论
-
a420144030:
你好,我想计算n篇文章的相似度,用mahout能处理吗,如何做 ...
mahout使用 -
di1984HIT:
OK,真的很牛啊
hadoop常见错误 -
xwl1991:
还真是这个问题 !
quartz报错java.lang.NoSuchMethodError: org.apache.commons.collections.SetUtils.ord
本文转自:http://tiechou.info/?p=33
简介
Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据。Hive可以将结构化的数据存储在数据仓库中,通过自己的SQL去查询分析需要的内容,这套SQL简称Hive SQL。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚合函数、连接查询、条件查询。
Hive在Hadoop的架构体系中承担了一个SQL解析的过程,它提供了对外的入口来获取用户的指令然后对指令进行分析,解析出一个MapReduce程序组成可执行计划,并按照该计划生成对应的MapReduce任务提交给Hadoop集群处理,获取最终的结果。
安装
Hive需要Hadoop的支持,也就是说在安装Hive之前需要正确安装Hadoop。一般我们会将Hive安装到NameNode所在主机上,这里假设使用root用户进行安装,Hive的安装过程很简单,网上有很多安装方式:
1 |
[root@192.168.1.111] # 去到hadoop的目录,使用hadoop的项目根目录
|
2 |
[root@192.168.1.111] cd /opt/hadoop
|
3 |
[root@192.168.1.111] # 下载项目包(去官网(http://hadoop.apache.org/)下载Hadoop项目)
|
4 |
[root@192.168.1.111] wget http://www.apache.org/dist/hadoop/hive/hive-0.5.0/hive-0.5.0-dev. tar .gz
|
5 |
[root@192.168.1.111] # 解压
|
6 |
[root@192.168.1.111] tar xzvf hive-0.5.0-dev. tar .gz
|
7 |
[root@192.168.1.111] # 进入目录
|
8 |
[root@192.168.1.111] cd hive-0.5.0-dev
|
9 |
[root@192.168.1.111] # 与Hadoop的安装一样,我们应该习惯性的将安装目录写入环境变量
|
10 |
[root@192.168.1.111] export HIVE_HOME=` pwd `
|
11 |
[root@192.168.1.111] # 也可以将环境变量设置到/etc/profile中
|
配置
Hive的必要配置相当简单,只需要声明$HADOOP_HOME(请查阅《Hadoop安装》文档)这个环境变量就行了。
Hive的核心配置文件$HIVE_HOME/conf/hive-default.xml中有一些对Hive关键配置,一般我们不需要对期进行改动,如果你需要更改这个关键配置,请不要直接更改hive-default.xml这个文件,在同一目录下新建hive-site.xml文件,然后将需要更改的属性配置在这里面即可,配置格式与hive-default.xml一样。
在Hive官方文档中重点提到了Hive的日志配置$HIVE_HOME/conf/hive-log4j.properties,虽然不是必要更改的配置文件,但合理的设置会对我们有一定的帮助,具体配置方法可见官方文档。
使用
Hive提供了一个CLI(Command Line Interface)客户端,我们可以通过CLI进行直观的DDL、DML及SQL操作。以下是CLI使用示例:
1 |
# 这里创建了一个foo表,字段以\001分隔,location指定映射文件位置 |
2 |
create external table foo |
3 |
( |
4 |
uid bigint, |
5 |
brand_value string |
6 |
) |
7 |
row format delimited fields terminated by '\001'
|
8 |
stored as textfile |
9 |
location "/group/tbsc-dev/haowen/temp/shpsrch_bshop_brand_value_ssmerge_1011/" ;
|
10 |
|
11 |
# 插入数据到 foo表 注意这些语句不要用tab缩进 |
12 |
INSERT OVERWRITE TABLE foo |
13 |
select uid,value_data
|
14 |
from |
15 |
( |
16 |
select t1.uid,t2.value_data
|
17 |
from
|
18 |
shpsrch_bshop_brand_unfold_ssmerge_1011 t1
|
19 |
join sel_shpsrch__base_values t2
|
20 |
on t1.brand_id = t2.value_id and t2.ds=20101019
|
21 |
) a; |
也可以在终端界面这样使用
1 |
echo "select * from foo where uid=153702175;" | hive -u root -p root
|
数据join
之前在数据join的时候遇到过这样一个问题,就是当一个uid 对应多个品牌brand_id 的时候,即:
uid – brand_id1 = brand_id1 – brand_value1
uid – brand_id2 = :
uid – brand_id3 = :
这样join之后的数据会出现:
uid – brand_value1
uid – brand_value1
这个样子相同的多条记录,出现数据重复的现象
如果数据量小的话,最简单的调试办法是 这样:把所有的数据放在一个namenode上面跑
1 |
hive -u root -p root <<EOF |
2 |
|
3 |
# 指定reduced的任务数量 |
4 |
set mapred.reduce.tasks=1;
|
5 |
add file /data/tiechou/ssmerge/mod/mod_bshop_brand/script/brand_packed.pl;
|
6 |
explain |
7 |
INSERT OVERWRITE TABLE foo |
8 |
select transform(uid, value_data)
|
9 |
using 'brand_packed.pl'
|
10 |
as uid,brand_value
|
11 |
from
|
12 |
( |
13 |
select t1.uid,t2.value_data
|
14 |
from
|
15 |
shpsrch_bshop_brand_unfold_ssmerge_1011 t1
|
16 |
join sel_shpsrch__base_values t2
|
17 |
on t1.brand_id = t2.value_id and t2.ds=1 distribute by t1.uid
|
18 |
) a; |
19 |
set mapred.reduce.tasks=256;
|
20 |
EOF |
上面显然不是最好的办法,不过已经说明问题了,是相同uid被分到多个namenode上join引起的,其实hive是支持clusterBy? | distributeBy? sortBy? 的, clusterBy是 distributeBy? sortBy?的综合
1 |
hive -u root -p root <<EOF |
2 |
|
3 |
add file /data/tiechou/ssmerge/mod/mod_bshop_brand/script/brand_packed.pl;
|
4 |
INSERT OVERWRITE TABLE foo |
5 |
select transform(t3.uid,t3.value_data)
|
6 |
using 'brand_packed.pl'
|
7 |
as uid,brand_value
|
8 |
from( |
9 |
from shpsrch_bshop_brand_unfold_ssmerge_1011 t1 join sel_shpsrch__base_values t2 on (t1.brand_id = t2.value_id and t2.ds=20101019) select t1.uid,t2.value_data distribute by t1.uid) t3;
|
最后我们普及一下sql join,在网上找了一个很形象的说明:http://coolshell.cn/articles/3463.html
SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join。
假设我们有两张表。
Table A 是左边的表。
Table B 是右边的表。
其各有四条记录,其中有两条记录是相同的,如下所示:
id name id name
– —- — —-
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
下面让我们来看看不同的Join会产生什么样的结果。
1 |
SELECT * FROM TableA |
2 |
INNER JOIN TableB |
3 |
ON TableA.name = TableB.name |
Inner join
id name id name
– —- — —-
1 Pirate 2 Pirate
3 Ninja 4 Ninja
结果集: 是A和B的交集。
Full outer join
1 |
SELECT * FROM TableA |
2 |
FULL OUTER JOIN TableB |
3 |
ON TableA.name = TableB.name |
id name id name
– —- — —-
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
结果集: 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。
Left outer join
1 |
SELECT * FROM TableA |
2 |
LEFT OUTER JOIN TableB |
3 |
ON TableA.name = TableB.name |
id name id name
– —- — —-
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
Left outer join 产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
1 |
SELECT * FROM TableA |
2 |
LEFT OUTER JOIN TableB |
3 |
ON TableA.name = TableB.name |
4 |
WHERE TableB. id IS null
|
hive 中实现方式
1 |
select a_id from (
|
2 |
select a. id as a_id,b.del_id as b_id
|
3 |
from shop a left outer join del b
|
4 |
on a. id = b.del_id )c
|
5 |
where b_id is null; |
id name id name
– —- — —-
2 Monkey null null
4 Spaghetti null null
结果集: 产生在A表中有而在B表中没有的集合。
1 |
SELECT * FROM TableA |
2 |
FULL OUTER JOIN TableB |
3 |
ON TableA.name = TableB.name |
4 |
WHERE TableA. id IS null
|
5 |
OR TableB. id IS null
|
id name id name
– —- — —-
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
结果集: 产生A表和B表都没有出现的数据集。
还需要注册的是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A和表B的数据进行一个N*M的组合,即笛卡尔积。表达式如下:
1 |
SELECT * FROM TableA |
2 |
CROSS JOIN TableB |
这个笛卡尔乘积会产生 4 x 4 = 16 条记录,一般来说,我们很少用到这个语法。但是我们得小心,如果不是使用嵌套的select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险的,尤其是表很大的时候。
发表评论
-
用Sqoop把数据从HDFS导入到MYSQL
2012-10-27 23:30 2356转自:http://www.kaifajie.cn/mySQL ... -
大数据的储存:百度HDFS集群的数据压缩
2012-08-30 17:48 12112012年4月13日,由IT168(ITP ... -
用sqoop进行mysql和hdfs系统间的数据互导
2012-07-31 16:32 1945转自:http://abloz.com/2012/07/19/ ... -
从hive将数据导出到mysql
2012-07-31 16:31 1826转自:http://abloz.com/2012/07/20/ ... -
Hive SQL
2012-07-19 13:49 1429转自:http://www.tbdata.org/ ... -
Hive优化总结
2012-07-09 15:18 4336优化时,把hive sql当做ma ... -
hadoop/mapred 优化方法
2012-06-12 11:47 1397从三个方面着手优化 : 1. hadoop配置 2. ... -
hadoop集群dfs.data.dir目录权限问题导致节点无法启动
2012-06-11 18:32 6231安装使用Hive的时候发现文件无法从本地拷贝到hadoo ... -
hadoop中的balancer
2012-06-11 15:49 1149对于HDFS集群,经常长时间的运行,尤其是大量的delete操 ... -
Hadoop集群上使用Lzo压缩
2012-05-28 11:03 935转自:http://www.tech126.com/hadoo ... -
使用Hive读取Hbase中的数据
2012-05-23 13:12 2277转自:http://www.4ucode.com/Study/ ... -
在XP系统下配置eclipse集成hadoop开发
2012-05-05 11:09 1051一、目的:由于hadoop只能在Linux环境下运行,所以对于 ... -
使用Hive读取Hbase中的数据
2012-04-18 14:24 1100转自:http://www.4ucode.com/Study/ ... -
Web日志分析方法概述 让复杂的数据挖掘变得简单可行
2012-04-13 16:31 878志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志 ... -
应用sqoop将MySQL数据库中的数据导入Hbase
2012-04-12 11:31 2066转自:http://www.bwxxkj.com/a/jish ... -
hadoop中的trash机制,恢复删除的文件
2012-03-31 13:46 2203Hadoop回收站trash,默认是关闭的。 1.修改con ... -
Hadoop 和DBMS 的互补性
2012-03-29 12:22 676随着Microsoft 也加入Hadoop 阵营,Hadoop ... -
Hadoop 中的两表join
2012-03-29 12:20 853转自:http://www.gemini52013 ... -
各版本编译hadoop eclipse plugin
2012-03-29 12:19 1386转自:http://www.gemini52013 ... -
hadoop常见错误
2012-03-24 13:04 1674错误1:bin/hadoop dfs 不能正常启动,持续提 ...
相关推荐
hive 基本操作的命令和hive 实用命令等,有利与学习hive和mysql
hadoop入门学习教程 之10.Hive工作原理和基本使用,出自《Cloudera Hadoop 4 实战课程》,hadoop入门学习教程用到技术:CDH4,Cloudera Manager,Hive,HBase,Sqoop, Hadoop培训视频教程涉及项目:电商业日志流量...
### Hive原理与实现 #### 一、Hive的概述与意义 Hive 是一个构建于 Hadoop 之上的数据仓库工具,它提供了类 SQL 的查询语言(HQL),使得用户可以方便地处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据集...
【大数据技术基础实验报告-Hive安装配置与应用】 在大数据处理领域,Apache Hive是一个非常重要的组件,它提供了基于Hadoop的数据仓库工具,用于数据查询、分析以及存储。本实验报告将详细阐述如何安装、配置Hive,...
学习 Hive 的实现原理对于更好地使用 Hive 至关重要: 1. **提高执行效率**:了解 Hive 如何执行 SQL 可以帮助优化查询语句,减少不必要的 MapReduce 任务,从而提高执行效率。 2. **解决性能瓶颈**:理解 Hive 的...
在大数据处理领域,Hive是一种基于Hadoop的数据仓库工具,它允许用户使用SQL类的语言(称为HiveQL)对大规模数据进行分析和处理。在这个实验中,我们将深入理解Hive的角色以及如何执行基本操作。 首先,Hive在...
HiveSQL编译原理是大数据处理领域中的一个重要概念,它主要涉及到如何将用户提交的SQL语句转换为可执行的MapReduce或者Tez任务。在Hadoop生态系统中,Hive作为一个基于HDFS的数据仓库工具,提供了对大规模数据集进行...
- **Distinct的实现原理**:对于单个Distinct字段,Hive会在Map阶段将Group By字段与Distinct字段组合成key,通过Reduce阶段的LastKey机制去重。而对于多个Distinct字段,可以通过两种方法实现:一是使用Hash去重,...
本文旨在深入探讨HiveSQL解析原理及其如何将SQL转化为MapReduce过程,并解释MapReduce如何实现基本SQL操作。 #### 二、MapReduce实现基本SQL操作的原理 在深入理解Hive如何将SQL语句转换为MapReduce任务之前,我们...
与传统的数据库(如MySQL、Oracle)相比,Hive更侧重于分析操作,存储大量历史数据,响应时间相对较慢,但适合大规模数据的离线分析。 1.2 Hive原理 Hive的工作流程主要包括以下步骤: - 用户通过各种接口(CLI、...
理解Hive JDBC的工作原理以及如何在Java项目中正确配置和使用它是大数据开发中的关键技能之一。通过这个实例,你现在已经具备了使用Hive JDBC的基础知识,可以进一步探索更高级的Hive和Java集成技术。
接着详细介绍了Hive的系统架构,包括基本组成模块、工作原理和几种外部访问方式,描述了Hive的具体应用及Hive HA原理;同时,介绍了新一代开源大数据分析引擎Impala及其与Hive的比较分析;最后,以单词统计为例,...
总结来说,实现“hive udaf 实现按位取与或”涉及到理解Hive UDAF的工作原理,编写Java代码来定义UDAF,以及在Hive查询中正确地使用这些自定义函数。这不仅增强了Hive的功能,还使得大数据处理更加灵活和高效。
本文将对 Hive on Spark 的源码进行深入分析,涵盖其基本原理、运行模式、Hive 解析 HQL、Spark 上下文创建、任务执行等方面。 1. 运行模式 Hive on Spark 支持两种运行模式:本地(LOCAL)和远程(REMOTE)。当...
例如,你可以学习如何使用LOAD DATA命令将数据导入Hive表,使用SELECT语句进行基本查询,以及如何运用GROUP BY和JOIN操作来处理复杂的数据分析任务。此外,Hive支持UDF(用户自定义函数),这使得用户可以根据需要...
1. **Hive数据仓库基础**:这一部分主要讲解数据仓库的基本概念,包括数据仓库的特性、数据仓库与数据库的区别,以及Hive数据仓库的原理。学生需要理解Hive架构,以及它在大数据处理中的角色。 2. **Hive环境搭建**...
Hive体系结构包括概念、架构与基本组成、运行模式、数据类型、元数据存储和数据存储,以及HiveUI介绍。HiveShell命令行包含Hivebin下脚本介绍和HiveShell基本操作。 HiveQL是Hive中用于查询和管理数据的SQL语言,...
第1章:Hive基本架构及环境部署 1.MapReduce分析与SQL分析对比 2.Hive的介绍及其发展 3.Hive的安装部署及启动 4.Hive的基本架构讲解 5.安装MySQL作为元数据库存储 6.配置Hive使用MySQL作为元数据库存储 7.Hive中基本...
华为大数据认证:Hive分布式数据仓库课程目标是让学员掌握Hive应用场景与基本原理、掌握FusionInsight中Hive增强特性、熟悉常用Hive SQL语句。课程目录包括Hive概述、Hive功能与架构、Hive基本操作等。 Hive是大...
1. **Hive基本概念** Hive是由Facebook开源的一种数据仓库工具,设计用来处理海量的结构化日志数据统计。它基于Hadoop,可以把结构化的数据文件映射成数据库表,并提供SQL-like查询功能。Hive的本质是将HQL(Hive ...