1.HDFS的设计:以流式数据访问模式来存储超大文件。构建思路:一次写入、多次读取的访问模式
2.HDFS数据块:默认大小64M;数据块大是为了最小化寻址开销。
3.显示块信息命令:% hadoop fsck / -files -blocks
4.HDFS 集群的两类节点:namenode(管理者),datanode(工作者)。
namenode管理文件系统的命名空间,维护HDFS所有的文件和目录。
datanode是文件系统的工作节点。受客户端或namenode调度去存储并检索数据块。
5.伪分布配置(core-site.xml)的某些属性:fs.default.name:用于设置hadoop的默认文件系统,如:hdfs://localhost/;dfs.replication:文件系统复本数,默认为3
6.% hadoop fs -copyFromLocal input/docs/test.txt hdfs://lcoalhost/user/test/test.txt
将本地文件复制到HDFS
7.hadoop文件系统
8. FileSystem 文件系统API
8.1 FileSystem 以标准输出格式显示hadoop文件系统中的文件
package com.hadoop.filesystem;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class FileSystemCat {
public static void main(String[] args) throws Exception {
String usi = args[0];
Configuration conf = new Configuration();//默认得到hadoop中conf/core-site.xml配置
FileSystem fs = FileSystem.get(URI.create(usi), conf);//得到FileSystem文件系统对象
FSDataInputStream in = fs.open(new Path(usi));//获取文件输入流,默认缓存大小为4kb
IOUtils.copyBytes(in, System.out, 4096, false);//输出数据
IOUtils.closeStream(in);
}
}
方法步骤:
1,生成jar包,并放到hadoop集群上
2.执行hadoop FileSystemCat hdfs://localhost/user/test/test.xml
8.2 FSDataInputStream in = fs.open(new Path(usi));
in.seek(0);//seek()可以移到文件任意一个绝对位置,此方法开销大
8.3 FSDataInputStream in = fs.open(new Path(usi));
in.read(position, buffer, offset, length)//从文件指定的position位置读取length字节数据到buffer缓存指定的偏移量offset处
8.4 FileSystem fs = FileSystem.get(URI.create(uri), conf);
FSDataOutputStream out = fs.create(new Path(uri),new Progressable() {//得到输出流,实现hadoop写数据操作
@Override
public void progress() {
//----
}
});
8.5
FileSystem fs = FileSystem.get(URI.create(uri), conf);
fs.mkdirs(new Path(uri));//创建目录
8.6 FileStatus文件元数据:
FileStatus fileStatus = fs.getFileStatus(new Path(uri));
fileStatus.getPath().toUri();
fileStatus.isDir();
fileStatus.getOwner();
8.7 列出文件:fs.listStatus(new Path(uri))
8.8 文件模式批量操作:fs.globStatus(new Path(uri))
8.9 删除数据:fs.delete(path,recusive);//recusive=true path下有目录或文件才能删除
9.distcp 进行并行复制:
9.1 hadoop distcp HDFS://namenode1/foo hdfs://namenode2/bar
9.2 hadoop distcp -overwrite HDFS://namenode1/foo hdfs://namenode2/bar
-overwrite:覆盖现有文件
-update:更新修改过的文件
10 hadoop存档工具:archive
hadoop archive -archiveName files.har /my/files /my
archiveName :存档文件名称files.har,源文件在HDFS下的 /my/files中,输出目录是 /my