php通过thrift开发hive
Jun 06, 2016 pm 07:52 PM概述: 由于hadoop和hive都是用java写的,要使用像php这样的脚本语言(实际上thrift支持的语言还有很多,大部分主流语言都包括)对hive进行开发就需要一个跨语言的连接桥梁,到目前为止,我所知道的有两种方法可以实现: 1.后面将具体说明的Thrift Thrift是F
概述:
由于hadoop和hive都是用java写的,要使用像php这样的脚本语言(实际上thrift支持的语言还有很多,大部分主流语言都包括)对hive进行开发就需要一个跨语言的连接桥梁,到目前为止,我所知道的有两种方法可以实现:
1.后面将具体说明的Thrift
Thrift是Facebook的一个开源项目,同时也是hadoop和hive官网上提到一种中间件,本次开发就是使用Thrift
2.php java bridge(这个没有用过,不太了解)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面主要总结一些thrift相关的东西
安装:
在安装好hadoop,hive并且以mysql作为hive的元数据库配置完成的前提下
1.下载thrift(apache thrift官网)
2.解压:tar -zxvf 压缩包名
3.安装依赖库:libevent和libevent-devel
4.在thrift路径下执行:./configure【具体见./configure --help】;然后make & make install
具体说明可以查看官网信息:http://thrift.apache.org/
使用:
thrift目录下有packages、protocol、server、transport几个文件夹,并且提供了以下几个操作hive的函数:
interface ThriftHiveIf extends ThriftHiveMetastoreIf { public function execute($query);//执行$query public function fetchOne();//获取一条结果 public function fetchN($numRows);//获取$numRows条结果 public function fetchAll();//获取所有结果 public function getSchema();//获取元数据 public function getThriftSchema();//没试过 public function getClusterStatus();//获取集群状态 public function getQueryPlan();//获取执行计划 }
调用的时候在php文件加上以下内容:
$GLOBALS['THRIFT_ROOT'] = 'Thrift/'; //thrift根目录 // load the required files for connecting to Hive require_once $GLOBALS['THRIFT_ROOT'] . 'packages/hive_service/ThriftHive.php'; require_once $GLOBALS['THRIFT_ROOT'] . 'transport/TSocket.php'; require_once $GLOBALS['THRIFT_ROOT'] . 'protocol/TBinaryProtocol.php'; // Set up the transport/protocol/client $transport = new TSocket(host_ip, 10000); $protocol = new TBinaryProtocol($transport); $client = new ThriftHiveClient($protocol); $transport->open();
1.获取数据库:
$client->execute("show databases"); $result = $client->fetchAll();//$result接收执行结果
2.获取元数据:
要获取hive的元数据是通过getSchema()函数,它是要配合某一个查询的执行进行获取,例子如下:
$client->execute("select id from hivetest");//hivetest表中只有id、name两个字段分别为int和string类型 $schema = $client->getSchema(); $result = $client->fetchAll();
打印的$schema的值为:
metastore_Schema Object (
[fieldSchemas] => Array (
[0] => metastore_FieldSchema Object (
[name] => id
[type] => int
[comment] => )
)
[properties] =>
)
要获取其中的数据可以通过下面这个函数对$schema 进行转化:
function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'array' || gettype($value) == 'object'){ $ret[$key] = objtoarr($value); } else{ $ret[$key] = $value; } } return $ret; }

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian

How To Set Up Visual Studio Code (VS Code) for PHP Development
