Java操作HDFS

news/2024/4/30 3:50:53/文章来源:https://blog.csdn.net/anglemanyi/article/details/127024560

1. 创建maven项目

New Project

 

2. 添加依赖

        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency>

3. java操作HDFS实现上传、下载和删除

package com.sanqian.hdfs;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/**** HDFS文件操作: 上传文件、下载文件、删除文件*/
public class HdfsOp {public static void main(String[] args) throws IOException {//创建一个配置对象Configuration conf = new Configuration();//指定HDFS地址conf.set("fs.defaultFS", "hdfs://192.168.21.101:9000");//获取HDFS操作对象FileSystem fileSystem = FileSystem.get(conf);//上传文件//put(fileSystem);//下载文件//get(fileSystem);//删除文件delete(fileSystem);}/*** 删除文件或目录* @param fileSystem* @throws IOException*/private static void delete(FileSystem fileSystem) throws IOException {//第二个参数表示是否递归删除boolean flag = fileSystem.delete(new Path("/user/root/scala-2.11.8.zip"), true);if(flag){System.out.println("删除成功");}else{System.out.println("删除失败");}}/*** 下载文件* @param fileSystem* @throws IOException*/private static void get(FileSystem fileSystem) throws IOException {//获取HDFS文件系统中的输入流FSDataInputStream fis = fileSystem.open(new Path("/user/root/output/part-r-00000"));//获取本地文件输出流FileOutputStream fos = new FileOutputStream("D:\\data\\part-00000");//下载文件IOUtils.copyBytes(fis, fos, 1024, true);}/*** 上传文件* @param fileSystem* @throws IOException*/private static void put(FileSystem fileSystem) throws IOException {//文件本地文件的输入流FileInputStream fis = new FileInputStream("D:\\data\\scala-2.11.8.zip");//获取HDFS文件系统的输出流FSDataOutputStream fos = fileSystem.create(new Path("/user/root/scala-2.11.8.zip"));//通过工具类把输入流拷贝到输出流里面,实现本地文件上传到HDFSIOUtils.copyBytes(fis, fos, 1024, true);}}

4. 遇到问题及解决

问题1: 访问HDFS时发生报错

org.apache.hadoop.security.AccessControlException:Permission denied: user=Administrator, access=WRITE,inode="/output":hadoop:supergroup:drwxr-xr-x
其他用户没有访问HDFS的权限,解决办法有两种

方法一: 关闭HDFS权限校验,vim hdfs-site.xml 添加配置

方法二:修改HDFS根路径的权限为777

hadoop fs -chmod -R 777 /

问题2:解决控制台的警告信息

解决办法:在resources下新建文件log4j.properties ,在文件中粘贴如下内容:

log4j.rootLogger=info,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

 问题3:widnows下运行程序报错: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

22/09/24 14:31:04 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:356)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:371)
    at org.apache.hadoop.util.Shell.<clinit>(Shell.java:364)
    at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:80)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2807)
    at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2802)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2668)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:371)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:170)
    at com.sanqian.hdfs.HdfsOp.main(HdfsOp.java:26)

解决办法:

参考:https://blog.csdn.net/qq_38204087/article/details/107119168

注:记得要重启电脑 

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

steam搬砖汇率差项目详解

很久没有分享赚钱项目了&#xff0c;今天这里给大家介绍一个游戏搬砖的项目&#xff1a;steam游戏汇率差赚钱项目。 项目原理&#xff1a; Steam平台是一个国外游戏及装备售卖平台。而我们所谓的Steam游戏装备搬砖就是利用steam平台和网易的BUFF平台来操作。steam汇率差赚钱原…

十大经典排序算法综述(Java代码实现,思想通用)

关于十大排序的文章也有不少了&#xff0c;但感觉大部分在各个排序算法的适用场景、如何实现外排等细节方面没怎么讲&#xff0c;故总结了这篇文章&#xff0c;欢迎浏览 一、前言 内部排序是指排序时将待排序数据全部加载到内存的算法。 外部排序是指在处理海量数据排序时&…

什么是C语言?

什么是C语言&#xff1f; 文章目录什么是C语言&#xff1f;1.C语言的起源2.C语言的使用领域3. 为什么要学习C语言4.C语言的学习境界5.如何学习C语言6.学习C语言的推荐书籍1.C语言的起源 C语言之父是丹尼斯里奇&#xff1a;丹尼斯里奇&#xff08;1941年9月9日-2011年10月12日&…

Linux 简单命令 - cron 计划任务 、NTP

Linux 简单命令 - cron NTP cronNTP 一、cron 计划任务就是按照系统的时间(时刻、周期)执行指定的任务 系统服务&#xff1a; crond。 配置文件&#xff1a; /etc/crontab /var/spool/cron/用户名 配置记录格式&#xff1a; 分 时 日 月 周 任务操作命令 (用绝对路径、必要时…

集成学习详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、集成学习的产生原因与相关定义 1、产生原因 2、相关定义 &#xff08;1&#xff09;同质集成 &#xff08;2&#xf…

第三章 学校与班级管理

01 学校组织与管理 02 班级与班集体 03 班主任与班主任工作 04 班级活动与班队活动 05 课外活动 02 班级与班集体 一、班级与班集体 二、班级管理 三、班级突发事件的处理 一、班级与班集体 &#xff08;一&#xff09;班级 了解 年龄、知识程度相近&#xff0c;有共同的学…

