HDFS的shell命令行操作
例如: $ hadoop fs -ls /
-help |—— 功能:输出这个命令参数手册
-ls |—— 功能:显示目录信息
示例: hadoopfs−lshdfs://Master:9000/备注:这些参数中,所有的hdfs路径都可以简写,–> h a d o o p f s − l s h d f s : / / M a s t e r : 9000 / 备 注 : 这 些 参 数 中 , 所 有 的 h d f s 路 径 都 可 以 简 写 , – > hadoop fs -ls / 等同于上一条命令的效果-mkdir |—— 功能:在hdfs上创建目录
示例:hadoop fs -mkdir -p /aaa/bbb/cc/dd-moveFromLocal |—— 功能:从本地剪切粘贴到hdfs
示例:hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
-moveToLocal |—— 功能:从hdfs剪切粘贴到本地
示例:hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt–appendToFile |—— 功能:追加一个文件到已经存在的文件末尾
示例:hadoop fs -appendToFile ./hello.txt hdfs://Master:9000/hello.txt
可以简写为: Hadoop fs -appendToFile ./hello.txt /hello.txt-cat |—— 功能:显示文件内容
示例:hadoop fs -cat /hello.txt
-tail |—— 功能:显示一个文件的末尾
示例:hadoop fs -tail /weblog/access_log.1
-text |—— 功能:以字符形式打印一个文件的内容
示例:hadoop fs -text /weblog/access_log.1-chgrp(只是更改文件的属组) -chmod(更改文件的权限) -chown(改文件的属主与属组)
示例: hadoop fs -chmod 666 /hello.txt
hadoop fs -chown someuser:somegrp /hello.txt-cp |—— 功能:从hdfs的一个路径拷贝hdfs的另一个路径
示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-mv |—— 功能:在hdfs目录中移动文件
示例: hadoop fs -mv /aaa/jdk.tar.gz /-get |—— 功能:等同于copyToLocal,就是从hdfs下载文件到本地
示例:hadoop fs -get /aaa/jdk.tar.gz
-getmerge |—— 功能:合并下载多个文件
示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
hadoop fs -getmerge /aaa/log.* ./log.sum-put |—— 功能:等同于copyFromLocal
示例:hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2-rm |—— 功能:删除文件或文件夹
示例:hadoop fs -rm -r /aaa/bbb/-rmdir |—— 功能:删除空目录
示例:hadoop fs -rmdir /aaa/bbb/ccc-df |—— 功能:统计文件系统的可用空间信息
示例:hadoop fs -df -h /
-du |—— 功能:统计文件夹的大小信息
示例: hadoop fs -du -s -h /aaa/*-count |—— 功能:统计一个指定目录下的文件节点数量
示例:hadoop fs -count /aaa/-setrep |—— 功能:设置hdfs中文件的副本数量
示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz
<这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量
Hdfs的Java接口
获取api中的客户端对象:
@Before
public void init() throws Exception {
// 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI
// 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址
// new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml
// 然后再加载classpath下的hdfs-site.xml
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://Master:9000");
// 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置
conf.set("dfs.replication", "3");
// 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户
fs = FileSystem.get(new URI("hdfs:///Master:9000"), conf, "hadoop");
}
具体使用的例子::
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
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.Before;
import org.junit.Test;
public class HdfsJava {
FileSystem fs = null;
// 初始化 为"hadoop"用户 ,有权限修改
@Before
public void init() throws IOException, URISyntaxException, InterruptedException {
fs = FileSystem.get(new URI("hdfs://Master:9000"), new Configuration(), "hadoop");
}
// 从本地上传一个文件到hdfs中,--> fs.create
@Test
public void testUpload() throws IllegalArgumentException, IOException {
InputStream in = new FileInputStream("/home/hadoop/examples/friends/friends.jar");
OutputStream out = fs.create(new Path("/data/demon/friends/abc/friends.jar"));
IOUtils.copyBytes(in, out, 4096, true);
}
// 从hdfs中下载一个文件到本地里, --> fs.copyFromLocalFile
/*@Test
public void testDownload() throws IllegalArgumentException, IOException {
fs.copyFromLocalFile(new Path("/data/demon/friends/input/fri.txt"), new Path("/home/hadoop/examples/friends"));
}*/
// 创建一个文件夹,--> fs.mkdirs
@Test
public void TestDFSMkdirs() throws IllegalArgumentException, IOException {
boolean mkdir = fs.mkdirs(new Path("/data/demon/friends/abc"));
System.out.println(mkdir);
}
// 删除一个文件夹/文件, --> fs.delete, 其中 true 表示递归删除
@Test
public void testDel() throws IllegalArgumentException, IOException {
boolean flag = fs.delete(new Path("/data/demon/friends/abc"), true);
System.out.println(flag);
}
// 查看文件及文件夹信息
@Test
public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
FileStatus[] listStatus = fs.listStatus(new Path("/"));
String flag = "d-- ";
for (FileStatus fstatus : listStatus) {
if (fstatus.isFile()) flag = "f-- ";
System.out.println(flag + fstatus.getPath().getName());
}
}
// 通过流的方式访问 hdfs
public static void main(String[] args) throws IOException, URISyntaxException {
FileSystem fs = FileSystem.get(new URI("hdfs://Master:9000"), new Configuration());
// --> fs.open
InputStream in = fs.open(new Path("/data/demon/friends/input/fri.txt"));
OutputStream out = new FileOutputStream("/home/hadoop/examples/friends/fri.txt");
// 将输入流中数据传输到输出流, ----> *IOUtils.copyBytes*
IOUtils.copyBytes(in, out, 4096, true);
}
}
总结:
***1. fs.create
2. fs.copyFromLocalFile
3. fs.mkdirs
4. fs.delete
5. fs.open
6. IOUtils.copyBytes***