使用Java ApI 实现Hadoop文件上传

目录

 

文件传输步骤

windows的本机文件传输

linux的虚拟机文件传输


 

 

文件传输步骤

建立连接
在connect2HDFS()方法中,通过设置Configuration对象来指定HDFS的URI(在这个例子中为hdfs://192.168.12.133:9000),并初始化一个FileSystem实例fs,用于后续的所有HDFS操作。
关闭连接
close()方法用于在完成所有HDFS操作后关闭与HDFS的连接,确保资源被正确释放。
上传文件并分类 (uploadAndClassify(File file)):方法接收一个本地文件作为参数。
将本地文件上传到HDFS上的相应目录中。
业务逻辑
该方法接受一个字符串类型的目录路径作为参数,将其转换为Path对象,并检查该路径是否已存在。如果不存在,则创建新的目录。
主函数执行
首先调用connect2HDFS()方法与HDFS建立连接。指定一个本地目录(在这个例子中是/home/covid_data),然后遍历这个目录下的所有.json文件。对每个符合条件的文件调用uploadAndClassify(File file)方法进行处理。

package hdfs.demo;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class HDFSApiDemo {private static FileSystem fs = null;// 用于和HDFS建立连接public static void connect2HDFS() throws IOException {Configuration conf = new Configuration();conf.set("fs.defaultFS","hdfs://192.168.12.133:9000");// 显式指定本地文件系统的实现类conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");System.out.println("111");fs = FileSystem.get(conf);}// 关闭客户端和HDFS的连接public static void close(){if(fs != null){try{fs.close();} catch (IOException e){e.printStackTrace();}}}/*** 上传文件并分类* @param file* @throws IOException*/public static void uploadAndClassify(File file) throws IOException {// 提取所有汉字作为省份名称Pattern pattern = Pattern.compile("([\\p{IsHan}]+).*\\.json");// 匹配所有汉字Matcher matcher = pattern.matcher(file.getName());// 匹配汉字成功if (matcher.find()) {String province = matcher.group(1);  // 获取所有汉字组成的字符串String targetDir = "/covid_data/" + province + "/";  // 使用全部汉字作为目录名String fileName = file.getName();System.out.println("Processing file: " + fileName);// 创建省份目录(如果不存在)mkdir(targetDir);// HDFS目的路径Path dst = new Path(targetDir + fileName);// 上传文件fs.copyFromLocalFile(new Path(file.getAbsolutePath()), dst);System.out.println("Uploaded: " + fileName + " to " + targetDir);} else {System.out.println("File does not match the expected pattern: " + file.getName());}}// 重载mkdir()方法,支持String类型参数public static void mkdir(String dir) throws IOException {Path path = new Path(dir);if (!fs.exists(path)) {fs.mkdirs(path); // 创建目录}}public static void main(String[] args) throws IOException {try {connect2HDFS();// 虚拟机上的本地目录File localDir = new File("/home/covid_data");// 遍历目录下的所有文件for (File file : localDir.listFiles()) {if (file.isFile() && file.getName().endsWith(".json")) {uploadAndClassify(file);}}close();} catch (IOException e) {e.printStackTrace();}}}

windows的本机文件传输

对于上述代码只需要更改上传路径即可
遭遇问题1:端口无法访问

// 第一步 cd /usr/local/hadoop(安装路径
// 第二步  vi ./etc/hadoop/hdfs-site.xml
// 第三步 加入下列配置 目的:让NameNode监听所有网络接口上的9000端口
<property>
    <name>dfs.namenode.rpc-bind-host</name>
    <value>0.0.0.0</value>
</property>
// 第四步 让配置生效 
   先关闭HDFS命令      ./sbin/stop-dfs.sh
   在重启HDFS命令      ./sbin/start-dfs.sh

遭遇问题2:用户权限不足

// 改变hadoop用户权限 这会将/data目录的权限设置为rwxrwxrwx,允许所有用户读写执行
// hdfs dfs -chmod 777 /data

linux的虚拟机文件传输

遭遇问题1:无法找到主类

<!--  添加maven-shade-plugin插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>hdfs.demo.HDFSApiDemo</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
// 这段Maven配置的作用是使用maven-shade-plugin插件在打包阶段创建一个包含所有依赖的可执行JAR文件,并指定hdfs.demo.HDFSApiDemo作为JAR文件的主类(即包含main方法的入口类)

遭遇问题1:Hadoop尝试使用file:// URI方案时找不到对应的文件系统实现

// 显式指定本地文件系统的实现类
conf.set("fs.file.impl", "org.apache.hadoop.fs.LocalFileSystem");

 

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

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

相关文章

喜讯 | 耘瞳科技视觉检测与测量装备荣膺“2024机器视觉创新产品TOP10”

3月28日&#xff0c;全球机器视觉行业盛会VisionChina2025&#xff08;上海&#xff09;机器视觉展完美收官。展会期间&#xff0c;由机器视觉产业联盟&#xff08;CMVU&#xff09;举办的“2024机器视觉创新产品TOP10”企业名单正式揭晓&#xff0c;耘瞳科技“工业跨尺度场景实…

数据可视化(matplotlib)-------图表样式美化

目录 一、图表样式概述 &#xff08;一&#xff09;、默认图表样式 &#xff08;二&#xff09;、图表样式修改 1、局部修改 2、全局修改 二、使用颜色 &#xff08;一&#xff09;、使用基础颜色 1、单词缩写或单词表示的颜色 2、十六进制/HTML模式表示的颜色 3、RGB…

202518 | Ngnix

Ngnix是什么 Nginx&#xff08;发音为“engine-x”&#xff09;是一个开源的高性能HTTP服务器、反向代理服务器、负载均衡器和邮件代理服务器。它由俄罗斯程序员Igor Sysoev开发&#xff0c;首次发布于2004年&#xff0c;旨在解决C10K问题&#xff08;即如何高效地处理10,000个…

WP Mail 邮件发送:WordPress Mail SMTP设置

在我们WordPress搭建个人网站完成后&#xff0c;读者或者客户发送的电子邮件&#xff0c;包括你的WPForms电子邮件通知&#xff0c;如果无法到达预定收件人收件箱&#xff0c;这会对我们网站的运营造成很大的影响&#xff0c;问题在于WordPress Mail SMTP的发送方式。 SMTP&am…

小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据

MqttProtocol::SendAudio()对输入的音频数据进行加密处理&#xff0c;通过UDP发送加密后的音频数据。 源码&#xff1a; void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区&#xff0c;确保同一时间只有一个线程可以访问该…

Hadoop 常用命令集总览

Hadoop 常用命令集总览 在大数据处理领域&#xff0c;Hadoop 作为一种广泛应用的分布式系统基础架构&#xff0c;其重要性不言而喻。熟练掌握 Hadoop 的常用命令对于高效的数据处理和分析工作至关重要。本文将对 Hadoop 的常用命令进行专业而详尽的列举&#xff0c;并结合实例进…

mac m4 Homebrew安装MySQL 8.0

1.使用Homebrew安装MySQL8 在终端中输入以下命令来安装MySQL8&#xff1a; brew install mysql8.0 安装完成后&#xff0c;您可以通过以下命令来验证MySQL是否已成功安装&#xff1a; 2.配置mysql环境变量 find / -name mysql 2>/dev/null #找到mysql的安装位置 cd /op…

GoLand 2024.3 中文 GO语言开发工具

GoLand 2024.3 中文 GO语言开发工具 文章目录 GoLand 2024.3 中文 GO语言开发工具一、介绍二、效果三、下载 一、介绍 JetBrains GoLand 2024 &#xff0c;是一款GO语言开发工具&#xff0c;全行代码补全&#xff1a;能使用本地运行的上下文感知深度学习模型&#xff0c;可以自…

Excel去掉单元格里面的换行的方法

方法一&#xff1a;使用“查找和替换”功能 ‌选中单元格‌&#xff1a;首先选中需要替换换行符的单元格或区域。 ‌打开替换窗口‌&#xff1a;按下“CtrlH”快捷键&#xff0c;打开“查找和替换”对话框。 ‌输入换行符‌&#xff1a; 在“查找内容”框中&#xff0c;你可…

React 中的 Props

Props&#xff08;Properties 的缩写&#xff09;是 React 中用于组件间通信的核心机制。它们允许数据从父组件单向传递到子组件。Props 是 React 组件不可变&#xff08;只读&#xff09;的输入参数&#xff0c;这种特性使得组件更加可预测且易于维护。 Props 的核心特性 单…

基于简单神经网络的线性回归

一、概述 本代码实现了一个简单的神经网络进行线性回归任务。通过生成包含噪声的线性数据集&#xff0c;定义一个简单的神经网络类&#xff0c;使用梯度下降算法训练网络以拟合数据&#xff0c;并最终通过可视化展示原始数据、真实线性关系以及模型的预测结果。 二、依赖库 …

‌19.思科路由器:OSPF协议引入直连路由的实验研究

思科路由器:OSPF协议引入直连路由的实验研究 一、实验拓扑二、基本配置2.1、sw1的配置2.2、开启交换机三层功能三、ospf的配置3.1、R1的配置3.2、R2的配置3.3、重启ospf进程四、引入直连路由五、验证结果随着互联网技术的不断发展,路由器作为网络互联的关键设备,其性能与稳定…

USB——删除注册表信息

文章目录 背景工具下载地址工具使用删除注册表信息背景 注测表中已记录这个设备的信息,但现在设备描述符又指定为了 WinUSB 设备,所以当设备再次插入的时候,不会发送 0xEE 命令,造成了枚举失败。 两种处理方式: 修改枚举时候的 VID/PID删除 USB 的注册表信息工具下载地址…

如何快速解决django报错:cx_Oracle.DatabaseError: ORA-00942: table or view does not exist

我们在使用django连接oracle进行编程时&#xff0c;使用model进行表映射对接oracle数据时&#xff0c;默认表名组成结构为&#xff1a;应用名_类名&#xff08;如&#xff1a;OracleModel_test&#xff09;&#xff0c;故即使我们库中存在表test&#xff0c;运行查询时候&#…

从 0 到跑通的 Qt + OpenGL + VS 项目的完整流程

&#x1f9e9; 全流程目标&#xff1a; 在 Visual Studio 中成功打开、编译并运行一个 Qt OpenGL 项目&#xff08;.vcxproj 格式&#xff09; ✅ 第 1 步&#xff1a;安装必要环境 工具说明Visual Studio 2017 / 2019 / 2022必须勾选 “使用 C 的桌面开发” 和 “MSVC 工具…

鸿蒙开发03样式相关介绍(二)

文章目录 一、样式复用1.1 Styles修饰符1.2 Extend修饰符 二、多态样式 一、样式复用 在页面开发过程中&#xff0c;会出出现大量重复的样式设置代码&#xff0c;可以使用Styles和Extend修饰符将帮助我们进行样式复用。 1.1 Styles修饰符 Styles装饰器可以将多条样式设置提炼…

装饰器模式与模板方法模式实现MyBatis-Plus QueryWrapper 扩展

pom <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 --> </dependency>MPJLambdaWrapperX /*** 拓展 MyBatis Plus Join QueryWrapper 类&…

05-031-自考数据结构(20331)- 哈希表 - 例题分析

哈希表考题主要涵盖四大类型:1)函数设计类(如除留余数法计算地址,需掌握质数p的选择技巧);2)冲突处理类(线性探测法要解决堆积现象,链地址法需绘制链表结构);3)性能分析类(重点计算ASL,理解装填因子α的影响规律);4)综合应用类(如设计ISBN查询系统,需结合实际问…

rustdesk 自建服务器 key不匹配

请确保id_ed25519文件的权限为&#xff1a; -rw------- 1 root root 88 Apr 31 10:02 id_ed25519在rustdesk安装目录执行命令&#xff1a; chmod 700 id_ed25519

Dify 深度集成 MCP实现灾害应急响应

一、架构设计 1.1 分层架构 #mermaid-svg-5dVNjmixTX17cCfg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5dVNjmixTX17cCfg .error-icon{fill:#552222;}#mermaid-svg-5dVNjmixTX17cCfg .error-text{fill:#552222…