编写程序实现文件的分布式存储
来源:互联网 发布:h3c端口聚合interface 编辑:程序博客网 时间:2024/05/29 19:38
系统的结构:
- 多个客户端程序,FileClient应用。客户端程序可以向文件服务节点的应用程序上传文,下载文件,删除文件。(不考虑文件夹与文件名重名)
- 一个FileServe应用,提供文件存储节点StorageNode的管理功能,提供文件的管理功能。
- 多个StorageNode应用,提供文件的存储能力。提供向备份节点服务器进行文件备份功能。 一个监控程序
系统功能细节
NodeName=aNameNodeIP=ip addressNodePort=aPortRootFolder=aFolderVolume=100GBFileServerIP=file server ip addressFileServerPort=file server port
其中NodeName属性是存储节点的名称,要求唯一,在作业检查时,至少要启动4个存储节点进程,在运行过程中,还需要动态进行存储扩展,新启动两个进程。还需要动态将一个节点关闭。
NodeIp地址,由于没有多台计算机,所以NodeIp都设置为127.0.0.1,将每个节点的端口NodePort设置为独立的即可。
RootFolder即为每个存储节点的根文件夹,volume是该存储节点提供的最大存储能力。
StorageNode需要知道FileServer服务器的地址信息,FileServerIp和FileServerPort就是UDP协议使用的地址和端口
———————————————————————————————
几点
1.UDP
2.TCP
3.文件操作
三个核心
——————————————————————
操作代码见:
http://59.110.243.127/svn/repos/src/dfs/
客户端
“`
package dfs.client;
import dfs.utils.Config;
public class FileClient {
public static void main(String[]args){ ClientFileOperator clientFileOperator=new ClientFileOperator(); Config config=new Config("FileServer.properties"); String ip=config.getValue("ip"); int port=Integer.parseInt(config.getValue("port").trim()); if(args[0].equals("upload")) { //args[1]=filename clientFileOperator.fileupload(args[1], ip, port); } else if(args[0].equals("download")) { //args[1]=uuid clientFileOperator.filedownload(args[1], ip, port); } else if(args[0].equals("remove")) { //args[1]=uuid clientFileOperator.removefile(args[1], ip, port); }}
}“`
CLIENT_OPERATOR:
public class ClientFileOperator implements FileOperation {
//杩欓噷鏄鎴风搴斿~鐨勪唬鐮併€傚疄鐜板畬鏁寸殑閫昏緫锛岃姹傛槸瀹炵幇涓巗erver浜や簰锛屼笌Node鑺傜偣浜や簰銆�
@Overridepublic void filedownload(String uuid, String ip, int port) { // TODO Auto-generated method stub System.out.println("Start download--------"); Map<String, Object>downlaodMap=new HashMap<>(); downlaodMap.put("uuid", uuid); //1.鍚戞湇鍔″櫒璇㈤棶鍦ㄥ摢 Socket socket=null; try { socket = new Socket(ip, port); ObjectOutputStream objectOutputStream=new ObjectOutputStream(socket.getOutputStream()); objectOutputStream.writeInt(2);//琛ㄧず涓嬭浇 objectOutputStream.writeObject(downlaodMap); objectOutputStream.flush(); // objectOutputStream.close(); //鎺ュ彈娑堟伅 ObjectInputStream ois=new ObjectInputStream(socket.getInputStream()); Map<String, Object> map=(Map<String, Object>) ois.readObject(); if(map!=null) { if((boolean)map.get("isuseful")!=true) { System.err.println("Wrong uuid or the file doesn't exist"); } else {//2.鍚戝瓨鍌ㄨ妭鐐规潵瑕� //鎺ュ彈淇℃伅锛屽悜涓诲瓨鍌ㄨ妭鐐逛笅杞芥枃浠�,娉ㄦ剰鎶涘嚭寮傚父鍜岃В鍘嬬缉锛岃В瀵� DataInputStream oins=null; String nodeip=(String) map.get("nodeip"); int nodeport=(int)map.get("nodeport"); String filename=(String)map.get("filename"); String router=(String)map.get("router"); String backupip=(String)map.get("backupip"); int backupport=(int)map.get("backupport"); String backuprputer=(String)map.get("backuprouter"); String prename=(String)map.get("prename"); socket.close(); DataOutputStream obj; try { socket=new Socket(nodeip, nodeport); System.out.println(nodeip+","+nodeport); //涓庝富鑺傜偣杩涜閫氫俊 obj=new DataOutputStream(socket.getOutputStream()); } catch (Exception e) { // TODO: handle exception try { socket=new Socket(backupip, backupport); } catch (Exception e2) { // TODO: handle exception System.out.println("鏈嶅姟鑺傜偣宸插穿婧�"); throw new Exception(); } //涓庡浠借妭鐐硅繘琛岄€氫俊 obj=new DataOutputStream(socket.getOutputStream()); obj.writeInt(2); System.out.println("Client try to attach"+backuprputer+"/"+filename); String filepath1=router+"/"+filename; Map<String, Object> mapp1=new HashMap<>(); mapp1.put("filepath", filepath1); byte[]bytearray1=ConvertMapArray.convertMapToByteArray(mapp1); obj.writeInt(bytearray1.length); obj.write(bytearray1); obj.flush(); try { oins=new DataInputStream(socket.getInputStream()); } catch (Exception e2) { // TODO: handle exception System.out.println("鏈嶅姟鑺傜偣宸插穿婧�"); throw new Exception(); } FileOutputStream foStream=new FileOutputStream(new File(prename)); DataOutputStream doStream=new DataOutputStream(foStream); System.out.println("Create "+prename); int length=oins.readInt(); System.out.println("lenth:"+length); byte []array=new byte[length]; /*byte key=MD5Utils.getKey(); while((readbyte=bis.read())!=-1){ //array=EDS.Encrytor(array);//鍔犲瘑 dos.write((readbyte^key)); }*/ oins.read(array); array=Tool.quickDecrypt(Tool.decompress(array)); doStream.write(array); socket.close(); System.out.println("浠庡浠借妭鐐硅幏鍙栧埌浜嗘枃浠�"); throw new Exception();//缁撴潫 } obj.writeInt(2); System.out.println("Client try to attach"+router+"/"+filename); String filepath=router+"/"+filename; Map<String, Object> mapp=new HashMap<>(); mapp.put("filepath", filepath); byte[]bytearray=ConvertMapArray.convertMapToByteArray(mapp); obj.writeInt(bytearray.length); obj.write(bytearray); obj.flush(); System.out.println("_________SEND__REQUEST"); try { oins=new DataInputStream(socket.getInputStream()); } catch (Exception e) { //鑻ヤ腑鏂摼鎺� try { socket=new Socket(backupip, backupport); } catch (Exception e2) { // TODO: handle exception System.out.println("鏈嶅姟鑺傜偣宸插穿婧�"); throw new Exception(); } //涓庡浠借妭鐐硅繘琛岄€氫俊 obj=new DataOutputStream(socket.getOutputStream()); obj.writeInt(2); System.out.println("Client try to attach"+backuprputer+"/"+filename); String filepath1=router+"/"+filename; Map<String, Object> mapp1=new HashMap<>(); mapp.put("filepath", filepath1); byte[]bytearray1=ConvertMapArray.convertMapToByteArray(mapp1); obj.writeInt(bytearray.length); obj.write(bytearray1); obj.flush(); try { oins=new DataInputStream(socket.getInputStream()); } catch (Exception e2) { // TODO: handle exception System.out.println("鏈嶅姟鑺傜偣宸插穿婧�"); } FileOutputStream foStream=new FileOutputStream(new File(prename)); DataOutputStream doStream=new DataOutputStream(foStream); System.out.println("Create "+prename); int length=oins.readInt(); System.out.println("lenth:"+length); byte []array=new byte[length]; /*byte key=MD5Utils.getKey(); while((readbyte=bis.read())!=-1){ //array=EDS.Encrytor(array);//鍔犲瘑 dos.write((readbyte^key)); }*/ oins.read(array); array=Tool.quickDecrypt(Tool.decompress(array)); doStream.write(array); socket.close(); System.out.println("浠庡浠借妭鐐硅幏鍙栧埌浜嗘枃浠�"); throw new Exception(); } FileOutputStream foStream=new FileOutputStream(new File("a/"+prename)); DataOutputStream doStream=new DataOutputStream(foStream); System.out.println("Create "+prename); int length=oins.readInt(); System.out.println("lenth:"+length); byte []array=new byte[length]; /*byte key=MD5Utils.getKey(); while((readbyte=bis.read())!=-1){ //array=EDS.Encrytor(array);//鍔犲瘑 dos.write((readbyte^key)); }*/ oins.read(array); array=Tool.quickDecrypt(Tool.decompress(array)); doStream.write(array); socket.close(); System.out.println("浠庝富瀛樺偍鑺傜偣鑾峰彇鍒颁簡鏂囦欢"); } } } catch (Exception e) { // TODO Auto-generated catch block }}@Overridepublic void removefile(String uuid, String ip, int port) { // TODO Auto-generated method stub System.out.println("Start remove--------"); Map<String, Object>removeMap=new HashMap<>(); removeMap.put("uuid", uuid); //1.鍚戞湇鍔″櫒璇㈤棶鍦ㄥ摢 Socket socket=null; try { socket = new Socket(ip, port); ObjectOutputStream objectOutputStream=new ObjectOutputStream(socket.getOutputStream()); objectOutputStream.writeInt(3);//琛ㄧず鍒犻櫎 objectOutputStream.writeObject(removeMap); objectOutputStream.flush();
// objectOutputStream.close();
//鎺ュ彈娑堟伅
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
Map<String, Object> map=(Map<String, Object>) ois.readObject(); if(map!=null) { if((boolean)map.get("isuseful")!=true) { System.err.println("Wrong uuid or the file doesn't exist"); } else {//2.鍦ㄥ垹闄や富瀛樿妭鐐圭殑鍚屾椂鍒犻櫎澶囦唤鑺傜偣鎵€瀛樻枃浠� DataInputStream oins=null; String nodeip=(String) map.get("nodeip"); int nodeport=(int)map.get("nodeport"); String filename=(String)map.get("filename"); String router=(String)map.get("router"); String backupip=(String)map.get("backupip"); int backupport=(int)map.get("backupport"); String backuprputer=(String)map.get("backuprouter"); String prename=(String)map.get("prename"); socket.close(); DataOutputStream obj; try { socket=new Socket(nodeip, nodeport); System.out.println(nodeip+","+nodeport); //涓庝富鑺傜偣杩涜閫氫俊 obj=new DataOutputStream(socket.getOutputStream()); obj.writeInt(3); System.out.println("Client try to attach"+router+"/"+filename); String filepath1=router+"/"+filename; Map<String, Object> mapp1=new HashMap<>(); mapp1.put("filepath", filepath1); mapp1.put("backupip", backupip); mapp1.put("backupport", backupport); mapp1.put("backfilename",filename); mapp1.put("backuprouter", backuprputer); byte[]bytearray1=ConvertMapArray.convertMapToByteArray(mapp1);; obj.writeInt(bytearray1.length); obj.write(bytearray1); obj.flush(); } catch (Exception e) { // TODO: handle exception System.out.println("鏈嶅姟鑺傜偣宸插穿婧�"); } } } } catch(Exception e){e.printStackTrace();} }@Overridepublic void fileupload(String filename, String ip, int port) { // TODO Auto-generated method stub System.out.println("Start upload------"); Map<String, Object> fileinformap=new HashMap<>(); File file=new File(filename); fileinformap.put("filename", filename); fileinformap.put("filesize",file.length()); Socket socket = null; InputStream inputStream = null; OutputStream outputStream=null; try { try { socket = new Socket(ip, port); ObjectOutputStream ooStream=new ObjectOutputStream(socket.getOutputStream()); System.out.println("--------Get Stream-------"); ooStream.writeInt(1);;//琛ㄧず涓婁紶 ooStream.writeObject(fileinformap); ooStream.writeChar('e');;//琛ㄧず缁撴潫 ooStream.flush(); inputStream=socket.getInputStream(); } catch (Exception e) { // TODO: handle exception } ObjectInputStream ois=new ObjectInputStream(inputStream); Map<String,Object> map=(Map<String, Object>)ois.readObject(); System.out.println("Connect to Server sucessfully"); if(map.get("uuid")!=null) { System.out.println("File information"); System.out.println("Fileid "+map.get("uuid")); System.out.println("Main node ip,port"+(String)map.get("nodeip")+" ,"+(int)map.get("nodeport")); System.out.println("Folderroot:"+(String)map.get("router")); System.out.println("__NEW_FILE_NAME"+(String)map.get("uuid")+filename.substring(filename.lastIndexOf("."))); System.out.println("______________BACKUP_NODE__________"); System.out.println("Main node ip,port"+(String)map.get("ip")+" ,"+(int)map.get("port")); System.out.println("Folderroot:"+(String)map.get("brouter")); } socket.close(); try { socket=new Socket((String)map.get("nodeip"),(int)map.get("nodeport")); String router=(String)map.get("router"); String uuid=(String)map.get("uuid"); String fileName=uuid+filename.substring(filename.lastIndexOf(".")); String Ip=(String)map.get("ip"); int Port=(int)map.get("port"); Map<String, Object> storeInformap=new HashMap<>(); storeInformap.put("router", router); storeInformap.put("fileName", fileName); storeInformap.put("Ip", Ip); storeInformap.put("Port",Port); storeInformap.put("backuprouter", (String)map.get("brouter")); byte[] byteArray=ConvertMapArray.convertMapToByteArray(storeInformap); int length=byteArray.length; InputStream fis=new FileInputStream(file); BufferedInputStream bis=new BufferedInputStream(fis); DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); dos.write(1); ( dos).writeInt(byteArray.length); System.out.println("length: "+length); dos.write(byteArray); byte []array=new byte[1024*100]; /*byte key=MD5Utils.getKey(); while((readbyte=bis.read())!=-1){ //array=EDS.Encrytor(array);//鍔犲瘑 dos.write((readbyte^key)); }*/ int i=0; while(bis.read(array)!=-1) { array=Tool.compress(Tool.quickEncrypt(array));//鍔犲瘑//鍘嬬缉 dos.write(array); } System.out.println("鏂囦欢璇诲叆鎴愬姛"); dos.flush(); socket.close(); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception System.err.println("涓诲瓨鍌ㄨ妭鐐瑰瓨鍌ㄥけ璐�"); System.out.println("鍚戝浠借妭鐐瑰彂閫佹暟鎹�"); String Ip=(String)map.get("ip"); int Port=(int)map.get("port"); System.out.println(Ip+","+Port); socket=new Socket(Ip,Port); String router=(String)map.get("brouter"); String uuid=(String)map.get("uuid"); String fileName=uuid+filename.substring(filename.lastIndexOf(".")); Map<String, Object> storeInformap=new HashMap<>(); storeInformap.put("router", router); storeInformap.put("fileName", fileName); storeInformap.put("Ip", (String)map.get("nodeip")); storeInformap.put("Port",(int)map.get("nodeport")); storeInformap.put("backuprouter",router ); byte[] byteArray=ConvertMapArray.convertMapToByteArray(storeInformap); int length=byteArray.length; InputStream fis=new FileInputStream(file); BufferedInputStream bis=new BufferedInputStream(fis); DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); dos.write(1); ( dos).writeInt(byteArray.length); System.out.println("length: "+length); dos.write(byteArray); byte []array=new byte[1024*100]; /*byte key=MD5Utils.getKey(); while((readbyte=bis.read())!=-1){ //array=EDS.Encrytor(array); dos.write((readbyte^key)); }*/ int i=0; while(bis.read(array)!=-1) { array=Tool.compress(Tool.quickEncrypt(array)); dos.write(array); } dos.flush(); socket.close(); } } catch ( Exception e) { // TODO Auto-generated catch block } }
- 编写程序实现文件的分布式存储
- MongoDB基于GridFS实现文件的分布式存储
- MongoDB基于GridFS实现文件的分布式存储
- hadoop YARN分布式程序的编写
- session可以存储的方式有几种,如果程序采取分布式,怎么样实现session共享
- 多文件程序的编写
- MongoDB 基于分布式文件存储的数据库
- mongoDB分布式文件存储的数据库
- FastDFS 分布式的文件存储环境搭建
- FastDFS 分布式的文件存储环境搭建
- Mongodb 基于分布式文件存储的数据库
- 编写程序模拟堆栈的存储方式
- nginx + gridfs 实现图片的分布式存储
- Memcached实现Session的分布式存储
- memcache 是如何实现分布式存储的?
- FASTDFS 分布式文件存储
- 分布式系统程序编写要点
- Redis实现分布式存储
- centOS7下安装MAVEN
- repo init报错error.GitError: manifests rev-list (u'^2736dfd46e8a30cf59a9cd6e93d9e56e87021f2a', 'HEAD',
- Android初级开发(六)——3、SQLite数据库的增删改查
- 数据结构与算法-排序总结
- overflow:auto;父容器高度自适应问题
- 编写程序实现文件的分布式存储
- Redis学习(二)redis配置
- EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............
- solidThinking.Click2Form.2017.1.0.Win64 1DVD
- C#中的委托与事件
- Android 获取控件的宽和高
- PTA 3.11表达式转换
- 【非技术面试】31道,不准备就会掉进坑的问题
- HDU-1398 Square Coins