hdfs
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目 录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务 器有各自的角色。 HDFS 的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭 之后就不需要改变。
优缺点
组成架构
hadoop_hdfs_shell
查看全部命令
hadoop fs
查看命令帮助
hadoop fs -help rm
创建文件
hadoop fs -mkdir sanguo
从本地上传文件(从本地剪切)
hadoop fs -moveFromLocal ./suguo.txt /sanguo
从本地上传文件(从本地复制)
hadoop fs -copyFromLocal weiguo.txt /sanguo
也可以使用put
hadoop fs -put weiguo.txt
追加到文件末尾
hadoop fs -appendToFile liubei.txt /sanguo/suguo.txt
从 HDFS 拷贝到本地
hadoop fs -copyToLocal /sanguo/shuguo.txt ./
或
hadoop fs -get /sanguo/shuguo.txt ./shuguo2.txt
常用命令
1)-ls: 显示目录信息
hadoop fs -ls /sanguo
2)-cat:显示文件内容
hadoop fs -cat /sanguo/shuguo.txt
3)-chgrp、-chmod、-chown:Linux 文件系统中的用法一样,修改文件所属权限
hadoop fs -chmod 666 /sanguo/shuguo.txt
hadoop fs -chown atguigu:atguigu /sanguo/shuguo.txt
4)-mkdir:创建路径
hadoop fs -mkdir /jinguo
5)-cp:从 HDFS 的一个路径拷贝到 HDFS 的另一个路径
hadoop fs -cp /sanguo/shuguo.txt /jinguo
6)-mv:在 HDFS 目录中移动文件
hadoop fs -mv /sanguo/wuguo.txt /jinguo
hadoop fs -mv /sanguo/weiguo.txt /jinguo
7)-tail:显示一个文件的末尾 1kb 的数据
hadoop fs -tail /jinguo/shuguo.txt
8)-rm:删除文件或文件夹
hadoop fs -rm /sanguo/shuguo.txt
9)-rm -r:递归删除目录及目录里面内容
hadoop fs -rm -r /sanguo
10)-du 统计文件夹的大小信息
hadoop fs -du -s -h /jinguo
hadoop fs -du -h /jinguo(会显示目录下的文件)
11)-setrep:设置 HDFS 中文件的副本数量
hadoop fs -setrep 10 /jinguo/shuguo.txt
这里设置的副本数只是记录在 NameNode 的元数据中,是否真的会有这么多副本,还得 看 DataNode 的数量。因为目前只有 3 台设备,最多也就 3 个副本,只有节点数的增加到 10 台时,副本数才能达到 10。
hadoop_hdfs_api
在windows上安装好hadoop
创建meaven工程
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
log4j.properties
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
创建文件
package com.atguigu.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class HDFSClient {
@Test
public void testMkdir() throws URISyntaxException, IOException, InterruptedException {
URI uri = new URI("hdfs://hadoop102:9000");
String user="root";
Configuration configuration = new Configuration();
FileSystem fs = FileSystem.get(uri, configuration,user);
fs.mkdirs(new Path("/xiyou"));
fs.close();
}
}
文件上传
package com.atguigu.hdfs;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class HDFSClient {
private FileSystem fs;
@Before
public void init() throws IOException, InterruptedException, URISyntaxException {
URI uri = new URI("hdfs://hadoop102:9000");
String user="root";
Configuration configuration = new Configuration();
fs = FileSystem.get(uri, configuration,user);
}
@Test
public void testMkdir() throws IOException {
fs.mkdirs(new Path("/xiyou"));
}
@Test
public void testPut() throws IOException, URISyntaxException, InterruptedException {
fs.copyFromLocalFile(false,false,new Path("src\\sunwukong"),new Path("/xiyou"));
}
@After
public void close() throws IOException {
fs.close();
}
}
hdfs配置优先级
hdfs-default.xml => hdfs-site.xml => 在项目资源目录下配置的文件 => 代码里面的配置
|