hdfs在手机下载平台中的应用

本文介绍了一款手机应用商店项目中采用HDFS作为应用下载包存储方案的过程。面对传统文件系统的局限性,HDFS以其高可扩展性和稳定性成为优选。文章详细记录了HDFS环境搭建步骤及下载包的实际测试效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我们的手机应用商店项目中,随着第三方应用的增长,传统的文件系统已经无法满足下载包的存储,经过初步考虑,我们打算使用hdfs来存储我们的下载包。

hdfs作为一种分布式存储方案,在可扩展性,稳定性方面有很大的优势,当磁盘不够时,只需要添加datanode,不影响下载服务,当一台datanode机器网络或硬件出现问题,也不会影响下载服务,hdfs会自动把出问题的datanode上的数据转移到其他机器上,缺点是当namenode出现故障时,会导致所有文件无法下载,也就是namenode的单点问题。

一 hdfs文件下载流程

[img]http://dl.iteye.com/upload/attachment/0084/0113/4c40c334-b836-3fb0-a676-6542d2d9ab71.jpg[/img]

1 客户端向datanode请求下载文件

2 datanode 检查文件是否存在,是,返回文件对应的datanode

3 客户端根据返回的datanode依次请求数据块

4 datanode返回数据块


根据以上流程 一次下载客户端需要多次网络连接 客户端首先需要连接hdfs的namenode, 然后再连接datanode


二 环境搭建

本次是在单台服务器上搭建hdfs环境,首先下载hadoop-0.20.2包,解压到目录下

1 在hadoop-env.sh中配置jdk路径,具体配置如下

export JAVA_HOME=/usr/local/jdk1.7.0_02


2 在hdfs-site.xml中配置namenode和datanode文件的存储路径
,具体配置如下

<name>dfs.name.dir</name>
<value>/data/work/hadoop-0.20.2/datalog1,/data/work/hadoop-0.20.2/datalog2</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/data/work/hadoop-0.20.2/data1,/data/work/hadoop-0.20.2/data2</value>
</property>


3 在core-site.xml中配置hdfs访问ip和端口,具体配置如下


<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/work/hadoop-0.20.2/temp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.0.1:9000</value>
</property>
</configuration>


4 在mapred-site.xml中配置map计算的ip和端口,具体配置如下

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.0.1:9001</value>
</property>
</configuration>

5 配置masters,具体配置如下

192.168.0.1

6 配置slaves,具体配置如下

192.168.0.1

hdfs端口为9000,datanode的默认端口为50010,在iptables中需要开放这两个端口


三 下载测试

测试代码如下



public static void main(String[] args) throws Exception {
try {

readFromHdfs();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
System.out.println("SUCCESS");
}
}




/**从HDFS上读取文件*/
private static void readFromHdfs() throws FileNotFoundException,IOException {

long starttime=System.currentTimeMillis();
String dst = "hdfs://192.168.0.1:9000/user/data/qq.apk";

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
FSDataInputStream hdfsInStream = fs.open(new Path(dst));

OutputStream out = new FileOutputStream("d:/qq-hdfs.apk");
byte[] ioBuffer = new byte[1024];
int readLen = hdfsInStream.read(ioBuffer);

while(-1 != readLen){
out.write(ioBuffer, 0, readLen);
readLen = hdfsInStream.read(ioBuffer);
}
out.close();
hdfsInStream.close();
fs.close();

long endtime=System.currentTimeMillis();

endtime=endtime-starttime;
System.out.println("时间为"+endtime);
}


经过多次测试 5,5M的下载包,普通文件下载时间为21秒,通过HDFS下载速度为24秒 相差不是很大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值