标签:
HDFS设计前提与目标:
1、 硬件错误时常态
2、 流式数据访问
3、 大规模数据集
4、 简单一致性模型
5、 移动计算比移动数据更划算
一个HDFS集群包含一个单独的NameNode节点、多台DataNode服务器,并且同时被多个客户端访问,如图所示。所有的这些机器通常都是普通的Linux机器,运行着用户级别(user-level)的服务进程。NameNode管理文件系统的元数据(记录着文件数据在每个DataNode上位置副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身的改动,DataNode存储实际数据。客户端通过NameNode和DataNode的交互访问文件系统。
<ignore_js_op>
图 HDFS结构图
保障HDFS可靠性措施
1、 冗余备份
2、 副本存放
3、 心跳检测
4、 安全模式
5、 数据完整性检测
6、 空间回收
7、 元数据磁盘失效
8、 快照
HDFS的java api
上传本地文件到HDFS
通过FileSystem.copyFromLocalFile(Path src,Path dst)可将本地文件上传到HDFS的指定位置上,其中src和dst均为文件的完整路径。
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class CopyFile { Configuration conf=new Configuration(); FileSystem hdfs= FileSystem.get(conf); Path src=new Path("C:\\test.txt"); Path dst=new Path("/");
hdfs.copyFromLocalFile(src,dst);
System.out.println("Upload to"+conf.get("fs.defualt.name")); FileStatus files[]=hdfs.listStatus(dst); for(fileStatus file:files){ System.out.println(file.getPath());
}
}
创建HDFS文件
通过FileSystem.create(Path f)可在HDFS上创建文件,其中f为文件的完整路劲。
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class CreateFile{ public static void main(String[] args)throws Exception{ Configuration conf=new Configuration(); byte[] buff="hello".getBytes(); FileSystem hdfs=FileSystem.get(conf); Path dfs=new Path("/test");
FSDataOutputStream outputStream=hdfs.create(dfs); outputStream.write(buff,0,buff.length);
}
}
重命名HDFS文件
通过FileSystem.rename(Path src,Path dst)可为指定的HDFS文件重命名,其中src和dst均为文件的完整路径。
删除HDFS上的文件
通过FileSystem.delete(Path f,Boolean recursive)可删除指定的HDFS文件,其中f为需要删除文件的完整路径,recursive用来确定是否进行递归删除。
查看HDFS文件的最后修改时间
通过FileStatus.getModificationTime()可以查看指定HDFS文件的修改时间。
查看某个HDFS文件是否存在
通过FileSystem.exists(Path f)可查看指定HDFS文件是否存在,其中f为文件的完整路径。
查看某个文件的HDFS集群位置
通过FileSystem.getFileBlockLocation(FileStatus file,long start,long len)可查找指定文件在HDFS集群上的位置,其中file为文件的完整路径,start和len来标识查找文件的路径。
获取HDFS集群上所有节点名称
通过DatanodeInfo.getHostName()可获取HDFS集群上所有节点名称。
更多精彩内容请关注:http://bbs.superwu.cn
关注超人学院微信二维码:
HDFS架构介绍及java的api使用
标签:
原文地址:http://www.cnblogs.com/CRXY/p/4503750.html