您好,欢迎访问一九零五行业门户网

Apache Hive入门1

hive是hadoop项目中的一个子项目,由facebook向apache基金会贡献,其中taobao也是其中一位使用者+贡献者,hive被视为一个仓库工具,可以将结构化的数据文件映射为一张数据库表,并可以将sql语句转换为 mapreduce 任务进行运行。 其优点是学习成本低,可以通
   hive是hadoop项目中的一个子项目,由facebook向apache基金会贡献,其中taobao也是其中一位使用者+贡献者,hive被视为一个仓库工具,可以将结构化的数据文件映射为一张数据库表,并可以将sql语句转换为 mapreduce 任务进行运行。 其优点是学习成本低,可以通过类sql语句快速实现简单的mapreduce统计,不必开发专门的mapreduce应用,十分适合数据仓库的统计分析。
hive主要分为以下几个部分:
    1.用户接口
       用户接口主要有三个:命令行(cli),客户端(client) 和 web界面(wui)。其中最常用的是 cli,启动的时候,会同时启动一个 hive 服务。client 是 hive 的客户端,用户连接至 hive server。在启动 client 模式的时候,需要指出 hive server 所在节点,并且在该节点启动 hive server。 wui 是通过浏览器访问 hive的web工具。
   2.元数据存储
       hive 将元数据存储在数据库中,如 mysql或者derby嵌入式数据库。若将元数据存储在mysql中,在tbls中可以看见你建立的所有表信息,hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
   3. 执行
    解释器、编译器、优化器完成 hql 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 hdfs 中,并在随后有 mapreduce 调用执行。
   4. hdfs存储
    hive 的数据存储在 hdfs 中,大部分的查询由 mapreduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 mapredcue 任务)。
如图所示:
hive 元数据存储
    hive 将元数据存储在 rdbms 中,有三种模式可以连接到数据库:
    single user mode: 此模式连接到一个 in-memory 的数据库 derby,一般用于 unit test,如图1
multi user mode:通过网络连接到一个数据库中,是最经常使用到的组合模式,如图2
remote server mode:用于非 java 客户端访问元数据库,在服务器端启动一个 metastoreserver,客户端利用 thrift 这个东东 通过 metastoreserver 访问元数据库。如图3
hive 的启动方式
    hive  命令行模式,直接输入/hive/bin/hive的执行程序,或者输入 hive –service cli
    hive  web界面的启动方式,hive –service hwi 
    hive  远程服务 (端口号10000) 启动方式,nohup hive –service hiveserver  &
hive的sql
建表
    create table javabloger (foo int, bar string); 
插入
    load data local inpath '/work/hive/examples/files/kv1.txt' overwrite into table javabloger;
查询
    select a.* from javabloger a;
hive使用mysql存放元数据
    可以参考一下这篇文章
    http://www.mazsoft.com/blog/post/2010/02/01/setting-up-hadoophive-to-use-mysql-as-metastore.aspx 
    别忘了下载 mysql 的jdbc驱动,推荐下载 mysql-connector-java-5.1.11.tar.gz
hive 与 jdbc
导入hive\lib下的所有jar包到ide的classpath里面,还有hadoop中的 hadoop-0.20.2-core.jar包,即可运行下列代码:
package com.javabloger.hive;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.resultset;
import java.sql.statement;
public class hivetestcase {
    public static void main(string[] args) throws  exception {
        class.forname(org.apache.hadoop.hive.jdbc.hivedriver);
string dropsql=drop table javabloger;
        string createsql=create table javabloger (key int, value string);
        string instersql=load data local inpath '/work/hive/examples/files/kv1.txt' overwrite into table javabloger;
        string querysql=select a.* from javabloger a;
connection con = drivermanager.getconnection(jdbc:hive://192.168.20.213:10000/default, , );
        statement stmt = con.createstatement();
        stmt.executequery(dropsql);  // 执行删除语句
        stmt.executequery(createsql);  // 执行建表语句
        stmt.executequery(instersql);  // 执行插入语句
        resultset res = stmt.executequery(querysql);   // 执行查询语句
while (res.next()) {
            system.out.println(result: key:+res.getstring(1) +  –>  value: +res.getstring(2));
        }
    }
}
hadoop学习之旅正在进行中,正在走向hive的路上,目前只对hive一些简单的操作和整体结构有所了解,更深入的知识正在学习ing。。。。
相关文章:
hive入门3–hive与hbase的整合
apache hive入门2
apache hive入门1
–end–
原文地址:apache hive入门1, 感谢原作者分享。
其它类似信息

推荐信息