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();
}
}
}