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. 新手搭建Git与项目整合

    新手搭建Git,将代码托管到码云 如果你还没有使用过Git,首先先去https://gitee.com/注册一个自己的账户,然后在https://git-scm.com/下载一个客户端(提交代码到码云 ...

  2. 12.java链表栈和数组栈

    栈是一个先入后出的有序列表,栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,一端为变化的一端,称为栈顶,另一端是固定的,称为栈底.先入的元素在栈底,最后放入的元素在栈顶,删除 ...

  3. Pytorch实战学习(二):用Pytorch实现逻辑回归

    <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili 用Pytorch实现逻辑回归 Logistic Regression 从线性回归 →​ 逻辑回归 1.分类问题 计算属于 ...

  4. ES实战-trying to create too many buckets

    场景 es查询报错,报错如下: trying to create too many buckets. must be less than or equal to: [10000] but was [1 ...

  5. (0807) import 与 include文件

    1)验证中filelist以及package https://blog.csdn.net/geter_CS/article/details/125689476 总结来说:规则是,要想使用某个文件内容, ...

  6. WPF materialDesign 锁屏后界面卡死问题解决

    materialDesign的一个缓存机制问题,在xaml文件中Window属性添加一行: materialDesign:ShadowAssist.CacheMode="{x:Null}&q ...

  7. 搭建Kubord管理k8s/EKS以及Harbor私有仓库教程

    eks首先要去aws后台进行创建,这里不再讲解详细的过程,下面讲解如果通过命令行以及kuboard调度esk服务. 安装docker以及docker-compose yum install docke ...

  8. mybatis_01 初运行

    maven坐标 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</ ...

  9. [.Net] 【笔记】基于.NET平台常用的框架整理(转载,侵删)

    分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度. Redis:是一个高性能的K ...

  10. 浅谈Redis大Key与热Key

    如何定义大 Key 和 热 Key 如何定义大 Key 如何定义热 Key 大 Key 和 热 Key 产生的原因 大 Key 和 热 Key 有哪些危害 大 Key 的危害 热 Key 的危害 如何 ...