spark上传文件和追加文件到hdfs

news2024/11/17 3:38:50

val status = uploadFile(“C:\Users\com\Desktop\测试数据\”,“/test/file/”,“报销单.docx”)

if(status) println(“上传成功!”) else println(“上传失败”)

}

/**

  • 本地文件上传到 hdfs

  • @param localDirectory 本地目录

  • @param hdfsDirectory hdfs目录

  • @param fileName 文件名称

  • @return true:上传成功 flase:上传失败

*/

def uploadFile(localDirectory:String,hdfsDirectory:String,fileName:String): Boolean = {

val configuration:Configuration = new Configuration()

val fileSystem:FileSystem = FileSystem.get(configuration)

val localFullPath = localDirectory+“/”+fileName

val hdfsFullPath = hdfsDirectory+“/”+fileName

val localPath = new Path(localFullPath)

val hdfspath = new Path(hdfsDirectory)

val hdfsfilepath = new Path(hdfsFullPath)

val status1 = new File(localFullPath).isFile

val status2 = fileSystem.isDirectory(hdfspath)

val status3 = fileSystem.exists(hdfsfilepath)

println(status1,status2,!status3)

// 本地文件存在,hdfs目录存在,hdfs文件不存在(防止文件覆盖)

if(status1 && status2 && !status3) {

fileSystem.copyFromLocalFile(false,false,localPath,hdfsfilepath)

return true

}

false

}

}

二、代码说明

这里做了三个判断

status1:本地文件存在

status2:hdfs目录存在

status3:hdfs文件不存在

查看源码,删除代码就一个 copyFromLocalFile方法,为啥写这么复杂呢??

public void copyFromLocalFile(boolean delSrc, boolean overwrite, Path src, Path dst) throws IOException {

Configuration conf = this.getConf();

FileUtil.copy(getLocal(conf), src, this, dst, delSrc, overwrite, conf);

}

原因一:FileSystem类 的 copyFromLocalFile方法没有返回值,但是业务需要知道上传状态

原因二:copyFromLocalFile方法的 hdfs Path 可以写上传的目录也可以写成 目录+文件名

但是,如果本来输入的 hdfs是目录,但是由于这个路径不存在,copyFromLocalFile方法会把

最后一个目录的当成文件的名称当成文件名上传至hdfs,文件名后缀没了,而且容易造成混乱

三、运行效果

![](https://img-blog.csdnimg.cn/20200630152150456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxMjYyNTkz

NDIx,size_16,color_FFFFFF,t_70)

四、写入文件

hadoop不推荐追加文件到hdfs,如果需要追加文件有两个思路

1、先把内容追加到本地文件,再从本地上传到 hdfs(大数据场景下推荐使用)

2、用集合或者String数组先把追加的缓存,最后再一次性追加到hdfs (小数据或系统内存大的场景下)

hadoop 默认关闭hdfs文件追加功能,开启需要配置 hdfs-site.xml 文件

dfs.support.append

true

ing数组先把追加的缓存,最后再一次性追加到hdfs (小数据或系统内存大的场景下)

hadoop 默认关闭hdfs文件追加功能,开启需要配置 hdfs-site.xml 文件

dfs.support.append

true

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

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

相关文章

胰岛素海藻酸钠纳米粒(INS-SA-NP)|葡聚糖(Dextran)修饰Fe304纳米颗粒

胰岛素海藻酸钠纳米粒(INS-SA-NP)|葡聚糖(Dextran)修饰Fe304纳米颗粒 中文名称:胰岛素海藻酸钠纳米粒 英文名称:INS-SA-NP 纯度:95% 存储条件:-20C,避光,避湿 外观:固体或粘性液…

flutter系列之:如丝般顺滑的SliverAppBar

文章目录简介SliverAppBar详解SliverAppBar的使用总结简介 对于一个APP来说,肯定会有一个AppBar,这个AppBar一般包含了APP的导航信息等。虽然我们可以用一个固定的组件来做为AppBar,但是这样就会丢失很多特效,比如将AppBar固定在…

Java基础 二维数组简介

一、二维数组的定义 当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。二维数组定义的一般格式: dataType arrayName[length1][length2];其中, dataType 为数据类型, arrayName 为数组名&…

TDengine3.0与2.x数据库参数对比

TDengine 已经发布很长时间了,产品基本稳定下来了。 以下总结了 TDengine 3.0 与 2.x 数据库参数的一些变化,方便大家从 2.x 切换到 3.0。 注意:2.x 与 3.0 文件系统不兼容,不能直接升级。 2.x3.xdays单位:天&#xff…

云原生之使用Docker部署PESMCS Ticket工单系统

云原生之使用Docker部署PESMCS Ticket工单系统一、PESMCS Ticket介绍二、检查本地系统环境1.检查系统版本2.检查docker状态三、创建mariadb容器1.创建network2.创建数据目录3.创建mariadb容器4.查看mariadb容器状态四、创建PESMCS Ticket容器1.创建PESMCS Ticket容器2.查看PESM…

【黄啊码】如何用小程序实现世界杯参赛队伍投票

本次只分享小程序端的代码实现,后端每个人都有自己的实现方法,就不写在此。 好了,先看实现样式: 本次投票实现需要一个页面和一个弹窗实现,我们做的是淘汰赛部分,在此,黄啊码将淘汰赛部分直接选…

配置Nginx解决http host头攻击漏洞【详细步骤】

