由于实验的须要,这两天就搭了个Hive,简单记录一下:

平台:OS:Ubuntu Kylin 14.04

   JAVA:Java 1.8.0_25

   HADOOP:Hadoop 2.4.0

   HIVE:Hive 0.14.0

  有关Hive的安装这里就不说了,Hive配置好后,直接在安装目录下起动hive(记得先启动Hadoop哈,不然会报错),看着网上的教程简单的试用下;

  1. create table test(key int, name string) row format delimited fields terminated by ',' lines terminated by '\n';
  2. load data local inpath '/home/liang/test.txt' overwrite into table test;
  3. select * from test;
  4. show tables;
  5. show databases;
  6. desc test;

  看着官网语言手册一顿乱试,感觉好数据库里的命令都好像啊!有关hive都支持什么样的语句及语句怎么写,官网语言手册上写的很详细,好像说从0.14开始支持ACID了,想学习还是啃下英文的手册比较好点,我只是大概看了下。

  有事关机,回来重启,在用户主目录下启动hive,发现关机前create的表不见了,开始怀疑是不是自己的配置没配好呢,重新看了看配置,没错啊。还好在网上看到了hive使用derby作为元数据库找不到所创建表的原因这个帖子,原来是因为我使用的是默认元数据库derby,元数据库是存放在hive的启动目录的,其实如果你细心就会发现,在hive的启动目录下多了一个目录metastore_db和一个日志文件derby.log。当你换个目录启动hive时,derby在当前目录下就找不到以前的元数据库了,只好重建,所以会出现在HDFS上可以看到以前建的文件,但在hive中就是看不见的。所以,要想常用hive还是建议使用MySQL存放元数据吧,而且使用MySQL可以让多用户使用Hive。

  下面进正题,说说使用JDBC连接hiveservice的事:

  打开终端,先看看帮助文档是怎么说的,

  1. liang@liang-pc:/opt/apache-hive-0.14.-bin$ hive --help
  2. Usage ./hive <parameters> --service serviceName <service parameters>
  3. Service List: beeline cli help hiveburninclient hiveserver2 hiveserver hwi jar lineage metastore metatool orcfiledump rcfilecat schemaTool version
  4. Parameters parsed:
  5. --auxpath : Auxillary jars
  6. --config : Hive configuration directory
  7. --service : Starts specific service/component. cli is default
  8. Parameters used:
  9. HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory
  10. HIVE_OPT : Hive options
  11. For help on a particular service:
  12. ./hive --service serviceName --help
  13. Debug help: ./hive --debug --help

  从上面的输出的第二行可以看到hive的用法是:./hive <parameters> --service serviceName <service parameters>

  从上面的输出的第三行可以看到可用的service有很多,我们这次要用的是hiveserver和hiveserver2

  从上面的输出的第12行可以看到,想了解特定service的详细帮助的命令是:./hive --service serviceName --help

  在终端输入依次输入hive --service hiveserver --help和hive --service hiveserver2

  1. liang@liang-pc:/opt/apache-hive-0.14.-bin$ hive --service hiveserver --help
  2. Starting Hive Thrift Server
  3. usage: hiveserver
  4. -h,--help Print help information
  5. --hiveconf <property=value> Use value for given property
  6. --maxWorkerThreads <arg> maximum number of worker threads,
  7. default:
  8. --minWorkerThreads <arg> minimum number of worker threads,
  9. default:
  10. -p <port> Hive Server port number, default:
  11. -v,--verbose Verbose mode
  12.  
  13. liang@liang-pc:/opt/apache-hive-0.14.-bin$ hive --service hiveserver2 --help
  14. usage: hiveserver2
  15. --deregister <versionNumber> Deregister all instances of given
  16. version from dynamic service discovery
  17. -H,--help Print help information
  18. --hiveconf <property=value> Use value for given property

  从上面的输出只能看到两个service的使用配置和一些默认值,那有关两者的区别和详细说明只好去官网找找HiveServerHiveServer2了。果然说的比较详细,HiveServer2是HiveServer的升级,且在hive 0.15后,HiveServer将会被移除。原话是:


WARNING!

HiveServer cannot handle concurrent requests from more than one client. This is actually a limitation imposed by the Thrift interface that HiveServer exports, and can't be resolved by modifying the HiveServer code.

HiveServer2 is a rewrite of HiveServer that addresses these problems, starting with Hive 0.11.0. Use of HiveServer2 is recommended.

