GoHive:支持SASL的go语言Hive客户端

原创 2017年12月29日 17:02:46

简介

https://github.com/lwldcr/gohive

花了一周时间才调通,看log配合Hive的源码一步步debug相当费事,基本是按照pyhs2来实现的,支持SASL协议Plain模式,其他模式看后续是否需要酌情增加。客户端、查询操作返回数据还可以进一步封装,提供更便捷的使用,后面再更新吧。

欢迎试用、反馈。

GoHive

A hive client with SASL support based on thrift.

Usage

package main

import (
    "fmt"
    "tcliservice"
    "github.com/lwldcr/gohive"
    "os"
)

func main() {
    // first build a new transport
    // of course we can wrap all these routine operations into functions for repeatedly using
    t, err := gohive.NewTSaslTransport(HIVE_HOST, PORT, HIVE_USER, HIVE_PASSWD)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // now open it
    if err := t.Open(); err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // then you get a session, and you can execute query now
    sessionHandler := t.Session
    execReq := tcliservice.NewTExecuteStatementReq()
    execReq.SessionHandle = sessionHandler
    execReq.Statement = "show databases"
    execResp, err := t.Client.ExecuteStatement(execReq)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // fetch result after executing
    operationHandler := execResp.GetOperationHandle()
    fetchReq := tcliservice.NewTFetchResultsReq()
    fetchReq.OperationHandle = operationHandler
    fetchReq.Orientation = tcliservice.TFetchOrientation_FETCH_FIRST
    fetchReq.MaxRows = 10
    fetchResp, err := t.Client.FetchResults(fetchReq)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    // there you get your data
    data := make([]string, 0)
    res := fetchResp.GetResults().GetRows()
    for _,  r := range res {
        row := r.GetColVals()
        for _, field := range row {
            data = append(data, field.GetStringVal().GetValue())
        }
    }


    fmt.Println("data:", data)

    // do cleaning
    closeOperationReq := tcliservice.NewTCloseOperationReq()
    closeOperationReq.OperationHandle = operationHandler
    t.Client.CloseOperation(closeOperationReq)
    t.Close()
}
版权声明:转载请署名 欢迎联系博主

go语言实现http服务端与客户端

go语言的net/http包的使用非常的简单优雅 (1)服务端 package main import ( "flag" "fmt" "net/http" ) func main() { ...
  • u010087712
  • u010087712
  • 2016年03月15日 10:03
  • 4638

hive2 自定义验证登录

本人也是刚学习hadoop/hive, 很多问题在探索中, 目前就遇到了一个测试hive自定义登录验证的问题. 先说下场景, hadoop2.7.0 已部署好, 写的程序也能运算出正确的结果, 现在...
  • system1024
  • system1024
  • 2016年07月19日 15:28
  • 2522

HiveServer2的客户端

hiveserver2的客户端使用 hive的数据类型 hive的各种url连接 hive python hive ruby hive的认证...
  • wangqi880
  • wangqi880
  • 2016年01月23日 14:58
  • 3813

GO语言通过Thrift服务器和客户端通信(经典)

  • 2015年04月13日 10:07
  • 443KB
  • 下载

[GoLang]GO语言编写的简易TCP服务端、客户端

客户端程序: package main import ( "net" "os" "fmt" "io" ) //缓冲区大小 const BUFFSIZE = 1024 //定义消息缓冲区...
  • u011229962
  • u011229962
  • 2014年04月01日 19:01
  • 2067

Go语言网络编程示例-客户端篇

// occlient project main.go package main import ( "crypto/md5" "encoding/hex" "flag" "log" "os...
  • wangningyu
  • wangningyu
  • 2014年04月03日 11:38
  • 2149

Redis Go语言客户端指南

Redigo, 官方推荐的Redis Go语言客户端,其功能、用法及实现原理介绍。
  • apparchitect
  • apparchitect
  • 2016年10月07日 21:58
  • 275

Memcached协议解析及Go语言客户端实现

前段时间在一个go语言项目中用到memcached,在githup找到github.com/bradfitz/gomemcach,beego的cache中也用的这个,但是发现它只能存储最终的bytes...
  • qp2624
  • qp2624
  • 2016年03月22日 23:46
  • 3665

用jest客户端将数据从hive导入elasticsearch

  • 2015年05月19日 16:59
  • 22.35MB
  • 下载

以太坊连载(十):以太坊GO、JAVA、PYTHON、RUBY、JS客户端介绍

go-ethereum go-ethereum客户端通常被称为geth,它是个命令行界面,执行在Go上实现的完整以太坊节点。通过安装和运行geth,可以参与到以太坊前台实时网络并进行以下操作: ...
  • waysoflife
  • waysoflife
  • 2017年06月20日 09:08
  • 1484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GoHive:支持SASL的go语言Hive客户端
举报原因:
原因补充:

(最多只允许输入30个字)