python学习—第一步—Python小白逆袭大神(第二天)

python进阶python语法继续学习数据结构数字字符串列表元组字典面向对象继承JSON异常处理try except finallyLinux命令作业来啦&#xff01;问题python语法继续学习 数据结构 数字 Number类型用于存储数值。 1、数学运算math模块及常用函数 菜鸟教程 导入math 代码示例&#…

微信小程序事件和页面跳转

一、页面跳转 1.非TabBar页面 一个小程序拥有多个页面&#xff0c;我们通过wx.navigateTo进入一个新的页面 我们通过下边点击事件实现页面跳转进行代码实现及参考 wx.navigateBack&#xff08;&#xff09;回退到上一个页面 wx.redirectTo&#xff08;url&#xff09;删除…

最新AWVS14.9.220913107 支持Windows使用教程(附下载地址)

主要内容&#xff1a;awvs14.9下载、awvs14.9使用教程、awvs14.9安装教程、awvs14.9批量扫描、awvs14.9用法、awvs最新版下载 使用方法 一键PJ 一键PJ则只需要在安装Acunetix软件后&#xff0c;运行pj工具即可 通用思路 修改hosts文件&#xff08;C:\Windows\System32\driv…

15天深度复习JavaWeb的详细笔记(十一)——VUE、Element

文章目录demo11-VUE、Element1&#xff0c;VUE1.1 概述1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令1.4 生命周期2&#xff0c;Element2.1 快速入门2.2 Element 布局2.2.1 Layout 局部2.2.2 Container 布局容器…

Spring 注解

事务注解 使用注解 EnableTransactionManagement 开启事务支持后&#xff0c;然后在访问数据库的Service方法上添加注解 Transactional 便可 * EnableTransactionManagement&#xff0c;会额外加载 4 个 bean * BeanFactoryTransactionAttributeSourceAdvisor 事务切面类 …

C# ASP.NET Web Core API (.NET 6.0)

目录 一、简介 二、创建项目 三、启动项目 四、开放访问权限 五、添加其他的API 结束 一、简介 ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能。ASP.NET Core MVC 包含了对 Web API 的支持。可以构建多种客户端的 HTTP 服务。ASP.NET Core Web API可用于在 .NET…

LeetCode 0328. 奇偶链表

【LetMeFly】328.奇偶链表 力扣题目链接&#xff1a;https://leetcode.cn/problems/odd-even-linked-list/ 给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇…

8-Arm PEG-ACA,8-Arm PEG-Acrylamide,八臂-聚乙二醇-丙烯酰胺可用于自由基引发剂

一&#xff1a;产品描述 1、名称 英文&#xff1a; 8-Arm PEG-ACA 8-Arm PEG-Acrylamide 中文&#xff1a; 八臂-聚乙二醇-ACA 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Acrylate/Acrylamide PEG Multi-arm PEGs 4、分子量&#xff1a;可定制 5、质量控制&a…

C++之模拟实现<unordered_set/map>及位图和布隆过滤器

目录&#x1f308;前言&#x1f681;1、哈希表的改造&#x1f682;2、模拟实现的完整代码&#x1f683;3、哈希表的应用&#x1f684;3.1、位图的概念&#x1f685;3.2、位图的实现&#x1f686;3.3、位图完整代码&#x1f689;3.4、位图的应用&#x1f687;4、位图的变形&…

qt中的qmake.conf文件

qmake.conf文件是qt用于存放系统平台和编译器相关默认值的配置文件。qt为所支持的各种系统平台和对应编译器附加了相关的配置文件。其位置在QtInstallDIr/Qt5.12.0\5.12.0\msvc2015_64\mkspecs中。 windows台式机系统的默认配置​​​​​​这里的每一个文件夹代表一个qt所支…

医美企业如何玩转私域流量?

医美企业普遍面临的难点 广告投放成本高、客户到店率低、投入产出不成正比&#xff0c;是医美行业的“难隐之痛”。不少医美机构开始布局私域的精细化运营。但不是每个医美机构都能做好&#xff0c;有的机构做私域&#xff0c;复购翻几倍&#xff1b;也有的机构对私域理解还停…

比特币和以太坊抹去早些时候的收益,这就是为什么

随着美元指数 (DXY) 跃升至 20 的 112.87 年高点&#xff0c;加密市场出现了突然的自由落体。 最佳 cryptocurrencies 包括比特币&#xff08;BTC&#xff09;和以太坊&#xff08;ETH&#xff09;在内的一个小时内下跌超过2%。 ​比特币交易价格超过 19 万美元&#xff0c;但…

【HTML——奇幻撕布】(效果+代码)

效果展示 有强迫症的朋友可能会挺喜欢这个的 ~ 代码 下面即为全部源代码: 奇幻撕布.html <!doctype html> <html lang="en">

【Spring Boot 集成应用】 OAUTH2统一认证单点登录中的各种模式说明

1. OAUTH2统一认证介绍 OAuth 2.0 是一个行业的标准授权协议。OAuth 2.0 专注于简化客户端开发人员&#xff0c;同时为 Web 应用程序&#xff0c;桌面应用程序&#xff0c;手机等各种设备接入提供特定的授权流程。 2. 传统登陆认证 传统登陆方式是在每个服务进行登陆认证&am…