首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

写分布式程序心得小结

2013-04-12 
写分布式程序经验小结从学习hadoop到现在有一年多了,前段时间又接触了hbase和hama,小结一下一点经验吧,当

写分布式程序经验小结

从学习hadoop到现在有一年多了,前段时间又接触了hbase和hama,小结一下一点经验吧,当然这些经验出自小菜,很可能适用性不广,大家慎重采纳。

写程序前先写好以下4部分:

[转载请注明出处:http://blog.csdn.net/bhq2010/article/details/8780613]

1、日志处理程序

分布式程序的日志是很重要的,因为几乎没法单步调试分布式的程序。日志可以记在hdfs上:

import java.io.BufferedWriter;import java.io.IOException;import java.util.Random;public class Logger{private static String fileName = null;private static Logger instance = null;private BufferedWriter writer = null;static{Random rand = new Random();fileName = Network.getLocalIp() + "_" + rand.nextInt();}private Logger(String peerName){try{Configuration conf = new Configuration("cocktail.conf");writer = OutputFactory.getWriter(conf.getItemValue("hamajob_tmp_dir") + "log/" + peerName,1024, true);} catch (IOException e){e.printStackTrace();}}public static synchronized void setFileName(String fileName){Logger.fileName = fileName;}public static synchronized Logger log(){if (instance == null){instance = new Logger(fileName);}return instance;}public synchronized void exception(String msg){try{writer.write("[Exception:]" + msg + "\n\n");writer.flush();} catch (IOException e){e.printStackTrace();}}public synchronized void info(String msg){try{writer.write("[INFO:]" + msg + "\n\n");writer.flush();} catch (IOException e){e.printStackTrace();}}public synchronized void exception(StackTraceElement[] trace){try{String msg = "";for (StackTraceElement element : trace){msg += "[Exception:]" + element.getClassName()+ ":" + element.getMethodName() + ":"+ element.getLineNumber() + "\n";}writer.write(msg + "\n");writer.flush();} catch (IOException e){e.printStackTrace();}}}

2、写好文件读写的程序,把文件读写最好写成一个工具类。

这个工具类可以读写本地和hdfs上的文件,甚至是nfs或者ftp上的文件。如果程序中到处都是随手编写的文件IO的代码,很容易在分布式的程序中造成混乱,甚至导致程序异常挂起或终止(操作系统会对打开的文件加锁)、破坏文件内容。写成一个工具类,用上单例模式、加上适当的并发控制,就可以避免很多麻烦。


3、写好数据库连接和网络通信的程序

这也和上面一条的道理差不多,数据库连接、tcp连接、网络带宽都是有限的资源,分布式的程序不小心的话很可能会导致诡异的问题。


4、写好配置管理

程序可能要有一些配置信息,在写主要程序前先写一个配置工具类,管理系统的配置。分布式程序的配置文件还要考虑分发的问题,可以把配置文件写在nfs、ftp或者hdfs上,都是很方便的,或者自己想办法把配置文件分发到各个节点上也可以。


以后想到了别的再来补充。

1楼nlbest昨天 10:33
学习了

热点排行