原来MaxCompute还能这么玩系列(2)—— 利用HiveServer2 Proxy实现MaxCompute与Hive生态工具的互通

注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分

什么是Hive

Hive是一款经典的hadoop技术栈的数仓软件,可以让用户采用SQL来完成大数据量的计算分析。如果你对Hive还不熟悉,请移步Apache Hive官网获取进一步了解。MaxCompute在很多功能上与Hive相近,所以大部分MaxCompute的用户曾经也是Hive的用户。

什么是HiveServer2

既然提到HiveServer2,那得先介绍一下HiveServer1,我们通常也直接称之为HiveServer。HiveServer是基于Apache Thrift构建的一套服务,它支持远程客户端通过Thrift API向Hive提交请求。由于HiveServer1无法处理超过一个以上客户端的并发请求,所以社区对HiveServer1进行了重写,从而解决了HiveServer1中存在的诸多问题,该重写后的新版本我们称之HiveServer2。

由于HiveServer2本质上是一个Thrift Server,所以天然拥有跨语言的支持,而大量的Hive生态的工具也是基于HiveServer2的Thrift API实现的,比如最常见的Hive ODBC和Hive JDBC,以及基于这两套实现之上的其他工具。

什么是HiveServer2 Proxy

顾名思义,HiveServer2 Proxy是一个代理,它是在原有HiveServer2的基础之上定制开发后得到的。它完成的工作就是接受客户端提交的的Thrift请求,将其反序列化并转换成MaxCompute能够识别的请求,然后提交给MaxCompute处理,并在MaxCompute处理完后将响应再次转换成客户端能够识别的符合Hive接口规范的Thrift响应,从而实现Hive生态工具到MaxCompute的互通。简而言之,它的功能就是在用户无需修改Hive生态工具的情况下,为这些工具与MaxCompute的交互提供了一条通路,从而使我们能在复用已有的Hive工具的同时,也能使用上MaxCompute强大的计算引擎。

HiveServer2 Proxy的原理图如下所示:

下面我们将通过两个实例来演示HiveServer2 Proxy的功效。

部署HiveServer2 Proxy

首先,部署HiveServer2 Proxy的前置条件是安装好Java1.7和hadoop2.x(如果你不想安装hadoop也可以跳过这一步),此处不做赘述,请参考这两者的官方文档。笔者在以下内容中将以MacBook PRO的OS X来作为演示系统。其他操作系统的用户在配置上大同小异。

确保前置条件满足后,请下载HiveServer2 Proxy的测试版。

将下载到的压缩包解压,得到名为apache-hive-2.1.0-odps-proxy的文件夹。设置好HIVE_HOME环境变量,如笔者的配置:

emerson@192.168.31.104   /Users/emerson/apache-hive-2.1.0-odps-proxy
% export HIVE_HOME=$(pwd)
emerson@192.168.31.104   /Users/emerson/apache-hive-2.1.0-odps-proxy
% echo $HIVE_HOME
/Users/emerson/apache-hive-2.1.0-odps-proxy

如果你安装了hadoop请配置环境变量HADOOP_HOME,如果跳过没有安装的,可以使用proxy自带的hadoop依赖,即根目录下的hadoop目录。可以在根目录下执行如下命令:

emerson@192.168.31.104   /Users/emerson/apache-hive-2.1.0-odps-proxy
% export HADOOP_HOME=$(pwd)/hadoop

完成环境变量的配置之后进入根目录下的conf文件夹,修改hive-site.xml中的相关配置项,样例如下所示,其中每一项的说明已在description标签中有所描述:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hive.execution.engine</name>
    <value>odps</value>
    <description>hive执行引擎,此处默认是odps,不需要修改</description>
  </property>
  <property>
    <name>hive.session.impl.classname</name>
    <value>org.apache.hive.service.cli.session.HiveSessionOdpsImpl</value>
    <description>HiveSession的的odps plugin实现,不需要修改</description>
  </property>
  <property>
    <name>odps.accessid</name>
    <value>abcdefg</value>
    <description>请修改成你的accessid</description>
  </property>
  <property>
    <name>odps.accesskey</name>
    <value>123456789=</value>
    <description>请修改成你的accesskey</description>
  </property>
  <property>
    <name>odps.project</name>
    <value>odpsdemo</value>
    <description>请修改成你的默认project</description>
  </property>
  <property>
    <name>odps.projects</name>
    <value>odpsdemo</value>
    <description>请修改成你的project列表,如果有多个,请以半角逗号分隔,该配置会在show schemas时生效</description>
  </property>
  <property>
    <name>odps.endpoint</name>
    <value>https://service.odps.aliyun.com/api</value>
    <description>默认odps endpoint,不需要修改</description>
  </property>
  <property>
    <name>hive.server2.thrift.port</name>
    <value>20000</value>
    <description>HiveServer2 Thrift Server以binary方式启动时服务端口,可以酌情修改,以免端口冲突</description>
  </property>
  </configuration>