配置Nginx解决http host头攻击漏洞【详细步骤】前言1、进入nginx目录下2、修改nginx配置文件3、添加上后重启配置文件Nginx常用基本命令仰天大笑出门去,我辈岂是蓬蒿人前言 大概内容: 安全系统渗透测试出host头攻击漏洞,下面是解决步骤 1、…

React组件之间的通信方式总结(上)

先来几个术语&#xff1a; 官方我的说法对应代码React elementReact元素let element<span>A爆了</span>Component组件class App extends React.Component {}无App为父元素&#xff0c;App1为子元素<App><App1></App1></App> 本文重点&…

idea中用SSH工具手动打包部署

我用的是MobaXterm工具&#xff1a; 第一步&#xff1a;先将自己的文件整体运行一下&#xff0c;确保可以正常运行 第二步&#xff1a;在Maven中找到名为XXXX&#xff08;root&#xff09;的名称展开 ---》Lifecycle &#xff0c;先点击 clean&#xff0c;确保无误后点击 pac…

clickhouse三节点三分片双副本环绕部署

文章目录clickhouse安装部署01节点 metrika.xml 配置文件信息02节点 metrika.xml 配置文件信息03节点 metrika.xml 配置文件信息macros 实例信息编辑查看结果clickhouse安装部署 rpm安装过程以及注意事项 01节点 metrika.xml 配置文件信息 <?xml version"1.0"…

笔试强训(四十三)

目录一、选择题二、编程题2.1 电话号码2.1.1 题目2.1.2 题解2.2 求和2.2.1 题目2.2.2 题解一、选择题 &#xff08;1&#xff09;下列关于synflood攻击的说法错误的是&#xff08;B&#xff09; A.服务端由于连接队列被占满而不能对外服务 B.不但能攻击TCP服务&#xff0c;还能…

做个家务,让我搞懂了 Linux I/O 模型

I/O 其实就是 input 和 output&#xff08;输入输出&#xff09; 在计算机操作系统中对应数据流的输入与输出&#xff0c;在 Linux 中&#xff0c;既有文件的 I/O&#xff0c;也有网络 I/O 无论是文件 I/O 还是网络 I/O&#xff0c;其传输过程都是类似的 今天我们以文件 I/O…

【Unity学习笔记】UnrealToUnity教程:(网上购买的素材导入Unreal+插件转Unity)

【Unity学习笔记】UnrealToUnity教程&#xff1a; 最近想从Unreal那边化点缘借借素材&#xff0c;没想到踩到一个大坑 一&#xff0c;素材导入Unreal 这个教程比较多&#xff0c;根据素材的来源&#xff0c;传送门是以下这几个&#xff1a; 1.项目之间互相迁移&#xff0c;不…

PGL 系列(一)图的基础概念

一、图知识 图的节点间是否有方向,可将图分为无向图与有向图; 图的边是否有权重,可以将图分为无权图和有权图; 图的边和点是否具有多种类型,可以将图分为同构图和异构图 度是图上一节点,其边的条数 邻居指的是图上一节点的相邻节点 无向图:临界矩阵就是

值得一看,阿里又杀疯了开源内部“M9”级别全彩版分布式实战笔记

学习是一种基础性的能力。然而&#xff0c;“吾生也有涯&#xff0c;而知也无涯。”&#xff0c;如果学习不注意方法&#xff0c;则会“以有涯随无涯&#xff0c;殆矣”。 学习就像吃饭睡觉一样&#xff0c;是人的一种本能&#xff0c;人人都有学习的能力。我们在刚出生的时候…

汽车以太网物理层IOP自动化测试解决方案

解决方案功能介绍 该解决方案的测试目的是定义一组测试&#xff0c;以确保使用具有100 BASE-T1或1000BASE-T1能力的PHYs的多个设备之间的互操作性&#xff0c;要求每个PHY能够在给定的时间限制内建立稳定的链路&#xff0c;能够可靠地监视当前链路状态并将其传递到上层&#x…

CRMEB电商商城系统阿里云ECS服务器安装配置搭建教程文档

阿里云ECS服务器配置教程&#xff1a;一、推荐使用宝塔Linux面板&#xff0c;简单好用。二、放行服务器端口。详细步骤&#xff1a; 1.在阿里云控制台&#xff0c;云服务器ECS&#xff0c;实例&#xff0c;点击最右侧更多→实力状态→停止。 2.选择停止&#xff0c;点击确定. …

Java培训堆 Heap永久区

永久区 永久存储区是一个常驻内存区域&#xff0c;用于存放JDK自身所携带的 Class,Interface 的元数据&#xff0c;也就是说它存储的是运行环境必须的类信息&#xff0c;被装载进此区域的数据是不会被垃圾回收器回收掉的&#xff0c;关闭 JVM 才会释放此区域所占用的内存。 J…

Cross-modal Pretraining in BERT(跨模态预训练)

BERT以及BERT后时代在NLP各项任务上都是强势刷榜&#xff0c;多模态领域也不遑多让…仅在2019 年就有8篇的跨模态预训练的论文挂到了arxiv上…上图是多篇跨模态论文中比较稍迟的VL-BERT论文中的比较图&#xff0c;就按这个表格的分类&#xff08;Architecture&#xff09;整理这…

[LeetCode 1781]所有子字符串美丽值之和

题目描述 题目链接&#xff1a;所有子字符串美丽值之和 一个字符串的 美丽值 定义为&#xff1a;出现频率最高字符与出现频率最低字符的出现次数之差。 比方说&#xff0c;“abaacc” 的美丽值为 3 - 1 2 。 给你一个字符串 s &#xff0c;请你返回它所有子字符串的 美丽值…