设为首页 收藏本站
查看: 878|回复: 0

[经验分享] Apache Hive入门1

[复制链接]

尚未签到

发表于 2017-1-2 10:11:59 | 显示全部楼层 |阅读模式
  作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 
网址: http://www.javabloger.com/article/apache-hive-jdbc-mapreduce.html

     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 任务)。
如图所示:
http://niaklq.bay.livefilestore.com/y1p39tH8RNAJRC8lySjKaHkYyWuve4wpEs9xnoDe7kDFjzFq5GVGiBp6nm8m18Zw9u8nBc0nimE6QPsvuwEpGsunLxupEeb143X/hive-Architecture.png?psid=1
Hive 元数据存储
    Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库:
    Single User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test,如图1
                             http://niaklq.bay.livefilestore.com/y1pEwbWE7P0yp0mkGFBvOCf9tSlB6fTaAqHtkT1Wl8jMy6zh0EiVUGz87d38j6X0c0xjbwERICDMTgedEVCRFjuPjNr0CwfkoQ9/hive-datameta-1.png?psid=1
   Multi User Mode:通过网络连接到一个数据库中,是最经常使用到的组合模式,如图2
                             http://public.bay.livefilestore.com/y1pt89rdMljSObnG7mRasW69ARgyk19j3h51xf5-oM8E5qPo9Nkxx8EtV4QGnG_pLDkR2QWOCqpYJD5BkXg3aVXlQ/hive-datameta-2.png?psid=1
   Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 这个东东 通过 MetaStoreServer 访问元数据库。如图3
                            http://public.bay.livefilestore.com/y1pYHOwmGWzR9b0tUUbBT4y2YL3upNBxbZGAlxSpA5wNLE777XZFT7PqmOySz_1cJXxj5_xo10xLRLwp2v3fUWC7g/hive-datameta-3.png?psid=1
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–

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322742-1-1.html 上篇帖子: Apache Maven入门篇(上) 下篇帖子: Apache Ant 快速参考手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表