Hadoop(三)——核心之一HDFS

上篇讲述了Hadoop分布式集群环境的搭建,其实重要是HDFS分布式文件系统的搭建,MapReduce主要是需要我们程序员来进行编写算法来进行逻辑运算的。这篇就重点来讲述一下HDFS(

HadoopDistribute File System,也就是Hadoop分布式文件系统)。

一、HDFS的主要设计理念:

1、存储超大文件,这里的“超大文件”是指几百MB、GB甚至TB,PB级别的文件。

2、最高效的访问模式是 一次写入、多次读取(流式数据访问),HDFS存储的数据集作为hadoop的分析对象。在数据集生成后,长时间在此数据集上进行各种分析。每次分析都将设计该数据集的大部分数据甚至全部数据,因此读取整个数据集的时间延迟比读取第一条记录的时间延迟更重要。

3、运行在普通廉价的服务器上,HDFS设计理念之一就是让它能运行在普通的硬件之上,即便硬件出现故障,也可以通过容错策略来保证数据的高可用。

二,HDFS的体系结构:

简述:

数据块(block):大文件会被分割成多个block进行存储,block大小默认为64MB。每一个block会在多个datanode上存储多份副本,默认是3份。

namenode:1,负责管理文件目录、文件和block的对应关系以及block和datanode的对应关系还有datanode的副本信息,2,协调客户端对文件的访问,3,记录命名空间内的改动或本身属性的改变;4,使用事务日志记录HDFS元数据的变化,使用映像文件存储文件系统的命名空间,包括文件映射文件属性。

datanode:datanode就负责存储了,当然大部分容错机制都是在datanode上实现的,一次写入多次读取不修改。

三,HDFS读写操作图:

1,读取数据流程:

客户端要访问HDFS中的一个文件

首先从namenode获得组成这个文件的数据块位置列表

根据列表知道存储数据块的datanode

访问datanode获取数据

Namenode并不参与数据实际传输

2,写入数据流程:

客户端请求namenode创建新文件

客户端将数据写入DFSOutputStream

建立pipeline依次将目标数据块写入各个datanode,建立多个副本

四,HDFS高可靠性原由,很容易理解:

冗余副本策略

机架策略

心跳机制

安全模式

校验和

回收站

元数据保护

快照机制

五,HDFS文件操作方法:

1,linux命令行操作:

列出HDFS下的文件: ./bin/hadoop fs -ls [文件夹目录名]

上传文件到HDFS:    ./bin/hadoop fs -put [上传文件路劲+名字]  [指定要上传的hadoop路径]

复制到本地文件:./bin/hadoop fs -get  [hadoop中文件路劲+名字]    [本地文件夹]

删除HDFS下的文件:./bin/hadoop fs -rmr [hadoop文件路径+名字]

查看HDFS的基本统计信息: ./bin/hadoop dfsadmin -report

2,API编程:这个就需要我们看Hadoop的API文档来进行Java开发的调用,然后实现文件的各种操作,给一个hadoop的api链接:http://hadoop.apache.org/docs/r1.2.1/api/index.html

这里看书上的两个小例子:

将输入的文件中的内容输出到屏幕上:

	package HDFS;

	import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
	import org.apache.hadoop.io.IOUtils;
	import java.io.InputStream;
	import java.net.URL;

	/**
	 * 将文件的内容打印到屏幕上
	 * @author Administrator
	 *
	 */
	public class URLCat {
		static {
			URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
		}

		//main方法
		public static void main(String[] args) throws Exception {
			//输入流
			InputStream in = null;
			try {
				in = new URL(args[0]).openStream();
				//将输入文件的内容输出到system.out,也就是屏幕上
				IOUtils.copyBytes(in, System.out, 4096, false);
			} finally {
				IOUtils.closeStream(in);
			}
		}
	}

对一个文件的创建,写入,读取内容

	package HDFS;

	import java.io.IOException;
	import org.apache.hadoop.conf.Configuration;
	import org.apache.hadoop.fs.FSDataInputStream;
	import org.apache.hadoop.fs.FSDataOutputStream;
	import org.apache.hadoop.fs.FileSystem;
	import org.apache.hadoop.fs.Path;

	/**
	 * 利用HDFS的API,使用Java编写文件创建,写入,读取
	 * @author Administrator
	 *
	 */
	public class HDFSJavaAPIDemo {

		public static void main(String[] args) throws IOException {
			Configuration conf = new Configuration();
			FileSystem fs = FileSystem.get(conf);

			System.out.println(fs.getUri());

			Path file = new Path("demo.txt");

			if (fs.exists(file)) {
				System.out.println("File exists.");
			} else {
				// Writing to file
				FSDataOutputStream outStream = fs.create(file);
				outStream.writeUTF("Welcome to HDFS Java API!!!");
				outStream.close();
			}
			// Reading from file
			FSDataInputStream inStream = fs.open(file);
			String data = inStream.readUTF();
			System.out.println(data);
			inStream.close();
			fs.close();
		}
	}

