吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3740|回复: 4
收起左侧

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

[复制链接]
ProgramerFangL 发表于 2017-11-13 18:01
本帖最后由 ProgramerFangL 于 2017-11-14 14:55 编辑

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 evnexportGOROOT=/opt/goexportPATH=$GOROOT/bin:$PATHexportGOPATH=$GORROT/workspacesource /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.gztar 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();
            }
        }
    }
由于集群没有搭在本地的虚拟机上,发布帖子时链接不到集群地址,所以暂时没有运行代码的截图,后期会尽快补充。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
523740194 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ProgramerFangL 发表于 2017-11-13 18:03
本帖最后由 ProgramerFangL 于 2017-11-13 18:20 编辑

求热心人的免费评分
 楼主| ProgramerFangL 发表于 2017-11-14 15:40
梦到边缘 发表于 2019-2-22 11:36
 楼主| ProgramerFangL 发表于 2019-2-22 14:55
梦到边缘 发表于 2019-2-22 11:36
WeedfsFile这个类没有,需要在maven中引入什么呢?

这是一个实体类,就是entity,里边定义了文件的一些信息
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 04:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表