【Hadoop】Hadoop生态系列之HDFS常用Shell命令实践及Java API操作HDFS
2023-09-11 14:22:06 时间
指路牌
HDFS实践
HDFS Shell 命令(常用)
打印hadoop类路径
[root@CentOS ~]# hdfs classpath
格式化NameNode
[root@CentOS ~]# hdfs namenode -format
dfsadmin命令
①可以使用-report -live
或者-dead
查看集群中dataNode节点状态
[root@CentOS ~]# hdfs dfsadmin -report -live
②使用-safemode enter|leave|get
等操作安全模式
[root@CentOS ~]# hdfs dfsadmin -safemode get
Safe mode is OFF
③查看集群网络拓扑
[root@CentOS ~]# hdfs dfsadmin -printTopology
Rack: /default-rack
192.168.73.130:50010 (CentOS)
更多请参考: HDFS常用命令
检查某个目录状态
[root@CentOS ~]# hdfs fsck /
DFS命令
[root@CentOS ~]# hdfs dfs -命令 选项
# 或者老版本写法
[root@CentOS ~]# hadoop fs -命令 选项
-appendToFile
将anaconda-ks.cfg
追加到aa.log
中
[root@CentOS ~]# hdfs dfs -appendToFile /root/anaconda-ks.cfg /aa.log
[root@CentOS ~]# hdfs dfs -appendToFile /root/anaconda-ks.cfg /aa.log
[root@CentOS ~]#
-cat
查看文件内容
[root@CentOS ~]# hdfs dfs -cat /aa.log
# 等价
[root@CentOS ~]# hdfs dfs -cat hdfs://CentOS:9000/aa.log
-chmod
修改文件权限
[root@CentOS ~]# hdfs dfs -chmod -R u+x /aa.log
[root@CentOS ~]# hdfs dfs -chmod -R o+x /aa.log
[root@CentOS ~]# hdfs dfs -chmod -R a+x /aa.log
[root@CentOS ~]# hdfs dfs -chmod -R a-x /aa.log
-copyFromLocal / -copyToLocal
copyFromLocal
本地上传到HDFS;copyToLocal
从HDFS上下载文件
[root@CentOS ~]# hdfs dfs -copyFromLocal jdk-8u191-linux-x64.rpm /
[root@CentOS ~]# rm -rf jdk-8u191-linux-x64.rpm
[root@CentOS ~]# hdfs dfs -copyToLocal /jdk-8u191-linux-x64.rpm /root/
[root@CentOS ~]# ls
anaconda-ks.cfg hadoop-2.9.2.tar.gz jdk-8u191-linux-x64.rpm
-mvToLocal/mvFromLocal
mvToLocal
先下载文件,然后删除远程数据;
mvFromLocal
:先上传,再删除本地
[root@CentOS ~]# hdfs dfs -moveFromLocal jdk-8u191-linux-x64.rpm /dir1
[root@CentOS ~]# ls
anaconda-ks.cfg hadoop-2.9.2.tar.gz
[root@CentOS ~]# hdfs dfs -moveToLocal /dir1/jdk-8u191-linux-x64.rpm /root
moveToLocal: Option '-moveToLocal' is not implemented yet.
-put/get
文件上传/下载
[root@CentOS ~]# hdfs dfs -get /dir1/jdk-8u191-linux-x64.rpm /root
[root@CentOS ~]# ls
anaconda-ks.cfg hadoop-2.9.2.tar.gz jdk-8u191-linux-x64.rpm
[root@CentOS ~]# hdfs dfs -put hadoop-2.9.2.tar.gz /dir1
更多命令请使用
[root@CentOS ~]# hdfs dfs -help 命令
例如,想知道touchz该如何使用
[root@CentOS ~]# hdfs dfs -touchz /dir1/Helloworld.java
[root@CentOS ~]# hdfs dfs -ls /dir1/
Found 5 items
-rw-r--r-- 1 root supergroup 0 2020-09-25 23:47 /dir1/Helloworld.java
drwxr-xr-x - root supergroup 0 2020-09-25 23:07 /dir1/d1
drwxr-xr-x - root supergroup 0 2020-09-25 23:09 /dir1/d2
-rw-r--r-- 1 root supergroup 366447449 2020-09-25 23:43 /dir1/hadoop-2.9.2.tar.gz
-rw-r--r-- 1 root supergroup 176154027 2020-09-25 23:41 /dir1/jdk-8u191-linux-x64.rpm
Java API操作HDFS(了解)
搭建开发步骤:
①IDEA创建一个Maven的项目(不选任何模板),在pom.xml文件中添加如下依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.9.2</version>
</dependency>
②配置windows开发环境(必配)
-
需要将
hadoop-2.9.2.tar.gz
解压在window的指定目录下,比如这里我们解压在E:/
目录下 -
在Windows系统的环境变量中添加
HADOOP_HOME
环境变量,值为Hadoop的根目录 -
将
hadoop-window-master.zip
中的bin
目录下的文件全部拷贝到%HADOOP_HOME%/bin
目录下进行覆盖 -
重启IDEA否则集成开发环境不识别配置
HADOOP_HOME
环境变量
③建议将Hadoop压缩包中的core-site.xml
和hdfs-site.xml
文件拷贝到项目的resources
目录下
④在Windows上配置主机名和IP的映射关系(略)
⑤新建一个class文件,创建FileSystem
和Configuration
对象
public static FileSystem fs=null;
public static Configuration conf=null;
static {
try {
conf= new Configuration();
conf.addResource("core-site.xml");
conf.addResource("hdfs-site.xml");
fs=FileSystem.get(conf);
} catch (IOException e) {
e.printStackTrace();
}
}
文件上传
Path src = new Path("file://xx路径");
Path dst = new Path("/");
fs.copyFromLocalFile(src,dst);
-
InputStream in=new FileInputStream("file://xx路径");
Path dst = new Path("/xx路径");
OutputStream os=fs.create(dst);
IOUtils.copyBytes(in,os,1024,true);
文件下载
Path dst = new Path("file://xx路径");
Path src = new Path("/xx路径");
fs.copyToLocalFile(src,dst);
-
Path dst = new Path("/xx路径");
InputStream in= fs.open(dst);
OutputStream os=new FileOutputStream("file://xx路径");
IOUtils.copyBytes(in,os,1024,true);
删除文件
Path dst = new Path("/system");
fs.delete(dst,true);
回收站
Path dst = new Path("/aa.log");
Trash trash=new Trash(fs,conf);
trash.moveToTrash(dst);
所有文件
Path dst = new Path("/");
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(dst, true);
while (listFiles.hasNext()){
LocatedFileStatus fileStatus = listFiles.next();
System.out.println(fileStatus.getPath()+" "+fileStatus.isDirectory()+" "+fileStatus.getLen());
}
所有文件或文件夹
Path dst = new Path("/");
FileStatus[] fileStatuses = fs.listStatus(dst);
for (FileStatus fileStatus : fileStatuses) {
System.out.println(fileStatus.getPath()+" "+fileStatus.isDirectory());
}
相关文章
- Java运算符,关系运算符
- Hadoop程序运行中的Error(1)-Error: org.apache.hadoop.hdfs.BlockMissingException
- java - 详解 Java 17 中新推出的密封类
- Java核心技术 卷Ⅰ 基础知识(原书第10版)
- Java中的IO流的介绍(二)
- Predicate和Consumer接口– Java 8中java.util.function包下的接口
- Java详解,java后端应届生面试题
- 最新秋招,Java八股文!含答案,JAVA核心知识点最详细版(面试必备)
- 34 异常机制 异常体系结构 Java把异常当做对象来处理 并定义一个基类java.lang.Throwable作为所有异常的超类 Error Exception
- 第七节:详细讲解Java中的日期,java.util.date
- 【数据结构】Java版
- 使用Java正则表达式提取字符串中的数字一例
- 【Java实习生】每日10道面试题打卡!
- Java IDEA中设置导入import java.xx.*和设置导入具体的import java.xx.yy;
- Java中String和byte[]间的 转换浅析
- Java NIO详细介绍
- Java学习-001-JDK安装配置
- Java打印输出:java天龙八部私服
- Java并发编程:synchronized
- 浅析Java对集合进行操作时报java.util.ConcurrentModificationException并发修改异常问题:产生原因、单线程/多线程环境解决、CopyOnWriteArrayList线程安全的ArrayList、fail-fast快速失败机制防止多线程修改集合造成并发问题
- 华为OD机试 -字符串变换最小字符串(Java) | 机试题+算法思路+考点+代码解析 【2023】
- How to improve Java's I/O performance( 提升 java i/o 性能)
- JAVA中字符串比較equals()和equalsIgnoreCase()的差别
- WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
- 【大数据Hadoop】macbookpro m1/m2 arm 编译hadoop-3.3.1
- Java小白入门200例61之java中Date日期类型的大小比较
- java-常见问题
- 【Java笔记】配置文件java.util.Properties类的使用