六,HDFS的忌讳:

1、将HDFS用于对数据访问要求低延迟的场景:由于HDFS是为高数据吞吐量应用而设计的,必然以高延迟为代价。

2、存储大量小文件:HDFS中元数据(文件的基本信息)存储在namenode的内存中,而namenode为单点,小文件数量大到一定程度,namenode内存就吃不消了。

小结:HDFS分布式文件系统,是Hadoop能够进行大数据高效处理的基础平台,有了这个平台才能有后边Map-Reduce的计算框架的运用。这里想多说的是,作为开发程序员,我们该多看看Hadoop的API文档,在用中不断熟悉,不断掌握,就想JDK的API文档一样。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-19 00:50:06

Hadoop(三)——核心之一HDFS的相关文章

【hadoop之翊】——hadoop大核心之HDFS初识

今天来说说hadoop的一大核心--HDFS,这个是很重要的,它呢,是分布式文件系统.为什么说hadoop能存储海量数据?其实主要还是依赖与hdfs的能力,主要依赖的是hdfs能存储海量数据. 1. 为什么hdfs能存储海量数据呢? 一开始抛出这样的问题来想想.至于HDFS的基本概念什么的都不用多说了的~我们重在使用,而不是去做"研究".扯蛋的话就是,"专家的研究"已经成为名副其实的贬义词了,很带有讽刺意义了,在现在这个时代~你们懂的~因为他们有的没有真正经历过,而

Hadoop系列(二)Hadoop三大核心之HDFS基础

目录 hdfs基础 重要概念 Hadoop 特点 Hadoop HA 针对海量数据,核心问题始终是计算和存储.当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并存储到多台机器上.跨机器存储的文件系统就被成为分布式文件系统.分布式系统架构于网络之上,势必引入网络编程的复杂性,如何实现容忍节点故障但不丢失数据,是HDFS的重要挑战. hdfs基础 Hadoop 自带HDFS分布式文件系统:Hadoop Distributed Filesystem.也简称DFS.主要用来解决海量

Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.Hive是如何运行,以及基于Hadoop数据仓库的构建和分布式数据库内部具体实现.如有不足,后续及时修改. HDFS的体系架构 整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持. HDFS采用主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的(在最新的Hadoop2.2版本

Hadoop集群(二) HDFS搭建

HDFS只是Hadoop最基本的一个服务,很多其他服务,都是基于HDFS展开的.所以部署一个HDFS集群,是很核心的一个动作,也是大数据平台的开始. 安装Hadoop集群,首先需要有Zookeeper才可以完成安装.如果没有Zookeeper,请先部署一套Zookeeper.另外,JDK以及物理主机的一些设置等.请参考: Hadoop集群(一) Zookeeper搭建 Hadoop集群(三) Hbase搭建 Hadoop集群(四) Hadoop升级 下面开始HDFS的安装 HDFS主机分配 1

Storm与Spark、Hadoop三种框架对比

一.Storm与Spark.Hadoop三种框架对比 Storm与Spark.Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景.所以,在不同的应用场景下,应该选择不同的框架. 1.Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义.Storm的适用场景:1)流数据处理Storm可以用来处理源源不断流进来

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

hadoop的核心思想【转】

[转自]:http://www.superwu.cn/2014/01/10/963/ 1.1.1. hadoop的核心思想 Hadoop包括两大核心,分布式存储系统和分布式计算系统. 1.1.1.1. 分布式存储 为什么数据需要存储在分布式的系统中哪,难道单一的计算机存储不了吗,难道现在的几个TB的硬盘装不下这些数据吗?事实上,确实装不下.比如,很多的电信通话记录就存储在很多台服务器的很多硬盘中.那么,要处理这么多数据,必须从一台一台服务器分别读取数据和写入数据,太麻烦了! 我们希望有一种文件系

大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)

分布式文件系统即是网络中多台计算机组合在一起提供一个统一存储及管理的系统. Hadoop提供了一个文件系统接口和多个分布式文件系统实现,其中比较重要的就是HDFS(Hadoop Distributed Filesystem)了.Hadoop是一个综合性的文件系统抽象,因此它也可以集成其他文件系统的实现,如本地文件系统和Amazon S3系统及淘宝 TFS等. 1.概念模型 HDFS以流式数据访问模式来存储超大文件,运行于商业硬件集群上. HDFS实现下来,分为两类节点,一个是namenode及s

hadoop中常用的hdfs代码操作

一:向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件: 1 package hadoopTest; 2 3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.fs.*; 5 import java.io.*; 6 7 8 public class HDFSApi { 9 /** 10 * 判断路径是否存在 11 */ 12 public