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. centos7安装php8

    原文: http://www.manongjc.com/detail/25-qpyxndyogppmfdf.html 前言 centos7默认源的php版本只有5.4,版本太老,而mediawiki需 ...

  2. winform Message应用

    今天遇到了一个问题,winform 中使用自定义控件时,希望在点击自定义控件时设置控件为选中状态.而且这个自定义控件在一个窗体中被创建多个. 但在自定义控件中添加子控件后,导致鼠标点击事件只能响应在子 ...

  3. vscode中配置代码片段

    首先我们需要把要配置的代码复制一下,如: 然后我们进入https://snippet-generator.app/网站, 进入网站之后就把你复制的代码粘贴到左边的框里面,然后就是代码的类型和命名了 写 ...

  4. python菜鸟学习 : 16 pymongo和openpyxl的联合使用

    # -*- coding: utf-8 -*-import pymongo, openpyxl, time# pymongo#条件删选mongodb数据def mongodb_expoter(db_n ...

  5. (原创)odoo中字段默认值的获取顺序

    odoo中某个字段的默认值的取值顺序 1.搜索当前记录集(recordset)中的context中是否存在"default_字段名"的键,如果存在则取值 2.搜索模型(ir.def ...

  6. linux交叉编译libiconv

    1.解压libiconv-1.14.tar 2.进入解压后目录libiconv-1.14 3.执行交叉编译环境命令,例如: source /home/huhe/environment-setup-aa ...

  7. MySql索引底层原理(01)

    目的:通过mysql获取数据,检索数据的原理来理解索引,以及如何利用好索引. 由于篇幅问题,可能会连载几篇文章. 从mysql获取一条数据说起: 我们知道,电脑的系统在获取数据的时候会旋转磁盘,然后移 ...

  8. mac os 11 Big Sur 根目录无法写入解决办法

    本文目的是解决无法在 / 目录下创建目录的问题: 关闭SIP 重启机器,按住 command + R 选择 磁盘工具 在导航栏 窗口 中打开 终端 ,执行如下命令: csrutil status ## ...

  9. 线上服务Java进程假死快速排查、分析

    引用 https://zhuanlan.zhihu.com/p/529350757 最近我们有一台服务器上的Java进程总是在运行个两三天后就无法响应请求了,具体现象如下: 请求业务返回状态码502, ...

  10. [CQOI2006]凸多边形 /【模板】半平面交

    洛谷 题意:逆时针给出\(n(n<=10)\)个凸多边形的顶点坐标,求它们交的面积. 学长博客,计算几何知识全面 半平面交问题详细讲解 其他模板题推荐 [ICPC2020 WF] Domes [ ...