hive学习(转载)

     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. <span style="font-size: medium;">HIVE_HOME=/usr/local/hive  
  2. PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin</span>  
  3. <span style="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。


更多的学习资料见:http://phz50.iteye.com/blog/932373

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值