weedfs的简易安装以及使用Java编写的简单上传代码

weedfs是一个适用于需要存储大量小文件的一个分布式文件系统,全名为Seaweed-fs,是一个使用go语言开发的简单的高可用的系统。开创之初weedfs是源于一篇Facebook的论文实现,下面介绍在服务器中的安装部署步骤。
一、安装
1、首先安装配置golang开发环境
go的最新版本是1.9.1 可到 https://www.golangtc.com/download 下载 go1.9.1.linux-amd64.tar.gz
2、上传并解压到指定目录 

tar -zxf go1.9.1.linux-amd64.tar.gz
3、配置环境变量

vim /etc/profile# go evn

export GOROOT=/opt/go

export PATH=$GOROOT/bin:$PATH

export GOPATH=$GORROT/workspace

source /etc/profile
4、执行

go get github.com/chrislusf/seaweedfs/go/weed 下载并编译weedfs(需要VPN)

没有VPN可以直接下载并解压

wget https://bintray.com/artifact/download/chrislusf/seaweedfs/weed_0.70beta_linux_amd64.tar.gz

tar zxvf weed_0.70beta_linux_amd64.tar.gz
二、服务启动
1、进入weed的解压目录启动
-dir表示数据的存储文件地址,-max表示volume的最大数量,-mserver是主节点的ip以及端口,-port表示该volume的端口,-ip为启动volume的ip,publicurl表示外部访问存储数据的链接地址,在Java代码中有体现。
./weed volume-dir="/opt/weed_0.7/vol/" -max=5 -mserver="x.x.x.x:9333" -port=9081 -ip="x.x.x.x"-publicUrl="x.x.x.x:9081"&
-mdir表示主节点数据的存储路径,-defaultReplication表示该集群所采用的存储模式,weedfs提供了多种副本策略,如下:
000 no replication, just one copy
001 replicate once on the same rack
010 replicate once on a different rack in the same data center
100 replicate once on a different data center
200 replicate twice on two other different data center
110 replicate once on a different rack, and once on a different data center

./weed master-mdir="/opt/weed_0.7/mdata" -defaultReplication="200"-ip="x.x.x.x" -port=9333 &  #启动master,设置集群模式
三、Java代码实现简单上传功能

因为只是一个简单的测试代码,所以在此只贴出一个主方法实现功能。weedfs没有官方的api接口,只在git上找到了两个现成的JavaClient,其底层也是使用了http的请求来实现文件上传的功能。
    public static void main(String[] args) { 
           CloseableHttpClient httpClient1 = null;
           CloseableHttpResponse response1 = null;
            try {
            httpClient1 = HttpClients.createDefault();           //设置http请求的路径
            HttpPost httpPost = new HttpPost("http://10.2.45.200:9333/submit");
            httpPost.setHeader(new BasicHeader("Accept-Language", "zh-cn"));            // 把文件转换成流对象FileBody
            File file = new File("D:\\SAP用户Top10.txt");
            FileBody bin = new FileBody(file);
            HttpEntity reqEntity = MultipartEntityBuilder.create()
                            .setCharset(Charset.forName("UTF-8"))
//                         .addPart("file", bin) 
                           .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                           .addBinaryBody(URLEncoder.encode("SAP用户Top10.txt"), file)
                           .build();
            httpPost.setEntity(reqEntity);            // 发起请求 并返回请求的响应
            System.out.println(httpPost.toString());
            response1 = httpClient1.execute(httpPost);
            ObjectMapper mapper = new ObjectMapper();
            WeedfsFile weedfile = mapper.readValue(response1.getEntity().getContent(), WeedfsFile.class);
            System.out.println(weedfile.getFileName());
            System.out.println("The response value of token:" + response1.getFirstHeader("token"));            // 获取响应对象
            System.out.println(weedfile.toString());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(response1 != null){
                    response1.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(httpClient1 != null){
                    httpClient1.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
由于集群没有搭在本地的虚拟机上,发布帖子时链接不到集群地址,所以暂时没有运行代码的截图,后期会尽快补充。

你可能感兴趣的:(weedfs的简易安装以及使用Java编写的简单上传代码)