hadoop thrift:php通过thrift获取hadoop资源

php可以通过thrift连接hbase,同样php可以通过thrift读取hadoop资源(hdfs资源)。
准备:
php需要thrift的libary
packages:hadoop-0.20.2\src\contrib\thriftfs\gen-php
源码:
<?php
$globals['thrift_root'] = rootpath . '/lib/thrift';
require_once($globals['thrift_root'].'/thrift.php');
require_once($globals['thrift_root'].'/transport/tsocket.php');
require_once($globals['thrift_root'].'/transport/tbufferedtransport.php');
require_once($globals['thrift_root'].'/protocol/tbinaryprotocol.php');
require_once($globals["thrift_root"] . "/packages/hadoopfs/thrifthadoopfilesystem.php");
$hadoop_socket = new tsocket("localhost", 59256);
$hadoop_socket -> setsendtimeout(10000); // ten seconds
$hadoop_socket -> setrecvtimeout(20000); // twenty seconds
$hadoop_transport = new tbufferedtransport($hadoop_socket);
$hadoop_protocol = new tbinaryprotocol($hadoop_transport);
$hadoopclient = new thrifthadoopfilesystemclient($hadoop_protocol);
$hadoop_transport -> open();
try {
// create directory
$dirpathname = new hadoopfs_pathname(array("pathname" => "/user/root/hadoop"));
if($hadoopclient -> exists($dirpathname) == true) {
echo $dirpathname -> pathname . " exists.\n";
} else {
$result = $hadoopclient -> mkdirs($dirpathname);
}
// put file
$filepathname = new hadoopfs_pathname(array("pathname" => $dirpathname -> pathname . "/hello.txt"));
$localfile = fopen("hello.txt", "rb");
$hdfsfile = $hadoopclient -> create($filepathname);
while(true) {
$data = fread($localfile, 1024);
if(strlen($data) == 0)
break;
$hadoopclient -> write($hdfsfile, $data);
}
$hadoopclient -> close($hdfsfile);
fclose($localfile);
// get file
echo "read file:\n";
print_r($filepathname);
$data = "";
$hdfsfile = $hadoopclient -> open($filepathname);
print_r($hdfsfile);
while(true) {
$data = $hadoopclient -> read($hdfsfile, 0, 1024);
if(strlen($data) == 0)
break;
print $data;
}
$hadoopclient -> close($hdfsfile);
echo "liststatus:\n";
$result = $hadoopclient -> liststatus($dirpathname);
print_r($result);
foreach($result as $key => $value) {
if($value -> isdir == "1")
print "dir\t";
else
print "file\t";
print $value -> block_replication . "\t" . $value -> length . "\t" . $value -> modification_time . "\t" . $value -> permission . "\t" . $value -> owner . "\t" . $value -> group . "\t" . $value -> path . "\n";
}
$hadoop_transport -> close();
} catch(exception $e) {
print_r($e);
}
?>
启动hadoop的thrift
hadoop-0.20.2\src\contrib\thriftfs\scripts\start_thrift_server.sh 59256
problem one:
在系统目录创建文件,而不是在hadoop目录中创建文件
原因:
thrift启动时加载默认的配置文件
解决方法:
修改start_thrift_server.sh文件
top=/usr/local/hadoop-0.20.2
classpath=$classpath:$top/conf
problem two:
java.lang.nullpointerexception
    at     org.apache.hadoop.thriftfs.hadoopthriftserver$hadoopthrifthandler.write(hadoopthriftserver.java:282)
at     org.apache.hadoop.thriftfs.api.thrifthadoopfilesystem$processor$write.process(unknown source)
at org.apache.hadoop.thriftfs.api.thrifthadoopfilesystem$processor.process(unknown source)
at com.facebook.thrift.server.tthreadpoolserver$workerprocess.run(unknown source)
at         java.util.concurrent.threadpoolexecutor$worker.runtask(threadpoolexecutor.java:886)
at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:908)
at java.lang.thread.run(thread.java:662)
原因:
java返回的map hash id为long类型,而php(32位)无法存储long类型的数据,导致转换成float数据后丢失精度。
private long nextid = new random().nextlong();
java返回数据:4207488029786584864 本文链接http://www.cxybl.com/html/wlbc/Php/20120607/28513.html

时间: 2024-08-03 13:36:58

hadoop thrift:php通过thrift获取hadoop资源的相关文章

《深入理解Hadoop(原书第2版)》——第2章 Hadoop中的概念 2.1 Hadoop简介

