淘宝TFS使用
TFS作为一个开源的分布式文件系统,在处理小文件的性能上还是比较高效的。功能部署有点类似与HDFS,而且增加了nameserver HA的功能。作为开源项目来讲,其文档资源还有规范性较比Apache的子项目还是有一定差距的。在安装过程中也遇到了很多困难,走了很多弯路。最开始的时候是在ubuntu环境下进行的,首先需要降级安装gcc,然后安装TFS的依赖库,无奈最后编译TFS的时候还是出了异常。
·
TFS作为一个开源的分布式文件系统,在处理小文件的性能上还是比较高效的。功能部署有点类似与HDFS,而且增加了nameserver HA的功能。
作为开源项目来讲,其文档资源还有规范性较比Apache的子项目还是有一定差距的。在安装过程中也遇到了很多困难,走了很多弯路。最开始的时候是在ubuntu环境下进行的,首先需要降级安装gcc,然后安装TFS的依赖库,无奈最后编译TFS的时候还是出了异常。最后,切换到64位centOS环境,按照如下的步骤成功搭建:
http://gdcsy.blog.163.com/blog/static/12734360920125624859906/
注:安装TFS的时候没有checkout它的chunk目录,而是直接下载了1.4的版本
http://code.taobao.org/p/tfs/wiki/index/
在使用的过程中,我们主要通过java语言来进行调用,淘宝所提供的java API中有部分代码集成了tair的功能,如果不想使用tair可以人为修改代码,将tair的功能注释掉
注释掉之后的代码和单元测试用例可到这里下载:
http://download.csdn.net/detail/javaman_chen/4473179
附TFS的Spring配置和单元测试类
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="tfsManager" class="com.taobao.common.tfs.DefaultTfsManager" init-method="init" >
<!-- 整个进程中系统最多等待多少个请求,取决于你有多少个线程并发的请求TFS -->
<property name="maxWaitThread">
<value>100</value>
</property>
<!-- 单个请求最大的等待时间(ms) 超过这个时间放弃这次请求-->
<property name="timeout">
<value>2000</value>
</property>
<!-- Tfs master nameserver ip address -->
<property name="nsip">
<value>192.168.7.134:8888</value>
</property>
<!-- TFS 集群的编号,这个编号只是一种参考,系统初始化的时候会从ns上取,取不到才用本地设置的.!-->
<property name="tfsClusterIndex">
<value>1</value>
</property>
<!-- TFS在读取文件的时候会缓存block所在的数据服务器ip,这个参数配置了最多缓存的记录个数!-->
<property name="maxCacheItemCount">
<value>10000</value>
</property>
<!-- 上一项缓存最大有效的时间(ms)!-->
<property name="maxCacheTime">
<value>5000</value>
</property>
</bean>
</beans>
单元测试代码
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.taobao.common.tfs.TfsManager;
import com.taobao.common.tfs.packet.FileInfo;
import junit.framework.TestCase;
public class TFSTest extends TestCase {
ApplicationContext context;
protected void setUp() throws Exception {
super.setUp();
context=new ClassPathXmlApplicationContext("tfs.xml");
}
public void testTemp(){
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
System.out.println(tfsMgr);
}
public void testSave(){
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
String fileName=tfsMgr.saveFile("test.pdf", null, null);
System.out.println(fileName);
}
public void testFetch(){
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
boolean flag=tfsMgr.fetchFile("T1_tETBCZT1RCvBVdK", null, "temp.pdf");
System.out.println(flag);
}
public void testDelete(){
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
boolean flag=tfsMgr.unlinkFile("T1XRETByJT1RCvBVdK", null);
System.out.println(flag);
}
public void testHide(){
//1 隐藏;0显示
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
boolean flag=tfsMgr.hideFile("T1XRETByJT1RCvBVdK", null, 0);
System.out.println(flag);
}
public void testState(){
TfsManager tfsMgr=(TfsManager) context.getBean("tfsManager");
FileInfo fileInfo=tfsMgr.statFile("T1_tETBCZT1RCvBVdK", null);
int flag=fileInfo.getFlag();
System.out.println(flag);
}
}
注意:在使用TFS之前最好先提高系统用户可访问文档的上限,默认是1024,相对较少,TFS使用一段时间后会出现资源不足的情况。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)