Hey guys,
I've pretty much got everything working now with my php setup. Thanks for
all the help. I plan on putting a summary of how to get PHP talking to Hive
at some point soon.
I did run into one problem with reading results. The TSocket readAll()
method would throw a timeout exception. Commenting out those exceptions made
the code work. I dug a bit deeper and it looks the socket has timed_out ==
true while it's blocking (blocked === true). I patched my copy to get it
going:
@@ -213,7 +213,7 @@
$pre = null;
while (TRUE) {
$buf = @fread($this->handle_, $len);
- if ($buf === FALSE || $buf === '') {
+ if ($buf === FALSE) {
$md = stream_get_meta_data($this->handle_);
if ($md['timed_out']) {
throw new TException('TSocket: timed out reading '.$len.' bytes
from '.
@@ -224,7 +224,7 @@
}
} else if (($sz = strlen($buf)) < $len) {
$md = stream_get_meta_data($this->handle_);
- if ($md['timed_out']) {
+ if (true === $md['timed_out'] && false === $md['blocked']) {
throw new TException('TSocket: timed out reading '.$len.' bytes
from '.
$this->host_.':'.$this->port_);
} else {
Is this code generated by thrift? Is there somewhere I can put a bug in?
Thanks.
On Mon, Feb 23, 2009 at 12:00 PM, Gary Richardson <[email protected]
> wrote:
> That got the job done.
>
> BTW, I also had to re-thrift the hive_service stuff -- it was missing a
> class or two.
>
> Thanks!
>
>
> On Mon, Feb 23, 2009 at 10:24 AM, Raghu Murthy <[email protected]> wrote:
>
>> Hi Gary,
>>
>> Looks like the php thrift infrastructure api is not completely packaged
>> into
>> hive. I have created a new jira to include these files.
>> https://issues.apache.org/jira/browse/HIVE-299
>>
>> In the meanwhile can you try downloading and building thrift? That should
>> generate the necessary files.
>> http://incubator.apache.org/thrift/download/
>>
>> raghu
>>
>> On 2/23/09 10:11 AM, "Gary Richardson" <[email protected]> wrote:
>>
>> > Hi,
>> >
>> > I'm trying to work with the PHP thrift api and I've hit a stumbling
>> block.
>> >
>> > My script looks like:
>> >
>> >> #!/usr/bin/php
>> >> <?php
>> >>
>> >> $GLOBALS['THRIFT_ROOT'] = 'thriftroot/';
>> >>
>> >> require_once $GLOBALS['THRIFT_ROOT'] .
>> >> 'packages/hive_service/ThriftHive.php';
>> >
>> > And I'm getting the following error when I try to run it:
>> >
>> >> PHP Warning: include_once(thriftroot//packages/fb303/fb303_types.php):
>> >> failed
>> >> to open stream: No such file or directory in
>> >>
>>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/hive_service_typ>>
>> e
>> >> s.php on line 9
>> >> PHP Warning: include_once(): Failed opening
>> >> 'thriftroot//packages/fb303/fb303_types.php' for inclusion
>> >> (include_path='.:/usr/share/pear:/usr/share/php') in
>> >>
>>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/hive_service_typ>>
>> e
>> >> s.php on line 9
>> >> PHP Warning:
>> >>
>> include_once(thriftroot//packages/hive_metastore/hive_metastore_types.php):
>> >> failed to open stream: No such file or directory in
>> >>
>>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/hive_service_typ>>
>> e
>> >> s.php on line 10
>> >> PHP Warning: include_once(): Failed opening
>> >> 'thriftroot//packages/hive_metastore/hive_metastore_types.php' for
>> inclusion
>> >> (include_path='.:/usr/share/pear:/usr/share/php') in
>> >>
>>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/hive_service_typ>>
>> e
>> >> s.php on line 10
>> >> PHP Warning:
>> >>
>> include_once(thriftroot//packages/hive_metastore/ThriftHiveMetastore.php):
>> >> failed to open stream: No such file or directory in
>> >>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/ThriftHive.php
>> >> on
>> >> line 10
>> >> PHP Warning: include_once(): Failed opening
>> >> 'thriftroot//packages/hive_metastore/ThriftHiveMetastore.php' for
>> inclusion
>> >> (include_path='.:/usr/share/pear:/usr/share/php') in
>> >>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/ThriftHive.php
>> >> on
>> >> line 10
>> >> PHP Fatal error: Interface 'ThriftHiveMetastoreIf' not found in
>> >>
>> /root/leap/dev/servers/hive/thriftroot/packages/hive_service/ThriftHive.php
>> >> on
>> >> line 12
>> > I found FacebookBase.php, but my searching/googling hasn't revealed a
>> > fb303_types.php. My packages directory looks like:
>> >
>> > [r...@ip-10-250-31-17 hive]# find thriftroot/packages/ -type f
>> > thriftroot/packages/hive_service/ThriftHive.php
>> > thriftroot/packages/hive_service/hive_service_types.php
>> > thriftroot/packages/fb303/FacebookBase.php
>> >
>> > Is there a package somewhere that has the fb303 thrift code in it? Do I
>> need
>> > to build it myself?
>> >
>> > Thanks!
>>
>>
>