php開發Hive Web查詢

2021-06-07 12:00:25 字數 3461 閱讀 8173

一、php hive api的問題

預設情況下,hive本身自帶的php api是不太好使的。乙個是路徑有問題,乙個是**本身也有問題。所以,採用thrift重新自己生成hive的php api。

找到所有的thrift檔案,並複製到某個路徑下

#cd hive

#for i in `find ./ -name "*.thrift"`

>do

>cp $ /usr/local/www/hive/thrift

>done

然後找到thrift裡面的fb303.thrift,複製到一起。修改hive_metastore和hive_service裡面inlclude fb303的路徑。然後用thrift -r --gen php 生成兩個hive的thrift。

然後再複製thrift本身的protocol,transport資料夾和autoload.php和thrift.php。

我把這些東西都放在libs資料夾下。最終目錄結構和檔名如下:

然後解決api中的**bug問題,正常情況下,php是同步阻塞執行,而hive的查詢時間比較長,在查詢期間,埠會沒有響應,所以thrift會返回socket timeout的錯誤。所以需要修改api中對socket buffer的處理。

編輯transport下

tsocket.php紅色修改前,綠色修改後,總共五個位置需要修改。

1.先找public function readall($len)方法

在方法裡

找到if ($buf === false || $buf === '')

}}#sbin/nginx -s reload

php修改

#cd etc

#vi php-fpm.conf

process_control_timeout = 36000s

request_terminate_timeout = 36000s

#cd lib

#vi php.ini

max_input_time = 36000

default_socket_timeout = 36000

#killall php-fpm

#sbin/php-fpm -c lib/php.ini

因為hive查詢比較慢,為了防止超時,我都設定成了10小時超時,都是內網應用,無所謂了。

三、編寫第乙個php-hive程式

<?php

$globals['thrift_root'] = './libs/';

// 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

define('host','192.168.1.49');

define('port','10000');

$transport = new tsocket(host, port);

$protocol = new tbinaryprotocol($transport);

$client = new thrifthiveclient($protocol);

//create thrifthive object

$transport->open();

$client->execute('add jar /opt/modules/hive/hive-0.7.1/lib/hive-contrib-0.7.1.jar');

$client->execute('show databases');

$db_array = $client->fetchall();

$i = 0;

while('' != @$db_array[$i])

$transport->close();

?>

php中有幾種hive方法,列出來以便參考

execute($query)         執行查詢

fetchone()                    返回一行結果

fetchn($numrows)         返回n行結果,給定行數

fetchall()                     返回全部結果集

getschema()                 獲取schema

getthriftschema()     獲取thrift server schema

getclusterstatus()     獲取集群狀態,很貼心啊,還沒試過

getqueryplan()             獲取queryplan

主要常用的就這些,當然沒有提供類似mysql_select_db這樣的命令,需要使用use database這樣的語句去做查詢。然後用execute方法執行一下。

php開發Hive Web查詢

自己閒的沒事,用php寫了乙個hive的查詢介面,順便把開發過程和遇到的問題記錄下來。一 php hive api的問題 預設情況下,hive本身自帶的php api是不太好使的。乙個是路徑有問題,乙個是 本身也有問題。所以,採用thrift重新自己生成hive的php api。找到所有的thrif...

PHP開發實現快遞查詢功能詳解

背景 不久前,設計實現了京東api的功能,發現如果換了其它快遞再重新設計,豈不是會浪費太多的時間,所以選個第三方提供的快遞api是最為合理的,下面給出快遞鳥和快遞100的設計實現。1.首先要有乙個快遞鳥賬號,根據對方的要求,完善使用者申請。2.根據自己的需求,開通服務 3.進入 我的api介面 根據...

php 支付寶訂單查詢 微信支付開發訂單查詢例項

因為某一方技術的原因,可能導致商戶在預期時間內都收不到最終支付通知,此時商戶可以通過該api來查詢訂單的詳細支付狀態。訂單查詢api的url為 package out trade no 11122 partner 1900090055 sign 4e8d0df3da0c3d0df38f timest...