hdfs操作——hdfs的shell命令和hdfs的JavaAPI操作
hdfs解决hadoop海量数据的存储。
shell 命令(所有hadoop fs 可由 hdfs dfs代替)
(1) 在hdfs上创建目录
hadoop fs -mkdir 目录名
(2) 本地文件的上传
hadoop fs -copyFromLocal 本地文件路径 目标目录路径 (复制)
hadoop fs -moveFromLocal 本地文件路径 目标目录路径 (剪切)
hadoop fs -put 本地文件路径 目标目录路径 (复制常用)
hadoop fs -appendToFile 本地文件路径 目标文件路径 (将本地文件内容追加到目标文件末尾)
(3)文件下载
hadoop fs -copyToLocal hdfs文件路径 本地目录路径
hadoop fs -get hdfs文件路径 本地目录路径
(4) HDFS直接操作
hadoop fs -ls 目标目录信息 (显示目录信息)
hadoop fs -cat 目标文件 (显示文件内容)
hadoop fs -chgrp、-chmod、-chown 文件 (修改文件所属权限)
hadoop fs -mkdir 文件路径 (创建路径)
hadoop fs -cp 原文件/目录路径 目标文件/目录路径 (从HDFS的一个路径拷贝到HDFS的另一个路径)
hadoop fs -mv 原文件/目录路径 目标文件/目录路径 (在HDFS目录中移动文件
hadoop fs -rm 目标文件 (删除文件或文件夹)
hadoop fs -rm -r 目标文件 (递归删除目录及目录里面内容)
hadoop fs -du 目标文件 (统计文件夹的大小信息)
hadoop fs -setrep 数量 目标文件 (设置HDFS中文件的副本数量,注意副本数量有实际节点数量的最大限度)
Hdfs的Java API操作
首先通过windows使用javaAPI对hdfs文件进行操做,需要在windows上安装hadoop并配置环境变量


创建maven工程
在pom.xml添加依赖
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.3</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>
对hdfs的文件操作流程一般都是3步:(1)获取客户端对象(2)执行命令操作(3)关闭资源
在resources创建配置文件
创建hdfs-site.xml,可以根据需求改一些参数(当然也可以不建在代码中修改)
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
注意参数的使用
/**
* 参数优先级
* hdfs-default.xml => hdfs-site.xml => 在项目资源目录下配置文件 => 代码里面的配置,如configuration.set("dfs.replication","1");
*/
创建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.rsh.hdfs; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays; /**
* 1. 获取客户端对象
* 2. 执行命令
* 3. 关闭资源
* hdfs和zookeeper
*/ public class HdfsClient { /**
* 参数优先级
* hdfs-default.xml => hdfs-site.xml => 在项目资源目录下配置文件 => 代码里面的配置,如configuration.set("dfs.replication","1");
*/
private FileSystem fs; @Before
public void init() throws URISyntaxException, IOException, InterruptedException {
URI uri = new URI("hdfs://hadoop102:8020");
Configuration configuration = new Configuration();
configuration.set("dfs.replication","1");
fs = FileSystem.get(uri,configuration,"rsh");
} //创建文件
@Test
public void testMkdirs() throws URISyntaxException, IOException, InterruptedException {
//2.创建目录
fs.mkdirs(new Path("/wangjianmin/SoftEngineer"));
} //上传
@Test
public void testPut() throws IOException {
//参数一:是否删除本地原数据,参数二:是否允许覆盖,参数三:原数据路径,参数四:目的路径
fs.copyFromLocalFile(true,true,new Path("D:\\mavenproject\\hadooptest\\src\\main\\demo\\bigdata2.txt"),new Path("hdfs://hadoop102/wangjianmin/bigdata"));
} //下载
@Test
public void testGet() throws IOException {
//参数一:是否删除hdfs上的原数据,参数二:原数据路径,参数三:本地目标文件路径,参数四:是否开启本地数据校验
fs.copyToLocalFile(false,new Path("hdfs://hadoop102/wangjianmin"),new Path("D:\\mavenproject\\hadooptest\\src\\main\\demo"),true);
} //删除
@Test
public void testRm() throws IOException {
/**
* 可以删除文件
* 可以删除目录,党删除非空目录时,要递归删除
*/
//fs.delete(new Path("/jdk-8u212-linux-x64.tar.gz")); //删除文件
//fs.delete(new Path("/wcinput"),false); //删除空目录
fs.delete(new Path("/computer"),true);
} //更名和移动
@Test
public void testmv() throws IOException {
fs.rename(new Path(""),new Path(""));
} //读取文件信息
@Test
public void fileDetail() throws IOException {
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()){
LocatedFileStatus fileStatus = listFiles.next();
System.out.println("------"+fileStatus.getPath()+"-------");
System.out.println(fileStatus.getOwner());
System.out.println(fileStatus.getGroup());
System.out.println(fileStatus.getLen());
System.out.println(fileStatus.getPermission());
System.out.println(fileStatus.getModificationTime());
System.out.println(fileStatus.getReplication());
System.out.println(fileStatus.getPath().getName());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
System.out.println(Arrays.toString(blockLocations));
}
}
@After
public void close() throws IOException {
fs.close();
}
}
hdfs操作——hdfs的shell命令和hdfs的JavaAPI操作的更多相关文章
- Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
1 . HDFS 基本概念 1.1 HDFS 介绍 HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统.是 Hadoop 核心组件之 ...
- Hadoop(三)HDFS读写原理与shell命令
一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...
- 利用Shell命令与HDFS进行交互
以”./bin/dfs dfs”开头的Shell命令方式 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(hadoop用户) 在用户目录下创建一个input目录, HDFS的根目录下创建 ...
- Linux shell命令:用 !$ 防止误操作
shell 的通配符匹配非常强大,不过也非常危险,不少同学都碰到这样的问题,比如 rm a*,结果一个手抖,a 和星号之间多了个空格,结果目录下的文件都灰飞烟灭了…… bash 支持一个特殊的变量 ! ...
- Python 自动化paramiko操作linux使用shell命令,以及文件上传下载linux与windows之间的实现
# coding=utf8 import paramiko """ /* python -m pip install paramiko python version 3. ...
- HDFS 常用Shell命令
HDFS Shell命令 概述 HDFS Shell命令允许使用命令行在HDFS存储中进行文件夹和文件操作. 如文件夹的增删改查.文件的增删改查等. 开始练习hadoop时,打开Linux之后要用 s ...
- Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)
在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...
- HBase 安装与配置及常用Shell命令
HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...
- Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- nodejs 执行shell 命令
有需要从前端操作服务器执行shell命令的需求 建立一个process.js文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var process = ...
随机推荐
- ANSI/Unicode字符串简单介绍
1.1.wchar_t.char区别 ANSI:char,可以用strcat().strcpy().strlen()等str开头的函数处理char*字符串: UNICODE:wchar_t是Unico ...
- CompletableFuture事务问题
前段时间写了关于CompletableFuture的使用博客,CompletableFuture使用方法详细说明 和 CompletableFuture的thenCompose使用具体说明. 但在实际 ...
- CentOS 7 忘记root密码的解决方法
这是自己忘记密码root密码第二次了,可以再一再二但是不能再三.因此在此记录在网上找的 如何更换root密码的方法. (这篇文章是参考https://blog.csdn.net/q290994/art ...
- db2存储过程 动态拼接sql 、输出数据集示例
*****部分都是表名.因为隐私关系,替换为*了. 1 CREATE PROCEDURE "BI_DM"."SP_GCYP_REPORT" ( 2 startd ...
- webpack的加载器兼容配置一览
"devDependencies": { "css-loader": "^3.2.1", "file-loader": ...
- 12组-Beta冲刺-1/5
12组-Beta冲刺-1/5 一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15590128.html Github链接:http ...
- pytorch的三种量化方式详解
pytorch的三种量化方式详解 这篇博客详细介绍了pytorch官方教程提到的三种量化方式的原理,详细解释了三种量化方式的区别: 1. 静态量化 :torch.quantize_per_tensor ...
- 记录一次在deepin安装node版本管理工具nvm的过程
安装nvm sudo apt-get install git -y # 安装git cd /home # 随便找个目录放代码 git clone https://github.com/nvm-sh/n ...
- android系统源码编译报错问题分析处理--持续更新
一.build/make/core/base_rules.mk:232: error: packages/services/Car/service: LOCAL_BUILT_MODULE and LO ...
- 详解 C++ 左值、右值、左值引用以及右值引用
一.左值和右值 1.左值 [可以取地址的对象就是左值] 左值是一个表示数据的表达式,比如:变量名.解引用的指针变量.一般地,我们可以获取它的地址和对它赋值,但被 const 修饰后的左值,不能给它赋值 ...