对于大部分用户来说,只需要修改odps.accessid、odps.accesskey、odps.project及odps.projects四项即可,其余项可以保留默认配置。如果20000端口已被占用,可以通过hive.server2.thrift.port更换端口配置。

完成相关配置之后,请回到根目录,执行bin/hiveserver2启动proxy。

emerson@192.168.31.104   /Users/emerson/apache-hive-2.1.0-odps-proxy
% bin/hiveserver2
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/emerson/apache-hive-2.1.0-odps-proxy/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
4a5f92fce28a [INFO] ODPS JDBC driver, Version 1.9
4a5f92fce28a [INFO] endpoint=https://service.odps.aliyun.com/api, project=odpsdemo

可以通过查看日志来确定服务是否启动成功,如下所示:

emerson@192.168.31.104   /Users/emerson
% tail -f /tmp/$USER/hive.log
2016-10-04T17:50:42,048  INFO [main] service.AbstractService: Service:HiveServer2 is started.
2016-10-04T17:50:42,057  INFO [main] server.Server: jetty-7.6.0.v20120127
2016-10-04T17:50:42,108  INFO [Thread-5] thrift.ThriftCLIService: Starting ThriftBinaryCLIService on port 20000 with 5...500 worker threads
2016-10-04T17:50:42,110  INFO [main] webapp.WebInfConfiguration: Extract jar:file:/Users/emerson/apache-hive-2.1.0-odps-proxy/lib/hive-service-2.1.0.jar!/hive-webapps/hiveserver2/ to /private/var/folders/nl/l2z8dnvd51d12nvtwhzzsxjr0000gn/T/jetty-0.0.0.0-10002-hiveserver2-_-any-/webapp
2016-10-04T17:50:42,276  INFO [main] handler.ContextHandler: started o.e.j.w.WebAppContext{/,file:/private/var/folders/nl/l2z8dnvd51d12nvtwhzzsxjr0000gn/T/jetty-0.0.0.0-10002-hiveserver2-_-any-/webapp/},jar:file:/Users/emerson/apache-hive-2.1.0-odps-proxy/lib/hive-service-2.1.0.jar!/hive-webapps/hiveserver2
2016-10-04T17:50:42,311  INFO [main] handler.ContextHandler: started o.e.j.s.ServletContextHandler{/static,jar:file:/Users/emerson/apache-hive-2.1.0-odps-proxy/lib/hive-service-2.1.0.jar!/hive-webapps/static}
2016-10-04T17:50:42,311  INFO [main] handler.ContextHandler: started o.e.j.s.ServletContextHandler{/logs,file:/private/tmp/emerson/}
2016-10-04T17:50:42,336  INFO [main] server.AbstractConnector: Started SelectChannelConnector@0.0.0.0:10002
2016-10-04T17:50:42,338  INFO [main] server.HiveServer2: Web UI has started on port 10002
2016-10-04T17:50:42,338  INFO [main] http.HttpServer: Started HttpServer[hiveserver2] on port 10002

如果所有服务正常启动,没有报任何异常,则表明proxy已经部署成功。

示例1:复用Hive ODBC实现Tableau到MaxCompute的连通

Tableau简介

Tableau是一款商用的BI分析软件,它支持添加各种类型的数据源以供数据分析之用,包括Oracle、MySQL以及Hive等。同时它也提供了丰富酷炫的可视化功能。我们将选择Tableau Desktop来演示其通过HiveServer2是如何与MaxCompute互通的,本次演示的Tableau演示系统是Windows 7。

环境准备

从官网下载Tableau Desktop试用版并进行安装。

打开Tableau后首先需要新建数据源,由于我们需要连接的是HiveServer2,所以需要新建一个连接到Hive的数据源。在Tableau 9.3中,支持三种Hive数据源,分别对接的是来自Cloudera、Hortonworks及MapR的Hive发行版。

用户可以配置任意一家的Hive数据源来进行尝试,但是请事先安装对应厂商的Hive ODBC驱动。相应的驱动请在Tableau官方的驱动页面查找。下载并安装完Hive ODBC驱动后请重启Tableau,接着我们以Hortonworks Hadoop Hive为例来进行后续的演示。

