分布式文件系统HDFS

本文介绍了Hadoop分布式文件系统(HDFS)的基本概念,包括其块、名称节点和数据节点等关键组件。详细阐述了HDFS如何通过多副本的方式进行数据冗余存储以确保系统的容错性和可用性,并介绍了HDFS的数据存取策略。
摘要由CSDN通过智能技术生成

1.简介

大数据时代必须解决海量数据的高效存储问题,为此,谷歌开发了分布式文件系统(Google File System,GFS),通过网络实现文件在多台机器上的分布式存储,较好地满足了大数据存储的要求.Hadoop分布式文件系统是针对GFS的开源实现,他是Hadoop两大核心组成部分之一,类似于FAT32,NTFS,是一种文件格式,是底层的。

2.HDFS相关概念

2.1块
2.2名称节点和数据节点

3.HDFS的存储原理

3.1数据的冗余存储
作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据惊醒冗余存储,通常一个数据块的多个副本会被分不到不同的数据节点上.
3.2数据存取策略
(1)数据存放
HDFS采用了以机架为基础的数据存放策略.HDFS默认的冗余复制因子是3,每一个文件快会被同时保存到3个地方

(2)数据读取
HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID

四.数据读写过程

4.1读数据过程

import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;

public class Chapter3 {    
        public static void main(String[] args) { 
                try {
                        Configuration conf = new Configuration();  
                        conf.set("fs.defaultFS","hdfs://localhost:9000");
                        conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                        FileSystem fs = FileSystem.get(conf);
                        byte[] buff = "Hello world".getBytes(); // 要写入的内容
                        String filename = "test"; //要写入的文件名
                        FSDataOutputStream os = fs.create(new Path(filename));
                        os.write(buff,0,buff.length);
                        System.out.println("Create:"+ filename);
                        os.close();
                        fs.close();
                } catch (Exception e) {  
                        e.printStackTrace();  
                }  
        }  
}
4.2写数据过程

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;

public class Chapter3 {
        public static void main(String[] args) {
                try {
                        Configuration conf = new Configuration();
                        conf.set("fs.defaultFS","hdfs://localhost:9000");
                        conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                        FileSystem fs = FileSystem.get(conf);
                        Path file = new Path("test"); 
                        FSDataInputStream getIt = fs.open(file);
                        BufferedReader d = new BufferedReader(new InputStreamReader(getIt));
                        String content = d.readLine(); //读取文件一行
                        System.out.println(content);
                        d.close(); //关闭文件
                        fs.close(); //关闭hdfs
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值