`
cloudtech
  • 浏览: 4578879 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

hive学习笔记1

 
阅读更多
Hive是构建在Hadoop的数据仓库平台,最初Hive被Facebook用来处理海量的用户和日志数据。利用Hive处理分析的数据一般满足结构化的特征,Hive基于MapReduce之上增加了优化和更可用性的特性,Hive把用户从复杂的MapReduce编程中解脱出来,Hive定义了类似于SQL的查询语言:HQL,Hive能够将HQL转换为相应的MapReduce程序,并在Hadoop平台上执行。

一、Hive的安装与启动

Hive的运行环境需要Jdk1.6、Hadoop0.17及以上版本,在这里我下载了hive-0.6.0.tar.gz。解压到/usr/local/hive,在环境变量中

Shell代码 收藏代码
  1. <spanstyle="font-size:medium;">HIVE_HOME=/usr/local/hive
  2. PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin</span>
  3. <spanstyle="font-size:medium;">
  4. </span>

首先,启动Hadoop,到HADOOP_HOME/bin下,执行start-all.sh,然后在命令行中输入hive,回车,就进入了Hive的执行界面:

二、HQL

create table 语句

第一行声明了一个名为user的一张表,该表包括两个字段id和name,分别为int和string类型。剩下的两行表示在存储user的数据的文件中每一行应该有三个字段,字段用tab键隔开,每行用回车隔开。

Load Data语句

将数据加载到user表中

通过上面的命令告诉Hive将sample.txt移动到hive的仓库目录(默认为/user/hive/warehouse)下面,在这个过程中不涉及到文件的解析,hive也不会按照特殊的格式来存储sample.txt。我们可以通过命令来浏览HDFS目录

select 语句

HQL的select操作和SQL非常相似,但是也有一些细微差别,这在以后会慢慢地讲到的

三、partitions and buckets

hive可以通过partitions将表粗粒度划分为不同的目录来提高查询的效率,例如包含时间戳的日志文件,如果我们按照时间来把日志文件分在不同的目录下,那么相同日期的记录就会存储在同一个分区目录下面,那我们就可以更高效率地查询特定某个时间的记录了。例如:

通过partitioned by声明的字段表面上和在普通的column没什么不一样的。如下所示:

不同之处在于,表并不存储通过partitioned by声明的字段,而是将不同字段的数据放在partitioned字段目录下面,通过路径来获得partitioned字段的值。所以在我们想partitioned 表中加载数据时,需要指明partitioned 字段的值,例如:

我们可以查看一个table的partitioned 情况:

为了是查询效率更高以及采样数据更方便,在Hive中引入了bucket的概念,首先来看一下如何产生一个bucketed的table。

首先需要将Hive的hive.enforce.bucketing属性设置为ture,然后加载数据:

下面我们来看一下bucketed_user 下的数据文件结构,包含了四个部分。

我们随便查看一个文件

可以看到id为1和5的记录被放进了同一个文件中,主要是应为我们设置了bucketed的参数为4,hive会按照id的hash值对4取模来确定存储的bucketed。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics