Scala操作hdfs文件

详细对比模型训练和模型精调 当我们进行模型精调(Fine-Tuning)和模型训练时,我们需要考虑到不同的步骤和目标。 阅读详情
package scala_test_lyh

import java.io._
import java.net.URI
import java.util._
import org.apache.commons.lang3.StringUtils
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs._
import org.apache.zookeeper.common.IOUtils

object HDFSUtil {
  val hdfsUrl = "hdfs://namenode的ip地址:端口"
  var realUrl = ""

  /**
    * make a new dir in the hdfs
    *
    * @param dir the dir may like '/tmp/testdir'
    * @return boolean true-success, false-failed
    */
  def mkdir(dir : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(dir)) {
      realUrl = hdfsUrl + dir
      val config = new Configuration()
      val fs = FileSystem.get(URI.create(realUrl), config)
      if (!fs.exists(new Path(realUrl))) {
        fs.mkdirs(new Path(realUrl))
      }
      fs.close()
      result = true
    }
    result
  }

  /**
    * delete a dir in the hdfs.
    * if dir not exists, it will throw FileNotFoundException
    *
    * @param dir the dir may like '/tmp/testdir'
    * @return boolean true-success, false-failed
    *
    */
  def deleteDir(dir : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(dir)) {
      realUrl = hdfsUrl + dir
      val config = new Configuration()
      val fs = FileSystem.get(URI.create(realUrl), config)
      fs.delete(new Path(realUrl), true)
      fs.close()
      result = true
    }
    result
  }

  /**
    * list files/directories/links names under a directory, not include embed
    * objects
    *
    * @param dir a folder path may like '/tmp/testdir'
    * @return List<String> list of file names
    */
  def listAll(dir : String) : List[String] = {
    val names : List[String] = new ArrayList[String]()
    if (StringUtils.isNoneBlank(dir)) {
      realUrl = hdfsUrl + dir
      val config = new Configuration()
      val fs = FileSystem.get(URI.create(realUrl), config)
      val stats = fs.listStatus(new Path(realUrl))
      for (i <- 0 to stats.length - 1) {
        if (stats(i).isFile) {
          names.add(stats(i).getPath.toString)
        } else if (stats(i).isDirectory) {
          names.add(stats(i).getPath.toString)
        } else if (stats(i).isSymlink) {
          names.add(stats(i).getPath.toString)
        }
      }
    }
    names
  }

  /**
    * upload the local file to the hds,
    * notice that the path is full like /tmp/test.txt
    * if local file not exists, it will throw a FileNotFoundException
    *
    * @param localFile local file path, may like F:/test.txt or /usr/local/test.txt
    *
    * @param hdfsFile hdfs file path, may like /tmp/dir
    * @return boolean true-success, false-failed
    *
    **/
  def uploadLocalFile2HDFS(localFile : String, hdfsFile : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(localFile) && StringUtils.isNoneBlank(hdfsFile)) {
      realUrl = hdfsUrl + hdfsFile
      val config = new Configuration()
      val hdfs = FileSystem.get(URI.create(hdfsUrl), config)
      val src = new Path(localFile)
      val dst = new Path(realUrl)
      hdfs.copyFromLocalFile(src, dst)
      hdfs.close()
      result = true
    }
    result
  }

  /**
    * create a new file in the hdfs. notice that the toCreateFilePath is the full path
    *  and write the content to the hdfs file.

    * create a new file in the hdfs.
    * if dir not exists, it will create one
    *
    * @param newFile new file path, a full path name, may like '/tmp/test.txt'
    * @param content file content
    * @return boolean true-success, false-failed
    **/
  def createNewHDFSFile(newFile : String, content : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(newFile) && null != content) {
      realUrl = hdfsUrl + newFile
      val config = new Configuration()
      val hdfs = FileSystem.get(URI.create(realUrl), config)
      val os = hdfs.create(new Path(realUrl))
      os.write(content.getBytes("UTF-8"))
      os.close()
      hdfs.close()
      result = true
    }
    result
  }

  /**
    * delete the hdfs file
    *
    * @param hdfsFile a full path name, may like '/tmp/test.txt'
    * @return boolean true-success, false-failed
    */
  def deleteHDFSFile(hdfsFile : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(hdfsFile)) {
      realUrl = hdfsUrl + hdfsFile
      val config = new Configuration()
      val hdfs = FileSystem.get(URI.create(realUrl), config)
      val path = new Path(realUrl)
      val isDeleted = hdfs.delete(path, true)
      hdfs.close()
      result = isDeleted
    }
    result
  }

  /**
    * read the hdfs file content
    *
    * @param hdfsFile a full path name, may like '/tmp/test.txt'
    * @return byte[] file content
    */
  def readHDFSFile(hdfsFile : String) : Array[Byte] = {
    var result =  new Array[Byte](0)
    if (StringUtils.isNoneBlank(hdfsFile)) {
      realUrl = hdfsUrl + hdfsFile
      val config = new Configuration()
      val hdfs = FileSystem.get(URI.create(realUrl), config)
      val path = new Path(realUrl)
      if (hdfs.exists(path)) {
        val inputStream = hdfs.open(path)
        val stat = hdfs.getFileStatus(path)
        val length = stat.getLen.toInt
        val buffer = new Array[Byte](length)
        inputStream.readFully(buffer)
        inputStream.close()
        hdfs.close()
        result = buffer
      }
    }
    result
  }

  /**
    * append something to file dst
    *
    * @param hdfsFile a full path name, may like '/tmp/test.txt'
    * @param content string
    * @return boolean true-success, false-failed
    */
  def append(hdfsFile : String, content : String) : Boolean = {
    var result = false
    if (StringUtils.isNoneBlank(hdfsFile) && null != content) {
      realUrl = hdfsUrl + hdfsFile
      val config = new Configuration()
      config.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER")
      config.set("dfs.client.block.write.replace-datanode-on-failure.enable", "true")
      val hdfs = FileSystem.get(URI.create(realUrl), config)
      val path = new Path(realUrl)
      if (hdfs.exists(path)) {
        val inputStream = new ByteArrayInputStream(content.getBytes())
        val outputStream = hdfs.append(path)
        IOUtils.copyBytes(inputStream, outputStream, 4096, true)
        outputStream.close()
        inputStream.close()
        hdfs.close()
        result = true
      }else {
        HDFSUtil.createNewHDFSFile(hdfsFile, content);
        result = true
      }
    } 
    result
  }
}

简单测试代码

package scala_test_lyh


object testHDFSUtil {
  def main(args: Array[String]): Unit = {
    //赋予hdfs账户的权限否则报权限错误
    System.setProperty("HADOOP_USER_NAME", "hdfs")
    //val result=HDFSUtil.mkdir("/input1")
    //val result=HDFSUtil.deleteDir("/input1")
    //val result=HDFSUtil.listAll("/input")
    //val result=HDFSUtil.uploadLocalFile2HDFS("C:\\Users\\admin\\Desktop\\lyh.zip","/input")
    //val result=HDFSUtil.createNewHDFSFile("/input/test1.txt","hello world")
    //HDFSUtil.deleteHDFSFile("/input/lyh.zip")
    //HDFSUtil.deleteHDFSFile("/input/test1.txt")
    val arr=HDFSUtil.readHDFSFile("/input/manifest.json")
    var str=new String(arr)
    println(str)

  }

测试spark2环境的简单wordCount代码:

package scala_test_lyh

import java.net.URI
import com.alibaba.fastjson.JSON
import org.apache.commons.lang3.StringUtils
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileSystem, Path}
import org.apache.spark.{SparkConf, SparkContext}

object wordCount {
  val hdfsUrl = "hdfs://namenode的ip地址:端口"
  var realUrl = ""
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME", "hdfs")
    val conf=new SparkConf().setAppName("wordCount").setMaster("local")

    val sc=new SparkContext(conf)

    val rdd=sc.textFile(hdfsUrl+args(0))

    rdd.filter(_.trim.length>0)
      .flatMap(_.split(" "))
      .map((_,1))//将每一项转换为key-value,数据是key,value是1
      .reduceByKey(_+_)//将具有相同key的项相加合并成一个
      .collect.foreach(println)

    val arr=readHDFSFile(args(1))
    val manifest_json=new String(arr)
    val json = JSON.parseObject(manifest_json)
    println(json.get("lastUpdated"))
    println(json.getJSONArray("parcels"))
  }

  def readHDFSFile(hdfsFile : String) : Array[Byte] = {
    var result =  new Array[Byte](0)
    if (StringUtils.isNoneBlank(hdfsFile)) {
      realUrl = hdfsUrl + hdfsFile
      val config = new Configuration()
      val hdfs = FileSystem.get(URI.create(realUrl), config)
      val path = new Path(realUrl)
      if (hdfs.exists(path)) {
        val inputStream = hdfs.open(path)
        val stat = hdfs.getFileStatus(path)
        val length = stat.getLen.toInt
        val buffer = new Array[Byte](length)
        inputStream.readFully(buffer)
        inputStream.close()
        hdfs.close()
        result = buffer
      }
    }
    result
  }
}

把上述spark测试代码打成jar包,和依赖第三方jar包fastjson-1.2.47.jar上传到集群环境

需要2个参数:1计算wordCount的文件在hdfs上的地址2解析json的文件在hdfs上的地址

本地模式运行命令:

spark-submit --jars fastjson-1.2.47.jar --class scala_test_lyh.wordCount test.jar /input/wordCount.txt /input/manifest.json

集群spark on yarn模式:

spark-submit --master yarn --jars fastjson-1.2.47.jar --class scala_test_lyh.wordCount test.jar /input/wordCount.txt /input/manifest.json
YOLOv11模型改进全攻略:利用轻量化模块实现精度与速度双跃升 如果你在实操中遇到模块替换导致的精度骤降或部署报错,不妨尝试调整轻量化模块的替换比例,或针对性地保留关键层的原始结构。记住,轻量化的核心是“在精度损失可接受的范围内最大化提升效率”,只要结合业务场景灵活取舍,你也能让YOLOv11在资源受限的环境中大放异彩。接下来,我们从模块选型到代码集成,一步步带你打造“轻量且能打”的YOLOv11,真正帮你解决工业落地中的效率与精度痛点。训练过程中关注模型的mAP和推理速度,若精度下降过多,可调整模块替换的比例(如仅替换Backbone的部分卷积层)。 阅读详情

相关推荐

保姆级教程:手把手带你复现APFNet论文的RGBT目标跟踪模型(附完整代码与数据集配置)

本文提供了一份详细的APFNet论文复现指南,涵盖从环境搭建到模型测试的全流程。通过解析多模态融合模块和渐进式训练流程,帮助读者高效完成RGBT目标跟踪模型的复现工作,特别针对训练和测试中的常见问题提供实用解决方案。

weixin_29056781的博客 342

Spark中RDD的创建与存储

RDD,全称为Resilient Distributed Datasets,是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。 RDD是只读的、分区记录的集合。RDD不需要物化。RDD含有如何从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage),据此可以从物理存储的数据计算出相应的RDD分区。 每个RDD有5个主要的属性: ...

Code_LT的博客 4867

二、声明式 Pipeline 语法

选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值,例如:parameters { choice(name: ‘CHOICES’, choices: [‘one’, ‘two’, ‘three’], description: ‘’) },表示定义一个名为 CHOICES 的变量,可选的值为 one、two、three;默认情况下,如果定义了某个 stage 的 agent,在进入该 stage 的 agent 后,该 stage 的 when条件才会被评估,但是可以通过一些选项更改此选项。

Cyan_Jiang的博客 1220

scala、java读取hdfs文件,获取文件名

