Hadoop HDFS的API操作

news2024/9/25 1:21:24

客户端环境准备

hadoop的 Windows依赖文件夹,拷贝hadoop-3.1.0到非中文路径(比如d:\)。

  • 配置HADOOP_HOME环境变量
    在这里插入图片描述
  • 配置Path环境变量。
    在这里插入图片描述
    不能放在包含有空格的目录下,cmd 输入hadoop显示此时不应有 \hadoop-3.0.0\bin\。我放在E:\Program Files (x86) \hadoop-3.0.0\bin\中,就出现错误
    验证Hadoop环境变量是否正常。双击winutils.exe,如果报如下错误。说明缺少微软运行库(正版系统往往有这个问题)。里面有对应的微软运行库安装包双击安装即可。
    在这里插入图片描述
  • 配置Path环境变量。然后重启电脑
  • 如果上述操作后在后面代码执行的过程中,还有问题可以将bin目录下hadoop.dll和winutils.exe放到C:/windows/system32目录下
  1. 在IDEA中创建一个Maven工程HdfsClientDemo,并导入相应的依赖坐标+日志添加
<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>

  1. 在项目的src/main/resources目录下,新建一个文件,命名为“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

  1. 创建HdfsClient类

方式一

public class HdfsClient{	
@Test
public void testMkdirs() throws IOException, InterruptedException, URISyntaxException{
		
		// 1 获取文件系统
		Configuration configuration = new Configuration();
		// 配置在集群上运行
	FileSystem fs = FileSystem.get(
new URI("hdfs://hadoop102:8020"),
configuration, 
"xiaoming"
);

	}
}

vim core-site.xml
在这里插入图片描述

在这里插入图片描述

方式二 给main方法传参数

1.代码部分
public class HdfsClient{	
@Test
public void testMkdirs() throws IOException, InterruptedException, URISyntaxException{
		// 1 获取文件系统
		Configuration configuration = new Configuration();
		// 配置在集群上运行
		configuration.set("fs.defaultFS", "hdfs://hadoop102:8020");
		FileSystem fs = FileSystem.get(configuration);
	}
}


  1. 配置部分
    运行时需要配置用户名称(默认是使用windows用户名操作HDFS)
    在这里插入图片描述

在这里插入图片描述

给main方法传参 :
1.在IDEA中传参 – 在运行按钮上右键—>点击Edit 类名.main() —>
Program Arguments后面写传的参数 —>默认就是字符串 多个参数之间用空格隔开,注意:如果右键没有就先运行一遍。
2. java 字节码文件名 参数1 参数2 …
客户端去操作HDFS时,是有一个用户身份的。默认情况下,HDFS客户端API会从JVM中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=*****,
为用户名称。
错误:Permission denied: user=XXXXXX, access=WRITE, inode=“/demo”:
:supergroup:drwxr-xr-x
解决方案 :①修改权限–不建议 ②修改操作HDFS的用户名(默认是windows系统登录的用户名)

修改用户名:在IDEA中传参 --  在运行按钮上右键--->点击Edit 类名.main() --->
                VM OPtions : -DHADOOP_USER_NAME=******

在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        URI uri = new URI("hdfs://hadoop102:8020");
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://hadoop102:8020");
        conf.set("dfs.replication","2");
        FileSystem fs = FileSystem.get( conf);
//        fs.copyToLocalFile(false, new Path("/input/word.txt"), new Path("E:\\io"), false);
        fs.copyFromLocalFile(false,true,new Path("E:\\io\\upload.txt"),new Path("/input"));
        fs.close();
    }
}

在这里插入图片描述
在这里插入图片描述

VM options可以调节JVM的堆栈等大小。

HDFS文件上传

@Test
public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {

		// 1 获取文件系统
		Configuration configuration = new Configuration();
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "xiaoming");

		// 2 上传文件
		fs.copyFromLocalFile(new Path("e:/banzhang.txt"), new Path("/banzhang.txt"));

		// 3 关闭资源
		fs.close();

