hadoop之hive在数据检索中的用法
来源:互联网 发布:淘宝欧米茄翻新表 编辑:程序博客网 时间:2024/06/05 10:22
hive:我只用他来检索过日志,对这个谈不上什么精通或熟练,只是会使用而已,可以按需求进行特定的数据检索而已,这个东西很方便,比map-reduce方便很多
你可以把他完全当成mysql来用,因为这个也是用的SQL 语句,存储只不过数据不是存在我们常用的mysql等数据库中
为什么有map-reduce还要有这个hive呢?
我个人的理解是,map-reduce不管你查询什么或计算什么都需要一次任务提交,调度,计算,输出
这个都需要走完应该走的流程,而hive则不一样尽管他是把类似的SQL语句转成map-reduce来处理,
下面几个说明简单的说一下这个是什么?
一:什么是Hive
•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
•本质是将SQL转换为MapReduce程序
二:为什么用Hive
为什么要使用Hive
•操作接口采用类SQL语法,提供快速开发的能力
•避免了去写MapReduce,减少开发人员的学习成本
•扩展功能很方便
三:Hive与Hadoop的关系
四:数据库对比
Hive
RDBMS
查询语言
HQL
SQL
数据存储
HDFS
Raw Device or Local FS
执行
MapReduce
Excutor
执行延迟
高
低
处理数据规模
大
小
索引
0.8版本后加入位图索引
有复杂的索引
下面我以数据检索为需求,一步步的把这个用法说清楚(不是理论高度,呵呵,我也没有那个高度)
再次明确一下示例需求: 每天每小时网络上都有一批日志实时的入到hdfs中,例如你在hadoop命令查看如2013-11-30目录下的内容格式如
/home/data/ineternet/2013-11-30/00.log
/home/data/ineternet/2013-11-30/01.log
/home/data/ineternet/2013-11-30/02.log
.....
/home/data/ineternet/2013-11-30/23.log
我们需要可以随时查看某天某个时间的日志信息。
首先,需要创建对应的表,之后才能使用hive SQL来进行查询
而创建表中各项可以根据需要查看的信息进行定制,但在创建表之前需要将日志进行划分partition,这相当于把日志按某种条件分类索引以便按要求查询,
例如示例建表脚本如下:
cat hive.create.sh
#!/bin/bash
hivepath=/home/software/hive//bin
hadooppath=/home/software/hadoop//bin
dirs=$($hadooppath/hadoop fs -ls /home/data/internet/*)
addPartition=
for dir in $dirs
do
#echo $dir
if [[ `expr length $dir` -gt 10 ]]
then
day=`echo $dir|awk --posix -F'/' '{if ($5~/[0-9]{4}-[0-9]{2}-[0-9]{2}/){print $5}}'`
hour=`echo $dir|awk --posix -F'/' '{if ($6~/[0-9]{2}/){print $6}}'`
if [[ `expr length "$day"` -gt 0 && `expr length "$hour"` -gt 0 ]]
then
addPartition=$addPartition" alter table hive_table add partition (day='$day',hour='$hour') location '$dir';"
fi
fi
done
#echo $addPartition
##############################################################
$hivepath/hive << EOF
drop table hive_table;
create external table hive_table
(
time string,
host string,
pid string,
info string,
src string,
stage string,
key string,
ret string
)partitioned by (day string,hour string)
clustered by (key) into 32 buckets
row format delimited fields terminated by '\t'
lines terminated by '\n';
$addPartition
EOF
从上面的脚本可以看到两部分,上面部分是创建partition,即是将天和小时进行划分,下面是根据划分创建表hive_table
后面我们的查询也是基于这个hive_table表
待续
- hadoop之hive在数据检索中的用法
- hadoop之hive在数据检索中的用法 (2)
- hadoop学习之-hive-数据操作
- 配置hadoop HIVE元数据保存在mysql中
- hive在hadoop中的一个demo运行过程总结
- hadoop & hive任务优化之数据详情预知
- Hadoop之hive学习
- Hadoop之hive学习
- Hadoop之hive学习
- hadoop之hive部署
- hadoop学习之hive
- hadoop安装之-hive
- Hadoop之hive详解
- Hadoop之Hive学习
- Hadoop 之 hive 学习
- Hadoop组件之Hive
- hadoop-ha之Hive
- hadoop系列之hive
- 学cocos2dx是需要学习ios开发的
- 坚持记点东西年纪大了记不住了
- Vxworks下flash驱动编写流程 .
- 神马是敏捷?(1)——敏捷的“官方”定义
- package of python
- hadoop之hive在数据检索中的用法
- 单链表的主要一些算法
- hdu 3667 Transportation 费用流
- RH436之iSCSI 配置
- 第一次开博,纪念我那逝去的青春!
- SSDT索引号的获取
- Cocos2d-x教程(8)-遮罩层实现捕鱼达人滚动数字表盘
- (转)楼教主回忆录
- Working Practice-可以检查系统的三种方式