演示

根据HiveServer2 Proxy所在的IP及配置的端口来完成Hive数据源的配置,如下如图:

其中“类型“选择HiveServer2,“身份验证”选择用户名密码,“用户名”和“密码”随便填,但是必须要有值,而真正的身份验证走的accessId和accessKey。完成配置后按“确定”按钮。

正常情况下,我们将顺利连接上HiveServer2 Proxy,并进入Tableau的工作簿页面。然后在“架构“处选择我们的project,并点击“放大镜”图标罗列出所有table。如图所示:

可以选择一张表,并点击表名后的“查看数据”按钮,Tableau就会开始查询数据了:

也可以选择“新自定义SQL”,并输入自定义的MaxCompute SQL查询语句,并进而在工作表页面通过“智能显示”来完成数据的可视化处理,如下图所示:

通过以上演示,已经向你展示了通过HiveServer2 Proxy,Tableau可以以Hive数据源的方式通过Hive的ODBC直接连接到MaxCompute,并完成对MaxCompute数据的查询和分析,更多Tableau的功能请访问其官网获取进一步了解。

示例2:复用Hive JDBC实现Beeline到MaxCompute的连通

Beeline简介

Beeline是用以替换Hive CLI的专门针对HiveServer2推出的Hive命令行工具,而其本质上也是一个Hive的JDBC客户端。通过Beeline我们可以完成对Hive的一些基本操作及SQL查询。

环境准备

Hive Beeline是随Hive一起发布的,所以可以使用Hive 2.x以上的发行版来进行尝试。而HiveServer2 Proxy的压缩包里就包含了beeline,我们可以直接使用它来进行演示。

演示

进入Hive的根目录,必要情况下配置HIVE_HOME和HADOOP_HOME环境变量,然后执行如下命令连接HiveServer2 Proxy,请读者自行替换JDBC URL中的相关参数,比如IP、端口以及project名:

上图显示,我们已经成功连接到MaxCompute的HiveServer2 Proxy。同时,默认project所对应的控制集群的MaxCompute版本也在连接成功的相关信息里打印出来了。

接着,我们便可以指定SQL来进行查询了:

也可以通过set命令来完成对相应flag的设置

由于Beeline还有部分与资源相关的功能需要分布式文件系统支持,目前这些功能尚未完全实现。

总结

借助于HiveServer2 Proxy,我们可以完成Hive生态的工具与MaxCompute的互通,更多可以玩的可能性等待你去发现。由于目前HiveServer2 Proxy还处于测试阶段,希望大家将发现的问题与期望的需求反馈给我们,以帮助我们更好地完善产品来服务好更多的MaxCompute用户。

欢迎加入MaxCompute钉钉群讨论

时间: 2024-10-24 23:20:58

原来MaxCompute还能这么玩系列(2)—— 利用HiveServer2 Proxy实现MaxCompute与Hive生态工具的互通的相关文章

原来MaxCompute还能这么玩系列(3)—— 借力QlikView玩转数据分析

注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分 QlikView简介 QlikView是一款成熟的商业分析软件,作为QlikTech的旗舰产品,近几年逐渐成为了全球增长率最快的BI产品.MaxCompute作为一款有志于打造计算和数据生态的平台产品,实现与主流BI软件的连通性势在必行,本文将带领读者来一起看看如何打通QlikView访问MaxCompute的通路,并以此为基础完成简单的数据分析与可视化. 安装Q

原来MaxCompute还能这么玩系列(1)—— 通过Apache Zeppelin 快速实现数据可视化

注:MaxCompute原名ODPS,是阿里云自研的大数据计算平台,文中出现的MaxCompute与ODPS都指代同一平台,不做区分 Zeppelin简介 Zeppelin是一款基于web的notebook工具,它支持以插件的方式接入各种解释器(interpreter),从而使用户能够以特定的语言或数据处理后端来完成交互式查询,并快速实现数据可视化. 部署Zeppelin 首先,你需要在部署的服务器上安装Oracle JDK 1.7,并配置好相应的JAVA_HOME环境变量,这步不做赘述. 接着

  您是否还在为玩不了一款传奇私服而发愁吗?