IDEA创建Maven工程,由于版本不一样,这里我使用2022.3版本,有一个将junit加入classpath的设置,还有将各种目录设置:Mark Directory as :src/main/java 关联为 Sources Root;(右击java》选择mark Dirctory as》选择Sources Root);src/main/resources 关联为Resources Root;(右击resources》选择mark Dirctory as》选择Resources Root);src/test/java 关联为Test Sources Root;(右击test文件夹下test》选择mark Dirctory as》选择Test Sources Root;src/test/resources 关联为 Test Resources Root;(右击test文件夹下resources》选择mark Dirctory as》选择Test Resources Root)
在这里插入图片描述
还有最后一步就是:选中pom.xml文件,右键add as Maven project。Jar包没有生效就重新加载pom.xml文件。

HDFS文件下载

@Test
public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException{

		// 1 获取文件系统
		Configuration configuration = new Configuration();
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "xiaoming");
		
		// 2 执行下载操作
		// boolean delSrc 指是否将原文件删除
		// Path src 指要下载的文件路径
		// Path dst 指将文件下载到的路径
		// boolean useRawLocalFileSystem 是否开启文件校验
		fs.copyToLocalFile(false, new Path("/banzhang.txt"), new Path("e:/banhua.txt"), true);
		
		// 3 关闭资源
		fs.close();

在这里插入图片描述
在这里插入图片描述
例如:本地上传a.txt到HDFS上面,首先会在本地对a.txt进行一个校验得到一个校验值(123),然后将a.txt和校验值123一起上传到HDFS。在HDFS上面进行性文件a.txt的再一次校验值***,将123 与 ***进行对比。下载也是一样的流程。比如上传文件到百度网盘,会发现有时候特别快,上传的文件会有一个校验值,其他人上传相同文件的时候,会将另外待上传相同文件计算一个校验值去服务端查找,有此校验值,就保存一个在百度网网盘。上传违法文件时,也会在黑名单保留此文件的校验值。

测试参数优先级

  1. 编写源代码
@Test
public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {

		// 1 获取文件系统
		Configuration configuration = new Configuration();
		configuration.set("dfs.replication", "2");
		FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), configuration, "xiaoming");

		// 2 上传文件
		fs.copyFromLocalFile(new Path("e:/banzhang.txt"), new Path("/banzhang.txt"));

		// 3 关闭资源
		fs.close();

		System.out.println("over");
  1. 将hdfs-site.xml拷贝到项目的根目录(resource)下
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<property>
		<name>dfs.replication</name>
         <value>1</value>
	</property>
</configuration>

  1. 参数优先级
    参数优先级排序:(1)客户端代码中设置的值 >(2)ClassPath下的用户自定义配置文件 >(3)然后是服务器的默认配置
    参数的配置 : 客户端代码,客户端的配置文件,服务器端xxx-default.xml,服务器端的xxx-site.xml
    在客户端的执行的命令 : 客户端代码 > 客户端的配置文件 > 服务器端的xxx-default.xml(默认备份数3)
    如果注释掉客户端代码和配置文件,这个时候如果服务端也配置了hdfs-site.xml (例如配置8),是不生效的,上传文件默认备份数3。
    在服务器端执行命令 : hadoop fs -put a.txt /demo
    服务器端xxx-site.xml > 服务器端xxx-default.xml
    在这里插入图片描述

验证1:客户端和配置文件都设置了备份数,看谁优先级高!

客户端设置为文件备份数2,配置文件设置为文件备份数5
在这里插入图片描述

在这里插入图片描述

验证2: 只在配置文件里设置文件备份数

在这里插入图片描述
在这里插入图片描述

验证3: 服务端 /opt/module/hadoop-3.1.3/etc/hadoop/hdfs-site.xml。设置之后必须分发xsync hdfs-site.xml并重启HDFS。注意:此操作仅涉及服务端,与客户端没有任何关系!!!!!

在这里插入图片描述
分发重启不能立马操作!
以下结果证明了服务器端xxx-site.xml > 服务器端xxx-default.xml
在这里插入图片描述
注意:刚启动集群不能立马操作,否则会报下面的错。
在这里插入图片描述
分享到此,感谢下伙伴们支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于linux中防火墙的命令

