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操作的更多相关文章

  1. Hadoop之HDFS(一)HDFS入门及基本Shell命令操作

    1 . HDFS 基本概念 1.1  HDFS 介绍 HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统.是 Hadoop 核心组件之 ...

  2. Hadoop(三)HDFS读写原理与shell命令

    一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...

  3. 利用Shell命令与HDFS进行交互

    以”./bin/dfs dfs”开头的Shell命令方式 1.目录操作 在HDFS中为hadoop用户创建一个用户目录(hadoop用户) 在用户目录下创建一个input目录, HDFS的根目录下创建 ...

  4. Linux shell命令:用 !$ 防止误操作

    shell 的通配符匹配非常强大,不过也非常危险,不少同学都碰到这样的问题,比如 rm a*,结果一个手抖,a 和星号之间多了个空格,结果目录下的文件都灰飞烟灭了…… bash 支持一个特殊的变量 ! ...

  5. Python 自动化paramiko操作linux使用shell命令,以及文件上传下载linux与windows之间的实现

    # coding=utf8 import paramiko """ /* python -m pip install paramiko python version 3. ...

  6. HDFS 常用Shell命令

    HDFS Shell命令 概述 HDFS Shell命令允许使用命令行在HDFS存储中进行文件夹和文件操作. 如文件夹的增删改查.文件的增删改查等. 开始练习hadoop时,打开Linux之后要用 s ...

  7. Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)

    在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...

  8. HBase 安装与配置及常用Shell命令

    HBase 安装与配置 首要配置 配置时间同步(所有节点上执行) yum -y install chrony vi /etc/chrony.conf #写入(7版本用server:8版本用pool): ...

  9. Shell脚本中执行sql语句操作mysql

    对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...

  10. 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 =  ...

随机推荐

  1. 自定义Lock实现

    1 package com.wyt.lock.test; 2 3 import java.util.concurrent.LinkedBlockingQueue; 4 import java.util ...

  2. angular 路由守卫Observable异步请求串联

    假设路由守卫有这种场景 需要使用observable同时发送多个Http 请求,判断request2返回的数据中是否存在request1返回的数据 使用async await export class ...

  3. winform 容器内存泄漏

    循环中释放容器时调用Dispose()方法会销毁对象,导致容器的个数变化. 正确示例//方法一for (int i = this.flowLayoutPanel1.Controls.Count-1; ...

  4. git如何把本地文件夹和远程仓库关联

    场景: 1,有一个本地项目,没有上传到git过,你在远程新建了一个仓库,想把这个本地的代码推送到该仓库 2,直接想把本地代码推送到远程并创建该本地文件对应的仓库(这种情况不可以实现) 解决方法: 本地 ...

  5. 暗黑破坏神2:Tab打开地图就变卡顿解决办法

    我是VM虚拟机安装的WIN XP,系统镜像是:zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14.iso 以前也是这个系 ...

  6. Docker CLI docker buildx bake 常用命令

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.Docker是内核 ...

  7. 对比学习InfoNCE loss之“搬砖学习”

    以下链接讲解清晰,供参考 对比学习损失(InfoNCE loss)与交叉熵损失的联系,以及温度系数的作用 - 知乎 (zhihu.com)

  8. MySQL 列定义的类型是varchar,已建立索引,查询时如果传入的是数字,则无法利用索引,查询特别慢。

    类型不对,导致无法充分利用索引. 比如:select * from table_name_xxx where name = "1234";  ----  查询很快 ,能够使用到na ...

  9. SpringBoot启动流程简要分析

    声明 源码基于Spring Boot 2.3.12.RELEASE 背景 此文的目的主要想弄明白为什么在Spring Boot中注册Servlet.Filter.Listener组件时需要加上@Ser ...

  10. vue请求插件axios响应拦截302

    axios.interceptors.response.use(function (response) { return response;}, function (error) { // 对请求错误 ...