您是否还在为找不到新开传奇网站而苦恼吗? 您是否还在为玩不了一款传奇私服而发愁吗? 您是否还在为无法查询到传奇sf具体资料而束手无策吗? 那么现在这些将是过去,只要你打开www.zjdywj.com,千千传奇开区信息尽在您眼底! 我们网站的主要提供具体开区信息,一切信息来源均来自互联网:今日新开传奇.新开传奇私服.刚开一秒传奇.等等最新最全的信息.也许有人就要问:"说了一大堆,具体开区信息资料在哪呢?"不要着急,不要着急,下面小编为大家介绍. 新开网通传奇 是继传了新开传奇和刚开传奇,

还可以这么玩:盘点iOS 11中Siri的12项新功能

本文讲的是还可以这么玩:盘点iOS 11中Siri的12项新功能,iOS 11的首次亮相带来了一些变化,其中包括增强现实游戏和更好的iMessage体验,但或许操作系统在任何方面的改变都不如Siri大. Siri有了更多的新性能,通过分享社交账号QR码得到更生动的形象,以及它可以演奏DJ. 以下是对iOS 11中Siri的所有操作方式的总结: 1.跨设备同步 通过iOS 11系统,Siri可以总结并适应你的习惯,并在你所有的苹果设备上同步这些偏好. 比如在你的联系人列表里有四个人叫Brianna

新版傲游浏览器:快速访问还能这么玩

http://www.aliyun.com/zixun/aggregation/17197.html">北京时间9月11日,全球领先的软件服务公司傲游今天宣布发布傲游云浏览器最新Windows版本.新版浏览器对"快速访问"进行了重大改进,加入众多实用创新功能.用户可以自由定制,可玩性极强. 安装简单友好 界面简洁大方 新版傲游云浏览器的下载与安装非常简单,只需简单地点击立即下载-立即安装-立即使用,就能立即进入傲游的超速世界.点击下载傲游云浏览器:http://www.

沈皓瑜解读切换凤巢引发收入下降:用户还不会玩

11月13日消息,百度商业运营副总裁沈晧瑜今日表示,并非凤巢切换一个原因导致百度将第四季度收入预期下调10%.同时他强调,新的凤巢系统能为广告主带来更为精细化的投放管理,流失的客户终将回归. 百度日前宣布将于12月全面启用凤巢,取代原有的竞价排名系统.百度高层在第三财季的电话会议上预计,受此影响百度第四季度的营收将被拉低月10%. 针对百度营收方面的大幅变化,沈皓瑜今日解释道,这并非单纯的由切换凤巢一个原因所引发.沈皓瑜对新浪科技表示,即便不切换到凤巢系统,百度第四季度的营收也会下降大约4-7%

容灾备份还能这么玩你get了吗?

 这个世界上有一种事件叫做"小概率事件".虽然它发生的可能性很小,但遇上了,那就是百分之百.对于大多数行业而言,为重要数据和核心业务部署容灾备份方案,就是为了避免发生这种小概率事件而产生无可挽回的影响. 近年来,对数据安全和业务连续性要求较高的行业较为倾向于选择基于CDP持续数据保护技术的容灾备份产品.与其他镜像.快照等方案相比,在综合考虑到数据0丢失.恢复数据完整可用.恢复任意时间点数据和异地容灾等方面因素的情况下,CDP容灾备份方案具有明显的技术优势. 作为国内最早推出的CDP容灾

2014年还有人想玩电商么?

不必说京东天猫苏宁的平台大战,也不必说B2C.B2B或者时髦的O2O,更加不必说大佬之间的口水战,互联网评论人士的闲吃萝卜淡操心,只要看看双十一期间数百亿的销售额,只要看看互联网中无处不在的电商平台广告,只要看看电商制造的各种促销噱头,想必谁也经不起这样的诱惑,要试图在电商的浑水里面去摸上一两条鱼.于是乎,本来只够做淘宝集市的资本,也要在天猫.京东里面游一游,本来只够开个网上商店的货源,非得要弄个电商平台试一试.2013年,很多人都在拼电商.拼包括了很多内容,首先应该是插,横插一脚,保证脚先迈进

iOS 9 概念视频曝光 - 苹果的下一代 iOS 还能够怎么玩?

class="post_content" itemprop="articleBody"> 从 iOS 7 到 iOS 8,苹果在新系统中呈现出的惊喜并不如上一次更迭来得震撼,但是这并没有停止我们对下一代 iOS 版本的更多期待.那么,你期待 iOS 9 还能怎么玩?日前,知名概念设计师 Ralph Theodory 带来了一组惊艳十足的 iOS 9 概念设计-- Ralph Theodory 表示,这组 iOS 9 概念是在前一代系统版本的基础上"移