import java.io.{BufferedReader, InputStreamReader} import java.net.URI import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FSDataInputStream, FileSystem, Path} import scala.collection.mutable.ArrayBuffer object IpRulesLoaderr8 { var

IT_但丁的博客 1764

防雷防浪涌电路设计

通信线路或者电源线路通常会铺设到户外,一旦线路铺到户外后,就需要考虑防雷的问题了,那么怎么设计保护电路,能够防止雷电等浪涌对电路的破坏呢?

manhuami2007的博客 1万+

Zemax 中的 LED 阵列模型

这些光线是所有光线的子集,用于布局可视化,而不是详细分析。X 和 Y 散度(αx 和 αy)以度为单位,以不同的方式设置为 6 度和 12 度。每个 LED 都以朗伯模式(广角分布)发光,尽管有些 LED 具有内置光学元件,用于更窄或更聚焦的光束。,具体取决于这些类别中使用的半导体材料。LED 阵列由多个发光二极管 (LED) 组成,这些二极管以特定模式或配置排列,以实现均匀照明、更高强度或特定照明特性。如果数据的存在更改为“辐射强度”,则它以弧度为单位显示每个立体角的功率,作为探测器上入射角的函数。

jkh920184196的博客 1595

【Hadoop】(六)详解 HDFS 的数据流 (面试重点)

前言:在《Hadoop系列》的第一篇博文里,就已经提到了【hadoop】(一)分布式文件系统 HDFS,但作为面试中经常遇到的数据流的问题,特地拎出来专门写一篇文章,详细解读 HDFS 数据流的知识点,帮助小伙伴们跳出面试中的那些大坑。

云祁QI 1950

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1623

spark利用scala操作hdfs

1、读取hdfs目录:hadoop dfs -ls path相当于listStatus的简写 //checkpoint目录是:/user/dmspark/accumulate/checkpoint //e.g. /user/dmspark/accumulate/checkpoint/0519936a-5bff-4ecf-a6f0-3854e5952ec9/rdd-689/part-00099 ...

xuehuagongzi000的博客 823

C盘在同一时间突然多出100g的文件,请问是什么原因,以及是否能删除?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1760

热力学仿真软件:SimScale_(1).SimScale入门与基础操作

导航栏:位于页面顶部,包含项目管理、仿真设置、结果分析等主要功能。项目列表:展示用户创建的所有项目。工作区:用于进行具体的操作,如几何建模、网格划分、边界条件设置等。控制台:显示操作日志和仿真进度。网格划分是将几何模型离散化为一系列小单元的过程,这些单元用于求解热力学方程。SimScale提供了多种网格划分方法,包括结构化网格和非结构化网格。SimScale提供了丰富的API接口,用户可以通过编程语言进行二次开发,实现自动化仿真和结果分析。项目管理:创建、删除和管理项目。几何建模:创建、导入和修复几何模型。

kkchenjj的博客 1867

使用scala读取HDFS中的文件内容

要从HDFS读取数据,首先需要建立与HDFS的连接。Scala提供了Hadoop相关的库,可以通过它们连接HDFS并执行各种文件操作。我们只需要将hadoop中的core-site.xml和hdfs-site.xml文件复制一份到工程的src的resource目录下即可~连接成功后,我们可以使用FileSystem对象从HDFS中读取文件。

weixin_45599745的博客 997

【100%通过率】华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】

2023华为OD机试真题 JavaScript【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 587

scala spark 对hdfs文件的操作

1.读取文件 打印(获取)HDFS路径下所有的文件名(包括子目录下的) 2018-11-20 Scala HDFS 前言 自己有个需求,如题,需要获取HDFS路径下所有的文件名,然后根据文件名用Spark进行后续操作。想了一下用Spark好像不太容易获取到,还要递归的去获取子目录下的文件名,于是查了一下,最后用Hadoop的API搞定,这里记录下,方便以后会用到。 1、数据 测试路径...

影密卫 6649

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

HDFS文件操作编程实现(Scala)

【代码】HDFS接口调用与编程(Scala)

super_mochi1 331

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

scala操作hdfs文件

基本工具类: package com.bdsoft.utils import java.net.URI import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.FileSystem object BaseUtil { private var hdfs: FileSystem = _ d...

茂神的博客 4437

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

scala中hdfs文件的操作

对于org.apache.hadoop.fs.Path来说, path.getName只是文件名,不包括路径 path.getParent也只是父文件的文件名,同样不包括路径 path.toString才是文件的全路径名以下是hdfs文件操作的工具类package utilimport org.apache.hadoop.fs._import scala.collection.mutable.{H

ronaldo4511的博客 2万+

scala操作Hadoop Api改变目录权限成777及写入单个hdfs文件

scala操作Hadoop Api改变目录权限成777及写入单个hdfs文件 Hadoop 2.7.0支持修改目录的权限,可以修改成任意权限。这个问题的背景是,如果是某个人生成了一个hdfs路径,同一个group的成员如果想修改这个路径上面的内容,需要重新写入hdfs路径,在新的Hadoop Api这里会存在权限问题,必须将目录的权限修改下才能写入。 如果想单独在某个hdfs目录下面写入一个文件,可以使用FSDataOutputStream类。spark生成的hdfs都是目录,这里使用输出流可以单独

whgyxy的博客 1286

scala读取本地hdfs_Scala操作HDFS

通过Scala对HDFS的一些操作,包括创建目录,删除目录,上传文件,文件读取,删除文件,Append文件等等;import java.io._import java.net.URIimport java.util._import org.apache.commons.lang3.StringUtilsimport org.apache.hadoop.conf.Configurationimpor...

weixin_29547681的博客 1040

scala 编写 hdfs 工具类

scala 编写 hdfs 工具类 scala 创建 删除 hdfs 文件或目录 scala 上传 下载 hdfs 文件 scala 读取 写入 hdfs 文件

桃李不言下自成蹊 1万+

大数据学习35:一个scala 操控 HDFS 文件目录的小例子

一个scala 操控 HDFS 文件目录的小例子: 包含了对文件路径的查看是否存在、删除、创建、重命名、移动。 仅作记录。工具类:HDFSUtilpackage Sparktest import java.io.IOException import java.net.URI import org.apache.hadoop.conf.Configuration import org.apache

ggwxk1990的博客 3420

scala 操作hdfs

获取hdfs文件下所有文件getAllFiles 遍历 spark读取 1 package com.spark.demo 2 3 import java.io.IOException 4 import java.net.URI 5 6 import org.apache.hadoop.conf.Configuration 7 import org.apache....

weixin_30900589的博客 306

scala在spark上操作hdfs

scala在spark上操作hdfs package tester import java.io.BufferedInputStream import java.io.File import java.io.FileInputStream import java.io.InputStream import org.apache.hadoop.conf._ i

linger(心怀梦想,活在当下,知乎ID:linger liu) 1万+

scala读取本地hdfs_Scala-操作Hdfs

Info先生成DataFrame,再把数据储存在HDFS上。import org.apache.spark.sql.functions._import spark.implicits._import org.apache.spark.ml.feature.VectorAssemblerimport org.apache.spark.ml.linalg.{Vector, Vectors}import...

weixin_39879122的博客 1014

scala 删除hdfs文件demo

def delete(master:String,path:String): Unit ={ println("Begin delete!--" + master+path) val output = new org.apache.hadoop.fs.Path(master+path) val hdfs = org.apache.hadoop.fs.FileSys

陈陈的专栏 4794

Scala操作HDFS

Scala操作HDFS 基本的HDFS操作包括:获取文件系统、检查文件是否存在、列举当前目录下的所有文件路径、列举当前目录下的所有文件名称、删除当前路径、创建新的路径 import org.apache.hadoop.conf import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.{FileStatus, F...

whgyxy的博客 2876
上一篇: HadoopWindows权限异常
下一篇: liun基础配置
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值