hdfs架构分析与第一个hdfs应用程序

参考

王家林大数据IMF系列

场景

hdfs架构分析与第一个hdfs应用程序

分析
  • HDFS架构



.主从结构

-主节点,只有一个:namenode(HA下会有多个NameNode)

-从节点,有很多个:datanodes

.namenode负责

-接收用户操作请求

-维护文件系统的目录结构

-管理文件与block之间的关系,blockdatanode之间的关系

.datanode负责

-存储文件

-文件被分成block存储在磁盘上

-为保证数据安全,文件会有多个副本

注释:

1HDFS存储的文件是以Block的方式存在的,一个文件的不同Block具体存储在哪台datanaode上是随机的

2、为保证数据的安全,文件的block会有多个副本

3HDFS本身只是一套分布式数据存储的逻辑管理软件,实际的数据是分布式存储在具体的Linux机器的磁盘上的。

4HDFS提供了管理文件系统的众多工具,eg:fsck

  • HDFS读写

1HDFS读取数据:ClientNameNode发起读数据的请求,NameNode会检索Client读取数据的元数据信息来决定第一个Block具体在哪些台机器上,并根据Hadoop的机架感知策略等决定把哪个副本交给Client取读取其实NameNode是返回了该副本的URL,接下来就是Client通过该URL建立InputStram进行数据的读取;后续Block按照此流程依次类推。

2HDFS写入数据:ClientNameNode发起写数据的请求,NameNode会决定把第一个Block及其副本写在哪些台机器(一般而言,如果有三个副本,那么两个副本在同一个Rack,另外一个副本在另一个机器中),但是实际上写入数据的时候,客户端只写入每个Block的第一个副本给HDFSClient写入每个Block的第一个副本后,该Block的副本是在NameNode的管理下基于第一个副本的数据进行Pipeline方式的写入。


  • HDFScommand-shell

http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-common/FileSystemShell.html

#hadoop fs -rm -r hdfs://master:9000/output2

注 : fs是一个用于操作HDFS的客户端程序-如果把HDFS看作是一个百度网盘的话,那么fs可以理解成百度云管家


  • HDFSAPI for java

http://hadoop.apache.org/docs/r2.6.4/api/index.html

  • 第一个HDFS应用程序之 向hdfs写入一个文件

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

/**
 * 第一个HDFS程序
 * function 体验hdfs API
 * @author pengyucheng
 * date 2016/04/24
 */
public class HelloHDFS
{
	public static void main(String[] args) throws IOException
	{
		String uri = "hdfs://112.74.21.122:9000";
		Configuration config = new Configuration();
		FileSystem fs = FileSystem.get(URI.create(uri), config);
		
		// 列出/input目录下的所有文件
		FileStatus[] statuses = fs.listStatus(new Path("/input"));
		for (FileStatus fileStatus : statuses) {
			System.out.println(fileStatus);
		}
		
		// 在/input目录下创建一个文件 test.log并写入数据
		FSDataOutputStream fsop = fs.create(new Path("/input/test.log"));
		fsop.write("Hello HDFS".getBytes());
		fsop.flush();
		fsop.close();
		
		// 在控制台输出test.log文件中的内容
		InputStream is = fs.open(new Path("/input/test.log"));
		IOUtils.copyBytes(is, System.out, 1024,true);
	}
}

总结

1、HDFS is the primary distributed storage used by Hadoop applications. A HDFS cluster primarily consists of a NameNode that manages the file system metadata and DataNodes that store the actual data.

2、HDFS是一个分布式文件系统,是一个软件系统,真实数据存储在Linux管理下的物理机器上.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值