HiveServer is scheduled to be removed from Hive releases starting Hive 0.15. See HIVE-6977. Please switch over to HiveServer2.


  hive服务启动后,就使用JDBC来写程序了,这个和数据库就更想了,直接上代码,

  1. package hive;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.Statement;
  7.  
  8. public class HiveService {
  9.  
  10. public static void main(String[] args) throws Exception
  11. {
  12. Connection conn = null;
  13. /*
  14. * 使用hiveserver时的配置
  15. * 其中URL的写法是:jdbc:hive://ip:port/db
  16. * ip是hiveserver所在的机器ip,port是hiveserver的服务端口,db是数据库名字,后面还有用户名和密码,
  17. * 这都和其他的数据库的JDBC一样
  18. */
  19. // Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver");
  20. // conn = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");
  21.  
  22. /*
  23. * 使用hiveserver2时的配置
  24. * 与hiveserver比较,只有要加载的类和URL的写法有一点点的不同,其他的都不用改
  25. */
  26. Class.forName("org.apache.hive.jdbc.HiveDriver");
  27. conn = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", "");
  28.  
  29. Statement stat = conn.createStatement();
  30. ResultSet rs = stat.executeQuery("select * from test");
  31. // ResultSet rs = stat.executeQuery("show tables");
  32. // ResultSet rs = stat.executeQuery("show databases");
  33. // ResultSet rs = stat.executeQuery("desc test");
  34. while (rs.next())
  35. {
  36. System.out.println(rs.getString(1) + "\t" + rs.getString(2));
  37. }
  38. }
  39. }

  所依赖的jar包有:${HIVE_HOME}/lib/hive-jdbc-0.14.0-standalone.jar和${HADOOP_HOME}/share/hadoop/common/hadoop-common-2.4.0.jar

  当使用hiveserver时,可能是我的hive版本和hadoop版本不对应,会报以下错误,而hiveserver2却不会。

  1. Exception in thread "main" java.lang.ExceptionInInitializerError
  2. at org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.initSerdeParams(LazySimpleSerDe.java:318)
  3. ......
  4. at hive.HiveService.main(HiveService.java:16)
  5. Caused by: java.lang.RuntimeException: Could not load shims in class org.apache.hadoop.hive.shims.Hadoop23Shims
  6. at org.apache.hadoop.hive.shims.ShimLoader.createShim(ShimLoader.java:138)
  7. ......
  8. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.shims.Hadoop23Shims
  9. at java.net.URLClassLoader$1.run(URLClassLoader.java:372)

  由于hiveserver2可以正常运行,且hiveserver是将要被移除的,就没查找错误的具体原因,有了解的可给我说下。

  还有一点要注意的是,在我的电脑上测试时,SQL语句后面不要以";"结尾,不然会报错,ResultSet.getString(String columnLabel)会出错。

更详细的有关JDBC的使用请参考:

HiveServer1:https://cwiki.apache.org/confluence/display/Hive/HiveClient

HiveServer2:https://cwiki.apache.org/confluence/display/Hive/HiveServer2%20Clients#HiveServer2Clients-UsingJDBC

hiveservice简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. vue源码解读-目录结构

    目录结构 ├── scripts ------------------------------- 构建相关的文件,一般情况下我们不需要动│ ├── git-hooks ---------------- ...

  2. Eclipse创建jsp web项目

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse 附带了一个标准的插件集,包括Java开 ...

  3. PHP基础-生成静态html页面原理是怎样

    设置example.html为模板文件,然后按照此模板文件生成article-1.html~article-5.html,以此来做简单的演示,代码如下: <?php//将数据存入二维数组$con ...

  4. JavaScript--封装好的运动函数+旋转木马例子

    封装好的运动函数: 1.能控制目标元素的多种属性 2.能自动获取元素的样式表: 3.获取样式函数兼容 4.能对于元素的多属性进行动画(缓动动画)修改 5.能区分透明度等没单位的属性和px属性的变化 a ...

  5. 洛谷1602 Sramoc问题

      刚看到这道题的时候感觉像spfa. 然后发现其实bfs就可以做了. //Serene #include<algorithm> #include<iostream> #inc ...

  6. nodeJs学习-09 模板引擎 jade、ejs

    模板引擎: jade -破坏式.侵入式,强依赖:用了之后不能随便用别的引擎 ejs - 温和.非侵入时.弱依赖 jade使用 const jade = require('jade'); var str ...

  7. 序列化方案选型对比 - JSON/ProtocolBuffer/FlatBuffer/DIMBIN

    4千字长文预警!! 背景 JSON/XML不好吗? 好,再没有一种序列化方案能像JSON和XML一样流行,自由.方便,拥有强大的表达力和跨平台能力.是通用数据传输格式的默认首选.不过随着数据量的增加和 ...

  8. Vue指令:v-for的用法;v-bind绑定class的几种写法;tab标签切换

    一.v-for 的用法 循环指令,可以遍历 Number.String.Object.Array: 循环数字.字符串:有2个参数,分别是value和索引值: 循环对象:有3个参数,分别是 属性值.属性 ...

  9. jquery( 点击按钮出来文本框并限制文本框的个数)

    // 首先呢  编辑这个文章  主要是用于和大家的交流  以便学习和交流!! <div class="form-group" id="spots"> ...

  10. golang micro client 报错500 {"id":"go.micro.client","code":408,"detail":"call timeout: context deadline exceeded","status":"Request Timeout"}

    go micro web端连接services时,第一次访问提示500(broken pipe),排查发现客户端请求services时返回 {"id":"go.micro ...