Hadoop分布式文件系统——HDFS的读写
2016-01-22 10:06
288 查看
HDFS是运行在通用硬件平台上的可容错分布式文件系统。它优化了大文件的流式读取模式,适用于那些高吞吐并且对延迟性要求相对比较低的场景。它还通过文件“一次写入,多次读取”的简单策略保证了数据的一致性。HDFS亦使用了“块复制”的概念,让数据在集群的节点间进行复制,每个数据块复制的份数由“复制因子”决定。
HDFS包含三个服务:
A、NameNode:保存着集群中所有数据块位置的一个目录。
B、Secondary NameNode:周期性同步NameNode的块索引数据。在同步处理中,Secondary NameNode下载NameNode的image文件和editlogs,并对它们做本地归并,最后再将归并完的image文件发回给NameNode。Secondary NameNode并不是NameNode的热备份,当NameNode故障的时候它并不能工作。
C、DataNode:管理着从NameNode分配过来的数据块。它并不能感知集群中其他DataNode的存在,只和NameNode进行交互。
一、HDFS的读写操作:
二、读写原理:FileSystem是一个抽象类,代表一个通用文件系统。调用FileSystem.get()方法时,会将Hadoop配置中的fs.default.name参数(形式:hdfs://)作为URI,选择初始化一个正确的文件系统。create()方法返回JAVA I/O的OutputStream对象,open()方法返回JAVA I/O的InputStream对象。
HDFS包含三个服务:
A、NameNode:保存着集群中所有数据块位置的一个目录。
B、Secondary NameNode:周期性同步NameNode的块索引数据。在同步处理中,Secondary NameNode下载NameNode的image文件和editlogs,并对它们做本地归并,最后再将归并完的image文件发回给NameNode。Secondary NameNode并不是NameNode的热备份,当NameNode故障的时候它并不能工作。
C、DataNode:管理着从NameNode分配过来的数据块。它并不能感知集群中其他DataNode的存在,只和NameNode进行交互。
一、HDFS的读写操作:
public class HdfsWriter extends Configured implements Tool { /* (non-Javadoc) * @see org.apache.hadoop.util.Tool#run(java.lang.String[]) */ @Override public int run(String[] arg0) throws Exception { String localInputPath = arg0[0]; Path outputPath = new Path(arg0[1]); Configuration conf = getConf(); FileSystem fs = FileSystem.get(conf); OutputStream os = fs.create(outputPath); InputStream is = new BufferedInputStream(new FileInputStream(localInputPath)); IOUtils.copyBytes(is, os, conf); return 0; } public static void main(String[] args) { try { int returnCode = ToolRunner.run(new HdfsWriter(), args); System.exit(returnCode); } catch (Exception e) { e.printStackTrace(); } } }
public class HdfsReader extends Configured implements Tool { /* (non-Javadoc) * @see org.apache.hadoop.util.Tool#run(java.lang.String[]) */ @Override public int run(String[] as) throws Exception { Path inputPath = new Path(as[0]); String localOutputPath = as[1]; Configuration conf = getConf(); FileSystem fs = FileSystem.get(conf); OutputStream os = new BufferedOutputStream(new FileOutputStream(localOutputPath)); InputStream is = fs.open(inputPath); IOUtils.copyBytes(is, os, conf); return 0; } public static void main(String[] args) throws Exception { int returnCode = ToolRunner.run(new HdfsReader(), args); System.exit(returnCode); } }
二、读写原理:FileSystem是一个抽象类,代表一个通用文件系统。调用FileSystem.get()方法时,会将Hadoop配置中的fs.default.name参数(形式:hdfs://)作为URI,选择初始化一个正确的文件系统。create()方法返回JAVA I/O的OutputStream对象,open()方法返回JAVA I/O的InputStream对象。
相关文章推荐
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- 单机版搭建Hadoop环境图文教程详解
- hadoop常见错误以及处理方法详解
- hadoop 单机安装配置教程
- hadoop的hdfs文件操作实现上传文件到hdfs
- hadoop实现grep示例分享
- Apache Hadoop版本详解
- linux下搭建hadoop环境步骤分享
- java连接hdfs ha和调用mapreduce jar示例
- java实现将ftp和http的文件直接传送到hdfs
- hadoop client与datanode的通信协议分析
- hadoop中一些常用的命令介绍
- Hadoop单机版和全分布式(集群)安装
- 用PHP和Shell写Hadoop的MapReduce程序
- hadoop map-reduce中的文件并发操作
- Hadoop1.2中配置伪分布式的实例
- java结合HADOOP集群文件上传下载