赞
踩
引入:
上一篇文章中,我们看见了tmp文件下有个dfs文件夹,dfs中有存储主节点(NameNode)信息的name文件夹和存储从节点(dataNode)信息的data文件夹。接下来就详解一下这个dfs目录。
dfs的作用:
是HDFS的数据目录
dfs目录的位置:
dfs的目录是由etc/Hadoop/core-site.xml中的hadoop.tmp.dir来指定的。
dfs的目录结构:
in_use.lock:
进入tmp中的name目录或者data目录,可以看见除了current数据存储文件,还有有个in_use.lock,它的作用是,当对应进程开启的时候,HDFS对应的子目录下回出现in_use.lock。 in_use.lock标记已经开启进程,防止重复开启 。
txid:
在HDFS中,会将每一次的写操作看作是一个事务,分配一个事务id
hdfs的不可修改性:
hdfs中的文件一但上传就不可以修改,这是因为文件一但修改,另外两个备份也会要求修改,.meta数据发生改变,所以主节点的元数据也需要改变,这些工作量都太大了,所以不能修改。
edits文件和fsimage下载转化为xml的命令:
hdfs oev -i edits_xxx -o a.xml
hdfs oiv -i fsimage_xxx -o b.xml -p XML
1.在pom中导入依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.tedu</groupId> <artifactId>hdfs</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.1</version> </dependency> </dependencies> </project>
2.下载文件:
注意导入的包为:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;
import java.io.*;
import java.net.URI;
// 下载文件 @Test public void get() throws IOException { // 环境配置 Configuration conf = new Configuration(); // 连接HDFS FileSystem fs = FileSystem.get( URI.create("hdfs://10.9.162.121:9000"), // 连接地址 conf); // 指定下载的文件 InputStream in = fs.open(new Path("/a.txt")); // 指定写入的文件 FileOutputStream out = new FileOutputStream("D:\\a.txt"); // 读写文件 IOUtils.copyBytes(in, out, conf); // 关流 in.close(); out.close(); }
3.上传:
// 上传文件 @Test public void put() throws IOException, InterruptedException { // 凡是可以放到XXXX-site.xml中的属性都可以在这儿配置 Configuration conf = new Configuration(); // conf.set("dfs.replication", "4"); // conf.set("dfs.blocksize","56685"); FileSystem fs = FileSystem.get( URI.create("hdfs://10.9.162.112:9000"), conf, "root"); // 在HDFS上创建文件 OutputStream out = fs.create(new Path("/a.log")); // 创建输入流 FileInputStream in = new FileInputStream("D:\\a.txt"); // 写出数据 IOUtils.copyBytes(in, out, conf); // 关流 in.close(); out.close(); }
4.删除:
// 删除文件
@Test
public void delete() throws IOException, InterruptedException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(
URI.create("hdfs://10.9.162.178:9000"),
conf, "root");
// 删除
// 第二个参数表示是否允许递归删除
fs.delete(new Path("/log"), true);
}
因为使用起来很简单,这里就直接看图说话不解释了
注意:需要在自己的host文件中添加 IP+Hadoop名称 如:192.168.0.121 Hadoop01
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。