您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php通过thrift开发hive

2025/10/15 20:44:57发布18次查看
概述: 由于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();
之后就是通过$client来执行hql语句,举几个例子:1.获取数据库:
$client->execute(show databases);$result = $client->fetchall();//$result接收执行结果
说明:也就是将要执行的hql作为execute()函数的参数,并用fetchall()函数获取结果;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;}
主要用到execute()、fetchaall()、getschema()这三个函数,另外几个可以再试用一下。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product