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

[经验分享] Hive的访问接口 | Allen's World

[复制链接]

尚未签到

发表于 2017-3-1 07:40:40 | 显示全部楼层 |阅读模式
  Hive的访问接口 | Allen's World
Hive的访问接口

  Hive提供了三种客户端访问接口:
  1)Hive CLI(Hive Command Line,Hive命令行),客户端可以直接在命令行模式下进行操作。
  2)hwi(Hive Web Interface,Hive Web接口),Hive提供了更直观的Web界面
  3)hiveserver,Hive提供了Thrift服务,Thrift客户端目前支持C++/Java/PHP/Python/Ruby。
  下面我们来分别尝试下这三种接口访问方式:
  一、Hive CLI
  直接键入hive命令即可进入CLI模式:
[cloud@cloud01 lib]$ hive
Hive history file=/tmp/cloud/hive_job_log_cloud_201110311056_1009535967.txt
hive> show tables;
OK
testhivedrivertable
Time taken: 3.038 seconds
hive> select * from testhivedrivertable;
OK
Time taken: 0.905 seconds
hive> quit;
[cloud@cloud01 lib]$  更多的命令选项,参见官方wiki,Hive Cli
  二、Hive hwi
  Hive hwi提供了一个更直观的web界面,使用起来更方便。
  1)启动hive hwi
[cloud@cloud01 ~]$ hive --service hwi
11/10/31 10:14:11 INFO hwi.HWIServer: HWI is starting up
11/10/31 10:14:11 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
11/10/31 10:14:11 INFO mortbay.log: jetty-6.1.14
11/10/31 10:14:11 INFO mortbay.log: Extract jar:file:/data/cloud/hive-0.7.1/lib/hive-hwi-0.7.1.war!/ to /tmp/Jetty_0_0_0_0_9999_hive.hwi.0.7.1.war__hwi__.hf8ccz/webapp
11/10/31 10:14:12 INFO mortbay.log: Started SocketConnector@0.0.0.0:9999  2)通过hwi方式访问Hive
  我的Hive部署在10.46.169.101机器上,hive默认hwi端口为9999。我们在浏览器中键入http://10.46.169.101:9999/hwi/ 就可以访问了。如图:

  更多hwi的信息,访问官方wiki,hwi
  三、hiveserver
  Hive以Thrift方式作为服务对客户端提供,目前Hive的Thrift绑定了多种语言,C++/Java/PHP/Python/Ruby,可在Hive发行版本的src/service/src目录下找到这些语言的Thrift绑定。Hive还提供了JDBC和ODBC的驱动,大大方面了基于Hive的应用开发。我利用官方的例子对JDBC驱动进行了测试。
  1)启动hiveserver
[cloud@cloud01 ~]$ hive --service hiveserver
Starting Hive Thrift Server  2)在Eclipse中新建一个Java工程Hive0.7.1Test
  3)将$HIVE_HOME/lib目录下的jar包加到工程的buildpath里
  4)Hive的表是存储在HDFS上,所以,需要加载Hadoop的核心jar包。我的Hadoop版本是0.20.1。
  5)新建一个class,用官方wiki提供的代码,如下:
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
public class HiveJdbcClient {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
/**
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
try {
Class.forName(driverName);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(1);
}
Connection con = DriverManager.getConnection(
"jdbc:hive://10.46.169.101:10000/default", "", "");
Statement stmt = con.createStatement();
String tableName = "testHiveDriverTable";
stmt.executeQuery("drop table " + tableName);
ResultSet res = stmt.executeQuery("create table " + tableName
+ " (key int, value string)");
// show tables
String sql = "show tables '" + tableName + "'";
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
if (res.next()) {
System.out.println(res.getString(1));
}
// describe table
sql = "describe " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1) + "\t" + res.getString(2));
}
// load data into table
// NOTE: filepath has to be local to the hive server
// NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
String filepath = "/tmp/a.txt";
sql = "load data local inpath '" + filepath + "' into table "
+ tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
// select * query
sql = "select * from " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)) + "\t"
+ res.getString(2));
}
// regular hive query
sql = "select count(1) from " + tableName;
System.out.println("Running: " + sql);
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1));
}
}
}
6)编译运行,console如下:
<div>2011-10-31 11:21:31,703 WARN  [main] conf.Configuration(175): DEPRECATED: hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated. Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to override properties of core-default.xml, mapred-default.xml and hdfs-default.xml respectively</div>
<div>Running: show tables 'testHiveDriverTable'</div>
<div>testhivedrivertable</div>
<div>Running: describe testHiveDriverTable</div>
<div>keyint</div>
<div>valuestring</div>
<div>Running: load data local inpath '/tmp/a.txt' into table testHiveDriverTable</div>
<div>Exception in thread "main" java.sql.SQLException: Query returned non-zero code: 10, cause: FAILED: Error in semantic analysis: Line 1:23 Invalid path '/tmp/a.txt': No files matching path file:/tmp/a.txt</div>
<div>at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:192)</div>
<div>at com.zte.allen.hive.HiveJdbcClient.main(HiveJdbcClient.java:53)</div>
报了一个Exception,是因为加载源是找不到/tmp/a.txt。这个不影响,但可以从hwi里看到已经新建了一个表testhivedrivertable。
更多关于hiveserver的内容,参见官方wiki Setting up Hive Server, 还有这里介绍了各种客户端(cli、Java、PHP、Python、ODBC、Thrift方式等)如何访问Hive。

运维网声明 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-348516-1-1.html 上篇帖子: 转载:android开源项目汇总 下篇帖子: 转 ofbiz瘦身[已验证,9.04-11.04 稍作修改可用]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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