文章目录 一、linux 6.5 下二、linux 7.0 下 (CentOs7.3)常用命令 三、关于端口的一些命令四、一些状况 linux不同版本防火墙是不同的&#xff0c;命令如下 一、linux 6.5 下 service iptables status ## 查看防火墙状态 service iptables start ## 开启防火墙 service iptab…

谁还在AI焦虑?

时至今日&#xff0c;人们对GPT 为首的诸多AI&#xff0c; 大有热情消退的迹象。 与2个月前相比&#xff0c;简直恍如隔世。 这也进步一部印证了“山洞隐喻” 人类始终对未知充满恐惧和焦虑。 曾经人们忧心忡忡&#xff0c;整天讨论AI&#xff0c; 取代人类工作之后&…

如何用ChatGPT做新品上市推广方案策划?

该场景对应的关键词库(28个&#xff09;&#xff1a; 品牌、产品信息、新品、成分、属性、功效、人群特征、客户分析、产品定位、核心卖点、推广策略、广告、公关、线上推广、线下活动、合作伙伴、资源整合、预算、执行计划、监测、评估、微调方案、价值主张、营销策略、热点话…

第四十七章 Unity 布局(中)

在上一章节中我给父元素Panel添加了Horizontal Layout Group组件&#xff0c;并且添加了两个Text元素。 我们发现两个Text UI 元素在水平方向上面依次放置在Panel的最上面。由于Panel的宽度为300&#xff0c;而两个Text的总宽度为 160 160 320&#xff0c;因此两个Text 超出了…

C++入门知识(下)

目录 一、内联函数 1.1内联函数的概念 1.2内联函数的使用 1.3内联函数的特性 1.4宏的优缺点 1.5C中可替代宏的技术 二、auto关键字 2.1什么是auto关键字 2.2auto简介 2.3auto的使用细则 2.4auto不能推导的场景 三、基于范围的for循环&#xff08;C11&#xff09; 3.…

大屏只用来做汇报?知道这6个应用场景,直接升职加薪!

五一假几个朋友小聚了一下&#xff0c;好久没联系了&#xff0c;现在才知道大家从事行业五花八门的。知道我从事IT行业好几年&#xff0c;他们非要让我讲讲现在异常火爆的大屏&#xff0c;说是所在企业单位都在研究这玩意儿&#xff0c;有的业务人员焦虑不已不知道如何下手&…

Lenovo m93 mini 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板Lenovo m93 mini 处理器Intel i5-4590T 2.20GHz (35w) 4-core/4-thread已驱动 内存8GB (2x4) DDR3 1600MHz已驱动 硬盘2.5" SSD Samsung 8…

《Linux 内核设计与实现》11. 定时器和时间管理

文章目录 内核中时间的概念节拍率&#xff1a;HZ理想的 HZ 值高 HZ 的优势高 HZ 的劣势 jiffiesjiffies 的内部表示jiffies 的回绕用户空间和 HZ 硬时钟和定时器实时时钟系统定时器 时钟中断处理程序实际时间定时器使用定时器定时器竞争条件实现定时器 延迟执行忙等待短延迟sch…

跨境商城APP开发需要注意的问题

随着全球化的趋势&#xff0c;跨境电商发展迅猛&#xff0c;越来越多的企业开始进军跨境市场。而跨境商城APP已经成为跨境电商非常重要的一部分。在开发跨境商城APP时&#xff0c;需要注意以下问题&#xff1a; 1.多语言支持 跨境商城APP需要支持不同国家和地区的语言&#x…

在基于Android以及Jetson TK平台上如何写32位的Thumb-2指令

由于Android以及Jetson TK的编译工具链中的汇编器仍然不支持大部分的32位Thumb-2指令&#xff0c;比如 add.w&#xff0c;因此我们只能通过手工写机器指令码来实现想要的指令。下面我将简单地介绍如何在ARM GCC汇编器中手工去写机器指令码。 对于GCC或Clang的汇编器&#xff0…

es6 学习笔记-1

学习视频&#xff1a;尚硅谷Web前端ES6教程&#xff0c;涵盖ES6-ES11_哔哩哔哩_bilibili 一、介绍 ES&#xff1a;全称为EcmaScript,是脚本语言的规范 ECMAScript&#xff1a; 由Ecma国际通过ECMA-262标准化的脚本程序设计语言。 es6兼容性&#xff1a;ECMAScript 6 compa…

adb logcat 保存日志文件到本地

指令 adb logcat > logcat.log例如&#xff1a;例如&#xff1a;adb logcat > D:\logcat.log 注意window中直接输入可能会出现log文件打开显示乱码问题&#xff1b; 请打开cmd检查 输入 chcp 如图 查看结果 如果不是65001 则 执行 chcp 65001 之后执行 例如&#x…

antd 中日期组件添加左侧日期范围选择

一、产品需求 产品有这样一个需求&#xff0c; 在实时的日期组件左侧添加一个快捷时间范围选择&#xff0c;并且选择后&#xff0c;窗口不会自动关闭。 大致样式长这样&#xff1a; 二、需求拆解 拆解一下这个需求&#xff0c;需要满足三个要点&#xff1a; ① 快捷时间范围…

Linux学习之Shell(一)

Shell概述 1&#xff09;Linux提供的Shell解析器有 [xiaominghadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh2&#xff09;bash和sh的关系 [xiaominghadoop101 bin]$ ll | grep bash -rwxr…

LinkFlow CDP洞察能力升级,结合订单开启营销新趋势

4月26日&#xff0c;悠易科技LinkFlow在春季产品发布会上对其洞察产品能力进行了升级。 在技术赋能以人为本的营销5.0阶段&#xff0c;伴随技术的发展&#xff0c;消费者很容易接触到不同的产品和服务&#xff0c;也可以很方便的通过社交网络以及各种社群找到跟自己有相同兴趣…

第四十一章 Unity 输入框 (Input Field) UI

本章节我们学习输入框 (Input Field)&#xff0c;它可以帮助我们获取用户的输入。我们点击菜单栏“GameObject”->“UI”->“Input Field”&#xff0c;我们调整一下它的位置&#xff0c;效果如下 我们在层次面板中发现&#xff0c;这个InputField UI元素包含两个子元素&…

PMP项目管理-[第十章]沟通管理

沟通管理知识体系&#xff1a; 规划沟通管理&#xff1a; 10.1 沟通维度划分 10.2 核心概念 定义&#xff1a;通过沟通活动(如会议和演讲)&#xff0c;或以工件的方式(如电子邮件、社交媒体、项目报告或项目文档)等各种可能的方式来发送或接受消息 在项目沟通中&#xff0c;需要…

聊聊并发编程的12种业务场景

前言 并发编程是一项非常重要的技术&#xff0c;无论在面试&#xff0c;还是工作中出现的频率非常高。 并发编程说白了就是多线程编程&#xff0c;但多线程一定比单线程效率更高&#xff1f; 答&#xff1a;不一定&#xff0c;要看具体业务场景。 毕竟如果使用了多线程&…

用DevExpress WinForms富文本编辑器,集成高级文本编辑功能(一)

DevExpress WinForm富文本编辑器&#xff08;RTF编辑器&#xff09;控件允许用户将高级文本编辑功能集成到下一个WinForms项目中&#xff0c;它包括全面的文本格式选项、支持邮件合并&#xff0c;并附带了丰富的终端用户选项集&#xff0c;因此可以轻松交付受Microsoft word启发…

Linux本地套接字通信

1. 本地套接字 socket API原本为网络通信而设计&#xff0c;后来在其基础上扩展出本地套接字机制用于本地进程间通信。 本地套接字为全双工通信方式。 2. 本地套接字的使用 本地套接字通信步骤 &#xff08;1&#xff09;创建本地socket 本地套接字使用文件来标识&#xff0c;…