第2章 Hadoop中的概念 价格实惠的普通计算机经常满足不了应用程序的计算资源需求,很多企业的业务应用程序已经不再适合在单台廉价的计算机上运行.这时,一个简单昂贵的解决方案就是购买一些具有多CPU的高端服务器,这通常需要巨额资金.只要能买到最高端的服务器,这个解决方案就能够达到理想的效果,但预算往往是个大问题.另一个替代方案,就是搭建一个高可用的集群,这个集群经过专业的安装和精心的管理服务,使用起来就像一台计算机一样.很多高可用的集群都是企业专有的而且价格也十分贵. 为了获取所需的计算资源,一

Hadoop学习第四天之hadoop命令操作(下)

Hadoop学习第四天之hadoop命令操作(下) 1.   Hadoop dfsadmin #启动dfs admin客户端 -report  #报告当前集群的节点信息 -safemode  enter   #进入安全模式 -safemode  leave   #离开安全模式 -safemode  get    #获取安全模式状态 -safemode  wait   #等待,直到安全模式结束 -saveNamespace  #开启保存命名空间,必须开启安全模式 -refreshNodes  刷新

一台物理机开三台虚拟机做hadoop的小项目,请问hadoop要选什么模式的?

问题描述 一台物理机开三台虚拟机做hadoop的小项目,请问hadoop要选什么模式的? 最近刚刚着手,准备在电脑上用VM装三台虚拟机网上看到hadoop的运行模式有独立.伪分布.全分布模式请问我初期学习的时候要用什么模式的?项目开发后期需不需要再修改成其他模式? 解决方案 1)独立模式:在本机模式下测试和调试,适宜用在开发阶段.2)伪分布模式:hadoop守护进程运行在本机上,模拟一个小规模的集群.3)全分布模式:守护进程运行在一个集群上,生产模式 解决方案二: 有三台虚拟机,当然就是全分布模

Hadoop大象之旅007-配置Hadoop伪分布模式

Hadoop大象之旅007-配置Hadoop伪分布模式                                                          老帅    安装hadoop分为本地模式.伪分布模式.集群模式.本地模式是运行在本地,只负责存储,没有计算功能.伪分布模式是在一台机器上模拟分布式部署,方便学习和调试.集群模式是在多个机器上配置hadoop,是真正的"分布式".    伪分布模式是在一台单机上运行,但用不同的 Java 进程模仿分布式运行中的各类结点

url-android 获取URL资源的输入流怎么不行??

问题描述 android 获取URL资源的输入流怎么不行?? //url.openStream()为什么报错?? //分两步就可以 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); InputStream is =conn.getInputStream(); 解决方案 如果你报的异常是android.os.NetworkOnMainThreadException,那么就是因为在Android4.0之后不允许在主线

Hadoop大象之旅006-安装Hadoop环境

Hadoop大象之旅006-安装Hadoop环境                                                                老帅     我们的硬件电脑上跑的是Windows7x64,并且在Windows7安装好了VMWare10虚拟机,VMWare中也安装配置了CentOS6.5操作系统,CentOS中也已经安装配置了jdk1.6.0_45,并也准备好了连接CentOS的工具软件SecureCrSecureFx.     万事具备,应该安装H

hadoop是什么?怎么用hadoop?

hadoop是什么? (1)Hadoop是一个开源的框架,可编写和运行分布式应用处理大规模数据,是专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式. Hadoop=HDFS(文件系统,数据存储技术相关)+ Mapreduce(数据处理),Hadoop的数据来源可以是任何形式,在处理半结构化和非结构化数据上与关系型数据库相比有更好的性能,具有更灵活的处理能力,不管任何数据形式最终会转化为key/value,key/value是基本数据单元.用函数式变成Mapred

hadoop集群-HADOOP集群主机上运行HADOOP相关命令回车后响应慢

问题描述 HADOOP集群主机上运行HADOOP相关命令回车后响应慢 HADOOP集群主机上运行HADOOP相关命令回车后响应慢,如集群主机上输入hivehbase shell或者hdfs dfs -ls / 回车后终端响应非常慢,至少10秒上才出来 Logging initialized using configuration in jar:file:/opt/cloudera/parcels/CDH-5.3.1-1.cdh5.3.1.p0.5/jars/hive-common-0.13.1-

【方法】个人获取电子资源的方法

       因为要阅读一些技术书之外的其他科目的书籍,经常会查看电子版的,写篇小文,介绍我常用的获取电子资源途径.  1 逛电驴 有海量电子资源cd,电子书,音频等等. 无需注册,但是需要在本机安装迅雷或者电驴的下载工具.   http://verycd.gdajie.com/ 2 新浪爱问 电子图书资源丰富,需要注册,有weibo的可以直接登录新浪爱问   http://ishare.iask.sina.com.cn   这里说一下如果你没有积分,可以选择将要下载的图书保存到微盘,然后下载.