文档章节

Golang通过thrift连接Hive简单demo

DJZhu
 DJZhu
发布于 2017/09/06 17:15
字数 202
阅读 66
收藏 0
点赞 0
评论 0

网上关于golang操作hive的文章很少, 最近在用, 研究的过程中记一点代码片段.

package my_hive_cli

import (
	"..../hive/tcliservice"
	"git.apache.org/thrift.git/lib/go/thrift"
)

func NewClient(host string, username string, password string, dbname string) (*tcliservice.TCLIServiceClient, error) {
	transport, err := thrift.NewTSocket(host)
	if err != nil {
		return nil, err
	}
	if err := transport.Open(); err != nil {
		return nil, err
	}
	protocol := thrift.NewTBinaryProtocolFactoryDefault()
	client := tcliservice.NewTCLIServiceClientFactory(transport, protocol)

	openSessionReq := tcliservice.NewTOpenSessionReq()
	if username != "" {
		openSessionReq.Username = &username
		openSessionReq.Password = &password
	}
	openSessionReq.ClientProtocol = tcliservice.TProtocolVersion_HIVE_CLI_SERVICE_PROTOCOL_V5
	if dbname != "" {
		if openSessionReq.Configuration == nil {
			openSessionReq.Configuration = make(map[string]string)
		}
		openSessionReq.Configuration["use:"] = dbname
	}
	openSessionResp, err := client.OpenSession(openSessionReq)
	if err != nil {
		return nil, err
	}
	sessionHandler := openSessionResp.GetSessionHandle()

	exeReq := tcliservice.NewTExecuteStatementReq()
	exeReq.SessionHandle = sessionHandler
	exeReq.Statement = "SELECT COUNT(1) FROM default.test"
	exeResp, err := client.ExecuteStatement(exeReq)
	if err != nil {
		return nil, err
	}
	operationHandler := exeResp.GetOperationHandle()

	fetchReq := tcliservice.NewTFetchResultsReq()
	fetchReq.OperationHandle = operationHandler
	fetchReq.Orientation = tcliservice.TFetchOrientation_FETCH_FIRST
	fetchReq.MaxRows = 10
	fetchResp, err := client.FetchResults(fetchReq)
	if err != nil {
		return nil, err
	}
	res := fetchResp.GetResults().GetRows()
	for _,r := range res{
		row := r.GetColVals()
		for _, filed := range row {
			if filed.IsSetI64Val() {
				println("i64", filed.GetI64Val().GetValue())
			}
			if filed.IsSetI32Val() {
				println("i32", filed.GetI32Val().GetValue())
			}
		}
	}

	closeOperationReq := tcliservice.NewTCloseOperationReq()
	closeOperationReq.OperationHandle = operationHandler
	client.CloseOperation(closeOperationReq)
	closeSessionReq := tcliservice.NewTCloseSessionReq()
	closeSessionReq.SessionHandle = sessionHandler
	client.CloseSession(closeSessionReq)

	transport.Close()

	return client, nil
}

© 著作权归作者所有

共有 人打赏支持
DJZhu
粉丝 2
博文 26
码字总数 30442
作品 0
广州
程序员
通过hiveserver远程服务构建hive web查询分析工具

(1)hive 三种启动方式及用途,本文主要关注通过hiveserver(可jdbc连接)的方式启动 1, hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入 hive --service cli 用于linux平台...

xrzs ⋅ 2012/12/02 ⋅ 0

hive系列之懵懂

大数据时代的技术hive:hive介绍  首先我们要知道hive到底是做什么的。下面这几段文字很好的描述了hive的特性:   1.hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一...

空_明 ⋅ 2013/12/04 ⋅ 0

Golang通过Thrift框架完美实现跨语言调用

  每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。   做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用http协议简单,但性能不高。采用...

qinerg ⋅ 2013/09/29 ⋅ 18

Hive HA

hive让大数据飞了起来,不再需要专人写MR。平常我们都可以用基于thrift的任意语言来调用hive。 不过爱恨各半,hive的thrift不稳定也是出了名的。很容易就出问题,让人无计可施。唯一的办法就...

foxmoon ⋅ 2013/10/31 ⋅ 1

Hive 使用陷阱(Lock table) 排查过程

前言 业务部门使用python通过hive thrift api做数据统计,早段时间发现在频繁创建表的时候,接口会卡死。经过一番的排查,是因为hive的lock table manager特性对于hive server的接口服务不兼...

kisops ⋅ 2013/08/11 ⋅ 6

Hive 使用陷阱(Lock table) 排查过程

前言 业务部门使用python通过hive thrift api做数据统计,早段时间发现在频繁创建表的时候,接口会卡死。经过一番的排查,是因为hive的lock table manager特性对于hive server的接口服务不兼...

snakelxc ⋅ 2013/08/11 ⋅ 1

python通过thrift方式连接hive问题

根据某高手前辈的链接安装好thrift和相亲包,执行如下测试脚本出现无法连接的情况。 #!/usr/bin/env python import sys from hive_service import ThriftHive from hive_service.ttypes impo...

漫步夕阳 ⋅ 2013/02/28 ⋅ 2

Hive Fetch Task

show tables; metastore->>mysql; select * from bi.dpods_dp_unsubscribe where hp_statdate = '2015-03-22' limit 10; -》不起job select dpid from bi.dpodsdpunsubscribe where hpstatda......

rathan0 ⋅ 2016/01/15 ⋅ 0

Python 连接 hive 查询数据

[root@PROC_141 htt]# jps966 CassandraDaemon22070 NameNode2471 Jps22218 DataNode22426 SecondaryNameNode10763 Elasticsearch15019 ResourceManager22779 NodeManager2302 RunJar # 为 ......

MtrS ⋅ 2014/12/23 ⋅ 0

spark-submit.sh spark-shell.sh spark-sql.sh thrift

spark-submit.sh 提交spark任务 spark-shell.sh spark的交互命令窗口,底层其实还是使用spark-submit.sh提交了一个任务,但是driver programing可以和外界交互。spark-shell中已经实例化了s...

cjun1990 ⋅ 2016/04/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 23分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 47分钟前 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部