springboot 对HDFS的文件操作

SpringBoot Hadoop HDFS目录文件下载 @RequestMapping(value = "/downDir", method = {RequestMethod.POST, RequestMethod.GET}) public ResponseEntity<byte[]> downDir(@RequestParam("dirPath") String dirPath, HttpServletRequest r... 阅读详情

1 项目背景

       机器学习平台功能需求之一:对Hadoop文件系统进行操作,实现文件目录的创建、算法组件的删除、修改或上传,算法组件的文件类型暂为jar包,同时一些操作信息记录到MySQL。

2 技术路线

       需要做的几个步骤:

  • Springboot对HDFS操作的相关配置
  • HDFS文件的相关操作业务逻辑 eg: 创建、删除、更新、上传等
  • 文件类型检查,对不符规定的文件限制上传

3 代码实现

       首先添加依赖,本依赖版本和服务器的3.1.2对应,为解决依赖冲突,排除掉一些module

// 大数据环境相关依赖
    implementation ("org.apache.hadoop:hadoop-client:3.1.2"){
        exclude(module: 'slf4j-log4j12')
        exclude(module: 'servlet-api')
    }

    implementation 'org.apache.hadoop:hadoop-common:3.1.2'
    implementation 'org.apache.hadoop:hadoop-hdfs:3.1.2'
3.1 HDFS配置
3.1.1 application.yaml中的部分设置
spring:
  jmx:
    default-domain: service-manager
    enabled: false
  application:
    name: srv-dmp-manager-dev
  profiles:
    active: ${spring.profiles.active}
  main:
    allow-bean-definition-overriding: true
  http:
    encoding:
      charset: UTF-8
      force: true
      enabled: true
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/dmp_experiment?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=utf-8
    username: root
    password: 123456
  servlet:
    #文件上传大小限制
    multipart:
      max-request-size: 100MB
      max-file-size: 100MB
app:
  env: dev
  swagger-enable: true
  web:
    upload-path:
    domain: dmp-dev.com.zhg.cn
  #添加hdfs路径配置
  hdfs:
    path: hdfs://nameservice1/
    username: zhanghuigen
3.1.2 HDFS文件系统对象的获取

       这一步 网上资源 大多把文件系统对象做成单例的工具,亦或设置成类静态变量,然后供外部直接调用。但是实际运行时发现,在执行多个HDFS业务逻辑(删除、读取目录文件、上传文件)时由于前面操作执行完成后对文件系统对象的关闭,造成后续操作执行时没有可用的连接,会报错:java.io.IOException: Filesystem closed。还有一种说法是先设置禁用缓存,将core-site.xml中的fs.hdfs.impl.disable.cache设置为true,然后在创建文件系统实例的时候使用: FileSystem fs=FileSystem.newInstance(conf),而不是用:fs = FileSystem.get(conf);但本项目按照上述配置还是会报错。
       所以获取文件系统对象这一步果断不设置静态或单例了,直接封装成类中的一个方法,service中用的时候new一下,用完之后直接close。以下是工具类的封装:

/**
 * @author zhanghuigen
 * @since 0.1.0
 **/
@Component
public class HadoopUtil {

    @Value("${app.hdfs.path}")
    private String path;

    @Value("${app.hdfs.username}")
    private String username;

    private FileSystem hdfs;

    /**
     * 获取HDFS文件系统对象
     * @return file system
     */
    public FileSystem getFileSystem(){
        // 返回指定的文件系统,如果在本地测试,需要使用此种方法获取文件系统
        if (hdfs==null){
            //读取配置文件
            Configuration conf = new Configuration();
            conf.addResource(new Path("hdfs-site.xml"));
            conf.set("fs.defaultFS","hdfs://nameservice1");
            conf.setBoolean("fs.hdfs.impl.disable.cache", true);
            try {
                hdfs = FileSystem.newInstance(conf);
            } catch ( Exception e) {
                e.printStackTrace();
            }
        }
        return hdfs;
    }
}

       这里把大数据平台中配置文件中的hdfs-site.xml部分拷贝一份加载进ClassPath中,然后读资源配置,设置名称服务即可。
在这里插入图片描述

3.2 业务逻辑

       直接贴代码了,具体HDFS文件的操作就是先获取文件系统对象,再创建流,读写完毕后再关闭流和文件系统对象。

/**
 * @author zhanghuigen
 * @since 0.1.0
 **/
@Service
@Transactional(rollbackFor = Exception.class)
public class HdfsFileServiceImpl implements HdfsFileService {

    @Resource
    private HdfsFileMapper hdfsFileMapper;

    @Override
    public DataList<HdfsFile> getAllFiles(PageInfo pageInfo) throws Exception {
        if(pageInfo.getCurrentPage()==null || pageInfo.getPageSize()==null){
            pageInfo.setCurrentPage(PageInfo.DEFAULT_CURRENT_PAGE);
            pageInfo.setPageSize(PageInfo.DEFAULT_PAGE_SIZE);
        }
        Page<HdfsFile> page = PageHelper.startPage(pageInfo.getCurrentPage(),pageInfo.getPageSize(),true);
        hdfsFileMapper.getAllFile(pageInfo);
        List<HdfsFile> hdfsFileList = page.getResult();
        return new DataList<>(page.getTotal(),page.getPageNum(),hdfsFileList);
    }

    @Override
    public boolean mkdir(String path) throws Exception {
        if (StringUtils.isEmpty(path)) {
            return false;
        }
        if (existFile(path)) {
            return true;
        }
        HadoopUtil util = new HadoopUtil();
        FileSystem fs = util.getFileSystem();
        // 目标路径
        Path srcPath = new Path(path);
        // 创建目录
        boolean isOk = fs.mkdirs(srcPath);
        fs.close();
        return isOk;
    }

    @Override
    public boolean createHdfsFile(HdfsFile hdfsFile, MultipartFile file) throws Exception{
        //先上传至HDFS,再在数据库中插入记录
        String url = hdfsFile.getUrl();
        if (uploadFile(url,file)){
            hdfsFile.setUrl(url+"/"+file.getOriginalFilename());
            return addFileRecord2Db(hdfsFile);
        }
        return false;
    }

    @Override
    public boolean editHdfsFile(HdfsFile hdfsFile) throws Exception{
        HdfsFile originHdfsFile = hdfsFileMapper.getFileById(hdfsFile.getId());
        if (null!=originHdfsFile){
            return updateFileRecord2Db(hdfsFile);
        }
        return false;
    }

    @Override
    public boolean editHdfsFile(HdfsFile hdfsFile, MultipartFile file) throws Exception{
        //文件非空,先上传至HDFS,再在数据库中更新记录
        String url = hdfsFile.getUrl();
        if (uploadFile(url,file)){
            hdfsFile.setUrl(url+"/"+file.getOriginalFilename());
            return updateFileRecord2Db(hdfsFile);
        }
        return false;
    }

    @Override
    public boolean uploadFile(String path, MultipartFile file) throws Exception {
        if (StringUtils.isEmpty(path) || null == file.getBytes()) {
            return false;
        }
        String fileName = file.getOriginalFilename();
        HadoopUtil util = new HadoopUtil();
        FileSystem fs = util.getFileSystem();
        // 上传时默认当前目录,后面自动拼接文件的目录
        Path newPath = new Path(path + "/" + fileName);
        // 打开一个输出流
        FSDataOutputStream outputStream = fs.create(newPath);
        outputStream.write(file.getBytes());
        outputStream.close();
        fs.close();
        return true;
    }

    @Override
    public boolean deleteFileById(Integer id) throws Exception{
        HdfsFile fileMeta = hdfsFileMapper.getFileById(id);
        if (fileMeta!=null&&existFile(fileMeta.getUrl())){
            HadoopUtil util = new HadoopUtil();
            FileSystem fs = util.getFileSystem();
            Path newPath = new Path(fileMeta.getUrl());
            boolean isOk = fs.deleteOnExit(newPath);
            fs.close();
            if (isOk){
                return hdfsFileMapper.deleteFileById(id);
            }
        }
        return false;
    }

    @Override
    public HdfsFile getFileById(Integer id) throws Exception {
        return hdfsFileMapper.getFileById(id);
    }

    @Override
    public boolean addFileRecord2Db(HdfsFile meta) throws Exception {
        int num = hdfsFileMapper.addFile(meta);
        return num > 0;
    }

    @Override
    public boolean updateFileRecord2Db(HdfsFile meta) throws Exception {
        return hdfsFileMapper.updateFile(meta);
    }

    /**
     * 判断HDFS文件是否存在
     * @param path path
     * @return boolean
     * @throws Exception ex
     */
    private boolean existFile(String path) throws Exception {
        if (StringUtils.isEmpty(path)) {
            return false;
        }
        HadoopUtil util = new HadoopUtil();
        FileSystem fs = util.getFileSystem();
        Path srcPath = new Path(path);
        boolean isExisted = fs.exists(srcPath);
        fs.close();
        return isExisted;
    }
}
3.3 文件类型检测

       这部分代码网上资源很多,封装一下即可,常见文件头信息放在配置文件里较好,本地测试就直接写在了源码中。

/**
 * @author zhaozhengkang
 */
@Slf4j
public class FileTypeChecker {
    public final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();

    private FileTypeChecker(){}
    static{
        getAllFileType(); //初始化文件类型信息
    }

    /**
     * Discription:[getAllFileType,常见文件头信息]
     */
    private static void getAllFileType() {
        FILE_TYPE_MAP.put("ffd8ffe", "jpg");
        FILE_TYPE_MAP.put("ffd8ffe1","jpeg");
        FILE_TYPE_MAP.put("89504e47", "png");
        FILE_TYPE_MAP.put("504b0304", "zip");
        FILE_TYPE_MAP.put("52617221", "rar");
        FILE_TYPE_MAP.put("d0cf11e0", "doc");
        FILE_TYPE_MAP.put("25504446", "pdf");
        FILE_TYPE_MAP.put("504b03041", "docx");
        FILE_TYPE_MAP.put("6173646b", "txt");
        FILE_TYPE_MAP.put("5F27A889", "jar");
        FILE_TYPE_MAP.put("47494638", "gif");
        FILE_TYPE_MAP.put("49492a00", "tif");
        FILE_TYPE_MAP.put("424d", "bmp");
        FILE_TYPE_MAP.put("41433130", "dwg");
        FILE_TYPE_MAP.put("3c21444f", "html");
        FILE_TYPE_MAP.put("3c21646f", "htm");
        FILE_TYPE_MAP.put("48544d4c", "css");
        FILE_TYPE_MAP.put("696b2e71", "js");
        FILE_TYPE_MAP.put("7b5c7274", "rtf");
        FILE_TYPE_MAP.put("38425053", "psd");
        FILE_TYPE_MAP.put("46726f6d", "eml");
        FILE_TYPE_MAP.put("5374616E", "mdb");
        FILE_TYPE_MAP.put("25215053", "ps");
        FILE_TYPE_MAP.put("2e524d46", "rmvb");
        FILE_TYPE_MAP.put("464c5601", "flv");
        FILE_TYPE_MAP.put("00000020", "mp4");
        FILE_TYPE_MAP.put("49443303", "mp3");
        FILE_TYPE_MAP.put("000001ba", "mpg");
        FILE_TYPE_MAP.put("3026b2758", "wmv");
        FILE_TYPE_MAP.put("52494646e", "wav");
        FILE_TYPE_MAP.put("52494646d", "avi");
        FILE_TYPE_MAP.put("4d546864", "mid");
        FILE_TYPE_MAP.put("23546869", "ini");
        FILE_TYPE_MAP.put("4d5a9000", "exe");
        FILE_TYPE_MAP.put("3c254020", "jsp");
        FILE_TYPE_MAP.put("4d616e69", "mf");
        FILE_TYPE_MAP.put("3c3f786d", "xml");
        FILE_TYPE_MAP.put("494e5345", "sql");
        FILE_TYPE_MAP.put("7061636b", "java");
        FILE_TYPE_MAP.put("40656368", "bat");
        FILE_TYPE_MAP.put("1f8b0800", "gz");
        FILE_TYPE_MAP.put("6c6f6734", "properties");
        FILE_TYPE_MAP.put("cafebabe", "class");
        FILE_TYPE_MAP.put("49545346", "chm");
        FILE_TYPE_MAP.put("04000000", "mxp");
        FILE_TYPE_MAP.put("6431303a", "torrent");
        FILE_TYPE_MAP.put("6D6F6F76", "mov");
        FILE_TYPE_MAP.put("FF575043", "wpd");
        FILE_TYPE_MAP.put("CFAD12FE", "dbx");
        FILE_TYPE_MAP.put("2142444E", "pst");
        FILE_TYPE_MAP.put("AC9EBD8F", "qdf");
        FILE_TYPE_MAP.put("E3828596", "pwl");
        FILE_TYPE_MAP.put("2E7261FD", "ram");
    }

    /**
     * 得到上传文件的文件头
     * @param src
     * @return
     */
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder();
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * 根据制定文件的文件头判断其文件类型
     * @param file
     * @return
     */
    public static String getFileType(MultipartFile file){
        String res = null;
        try {
            InputStream is = file.getInputStream();
            byte[] b = new byte[10];
            is.read(b, 0, b.length);
            String fileCode = bytesToHexString(b);
            System.out.println(fileCode);
            //这种方法在字典的头代码不够位数的时候可以用但是速度相对慢一点
            Iterator<String> keyIter = FILE_TYPE_MAP.keySet().iterator();
            while(keyIter.hasNext()){
                String key = keyIter.next();
                if(key.toLowerCase().startsWith(fileCode.toLowerCase()) ||
                        fileCode.toLowerCase().startsWith(key.toLowerCase())){
                    res = FILE_TYPE_MAP.get(key);
                    break;
                }
            }
            is.close();
        } catch (IOException e) {
            log.info(e.getMessage());
        }
        return res;
    }
    public static String getSuffix(String fileName){
        return fileName.substring(fileName.lastIndexOf(".")+1);
    }
}

       在controller中定义一个可上传文件类型白名单,当然这最好也写在配置文件里

private static final ArrayList<String> FILE_VALID_TYPES = new ArrayList<>();
    static {
        FILE_VALID_TYPES.add("jar");
        FILE_VALID_TYPES.add("png");
        FILE_VALID_TYPES.add("jpg");
        FILE_VALID_TYPES.add("jpeg");
        FILE_VALID_TYPES.add("zip");
        FILE_VALID_TYPES.add("pdf");
        FILE_VALID_TYPES.add("rar");
        FILE_VALID_TYPES.add("docx");
        FILE_VALID_TYPES.add("doc");
    }

       然后在action处先对文件类型做检查,这里以编辑文件信息为例,前端修改表单数据,点击选择上传的文件,也可以只编辑表单数据而不上传文件(MultipartFile = null),所以方法中用@RequestParam(value=“file”, required=false)修饰MultipartFile参数:

/**
     * 编辑HDFS文件信息
     * @param hdfsFile hdfsFile
     * @param file file
     * @return base response
     * @throws Exception ex
     */
    @ApiOperation(value = "编辑文件信息并上传文件至HDFS")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "hdfsFile", value = "hdfsFile", dataType = "HdfsFile"),
            @ApiImplicitParam(name = "file", value = "file", dataType = "MultipartFile")
    })
    @PostMapping("/hdfs/edit")
    public BaseResponse editFile(HdfsFile hdfsFile, @RequestParam(value="file", required=false) MultipartFile file) throws Exception {
        if (null!=file){
            String fileType = FileTypeChecker.getFileType(file);
            if(!FILE_VALID_TYPES.contains(fileType)){
                throw new UploadException(UploadExceptionEnum.INVALID_FILE_TYPE.getCode(),
                        UploadExceptionEnum.INVALID_FILE_TYPE.getMessage());
            }
            return BaseResponse.buildSuccessResponse(hdfsService.editHdfsFile(hdfsFile,file));
        }else {
            return BaseResponse.buildSuccessResponse(hdfsService.editHdfsFile(hdfsFile));
        }
    }
3.4 测试

       安利一个新工具ApiPost,当然Postman也可以用。以上传文件为例,这里body中同时上传文件(jar、pdf、png等白名单指定类型)和对应的文件基本信息(对应类HdfsFile中的字段),上传文件的同时把文件信息存储于MySQL,测试结果如下:
在这里插入图片描述
       登录HUE查看文件是否已上传至HDFS:
在这里插入图片描述
MySQL中的数据记录:
在这里插入图片描述

大数据之_Hadoop工作笔记002---SpringBoot连接Hadoop HDFS进行创建文件夹,添加上传文件,删除文件,下载文件操作 技术交流QQ群【JAVA,.NET,BigData,AI】:170933152 首先,把环境搭好,至今我只搭了非集群的。看另一篇博文, idea开发 1.创建工程,选择:WEB,把web勾上,选择sql,把jdbc,mysql,mybatis勾上 2.配置文件 E:\IdeaWkSpace\hadoopdemo\src\main\resources\application.prop... 阅读详情

相关推荐

SpringBoot整合Hadoop实战案例:从HDFS操作到推荐系统的完整Demo

操作类型方法名功能创建文件create()创建新文件并写入内容读取文件open()打开文件并读取内容删除文件delete()删除指定路径的文件修改文件append()追加内容到已有文件这些操作构成了SpringBoot项目中HDFS文件操作的核心逻辑,为后续的数据处理与分析奠定了基础。优化策略实现方式效果块大小调整修改减少NameNode负担缓存机制使用本地缓存Map提高读取速度缓冲流。

weixin_42351520的博客 767

HDFS的API操作(通过springboot实现)

在windows下编程并运行代码对虚拟机中的hadoop集群进行操作。主体内容为讲述如何使用HDFS API对HDFS分布式文件系统进行操作,

m0_52931616的博客 2017

使用springboot基于hdfs和HBase实现的一个海量的对象存储服务.zip

人工智能-hdfs

Eclipse中Spring boot项目整合Hadoop的HDFS(获得的数据会以CSV文件存入HDFS)

由于最近需要使用Spring boot整合Hadoop的HDFS,但是在整合的过程遇到了很多问题,配置了很久都没能把项目搭建出来。使用Spring boot整合HDFS主要是为了从数据库获取List,将List数据生产CSV文件,导入到HDFS进行机器学习。本文主要讲解如何整合成功和如果将List数据变成CSV文件存进HDFS当中。简单整理下会出现的问题:1.使用过程使用了@Slf4j,但是使用了...

qq_19277297的博客 3804

基于spring-boot和hdfs的网盘.zip

人工智能-hdfs

告别信号毛刺!手把手教你用ADS和IBIS-AMI模型搞定PCIe Gen3眼图仿真

本文详细介绍了如何使用Keysight ADS和IBIS-AMI模型进行PCIe Gen3眼图仿真,解决高速信号传输中的信号质量问题。从仿真环境搭建、S参数预处理到眼图优化与故障排除,提供了一套完整的工程实践指南,帮助工程师提升PCIe Gen3接口的信号完整性。

weixin_28366053的博客 371

Springboot连接HDFS

连接HDFS并创建文件夹 1.创建URI对象,参数为HDFS对应ip端口 URI uri = new URI("hdfs://192.168.109.135:9000"); 2. 创建连接配置 Configuration configuration = new Configuration(); String user="hadoop"; FileSystem fs = FileSystem.get(uri, configuration,user); 3.代码 pom依赖导入: <.

kurtosis的博客 1249

图文实录|大规模预训练模型:探讨与展望

第二期「澜舟分享会」我们邀请到来自复旦大学计算机学院邱锡鹏教授分享了“大规模预训练模型:探讨与展望”,本此演讲主要围绕大规模预训练语言模型展开讨论,并探讨大模型成功的原因、适用场景、未来发展方向以及身处大模型时代我们的机遇。

langboat_mengzi的博客 1205

SpringBoot集成Hadoop——对HDFS的文件操作

文章目录 一、对HDFS操作设计以下几个主要的类 二、依赖配置 三、HDFS文件操作接口开发 四、一些测试结果截图 一、对HDFS操作设计以下几个主要的类: Configuration:封装了客户端或者服务器的配置信息; FileSystem:此类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作通过FileSystem的静态方法get获得该对象,例:FileSystem hdfs = FileSystem.get(conf); FSDataInputStream:这是HDFS中的输入

weixin_45131680的博客 1977

Unity 升级引擎版本后构建报错:script class layout is incompatible between the editor and the player

Unity升级引擎版本后,项目报错:script class layout is incompatible between the editor and the player。

学习与分享 595

abaqus2matlab的安装与使用:如何用matlab提取abaqus的odb结果

官网abaqus2matlab官网地址matlab社区地址matlab社区地址在这里可以看到.m文件的源码论文:Abaqus2Matlab: A suitable tool for finite element post-processingabaqus2matlab可以处理.inp、.fil、.odb三种类型的文件。.inp文件:处理功能就在于只是单纯的输出inp文件,由于我自己写了自己的函数,不需要用到这个功能。

qianxin1234的博客 2019

SpringBoot集成Hadoop系列一 ---- 对HDFS的文件操作

一.对HDFS操作设计以下几个主要的类: Configuration:封装了客户端或者服务器的配置信息 FileSystem:此类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作通过FileSystem的静态方法get获得该对象,例:FileSystem hdfs = FileSystem.get(conf); FSDataInputStream:这是HDFS中的输入流,通过...

汉南最後の読書人 3万+

汇川PLC程序框架设计:模块化分层与标准化实践指南

在工业自动化领域,可编程逻辑控制器(PLC)是设备控制的核心大脑。其编程质量直接决定了系统的稳定性、可维护性与开发效率。遵循高内聚、低耦合的软件工程原则,通过模块化分层设计,能够将复杂的控制逻辑分解为硬件驱动、设备控制、流程管理等清晰层级,并利用功能块(FB)封装可复用的设备控制逻辑。这种结构化方法的技术价值在于大幅提升代码的可读性、可测试性与团队协作效率,有效降低后期维护与功能迭代的难度。其应用场景广泛覆盖从单机设备到复杂产线的自动化项目。本文聚焦于汇川PLC平台,深入探讨如何构建一套融合了**状态机编程

weixin_29188997的博客 402

SpringBoot整合Hadoop的案例代码demo,含HDFS文件操作、MapReduce分词操作、案例数据分析,系统推荐等

springboot整合Hadoop,进击大数据一小步。SpringBoot整合Hadoop的案例代码demo1、hdfs基本操作。

Python代码大全 688

STM32与AD7606的SPI通信优化:提升高精度数据采集效率

本文深入探讨了STM32与AD7606的SPI通信优化策略,旨在提升高精度数据采集系统的效率与稳定性。文章从硬件连接、电源去耦、PCB布局等基础环节入手,详细解析了软件驱动中SPI模式配置、DMA应用及精准时序控制等关键优化技术,并提出了系统级的性能提升方案,帮助开发者解决高速采样下的数据跳动、效率瓶颈等实际问题。

weixin_29192211的博客 394

MagicDraw-用例图

MagicDraw-用例图

木头征的博客 3134

SpringBoot +Hadoop3.1.0 hdfs文件操作流程:

1、项目结构: 核心pom.xml 文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav...

zhouzhiwengang的专栏 4105

C语言实现惯导系统的间接粗对准

间接粗对准方法具有更好的角晃动抗干扰能力,只是在短时间内线晃动抗干扰能力相对弱些,若适当延长粗对准时间(一般在分钟量级),间接粗对准方法往往都能够取得良好的效果。间接粗对准方法是一种非常实用的捷联惯导粗对准方法,得到了广泛的应用。在惯导系统进入工作前,需要进行初始对准,使得惯导系统与当地导航坐标系指向一致,便于惯导系统更好地进入工作状态。博主利用C语言实现了间接粗对准,间接粗对准较之解析粗对准更有优势。以上函数中使用的其他函数块,已在之前或之后的博客中给出。

十八与她的博客 790

day02 使用idea新建springboot项目并测试hdfs连接

使用idea创建springboot来操作hdfs

Tgmmmmmmmm的博客 715

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Hadoop/Java】基于HDFS的Java Web网络云盘

基于Hadoop HDFS的Java Web网络云盘

gennwolf的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

基于springboot,hdfs的网盘系统(基础框架)(云服务器搭建的分布式架构上的hdfs,windows编译器IDEA,包含全开发流程,springboot部署在linux上,可公网访问)

基于springboot,hdfs的网盘系统(云服务器搭建的分布式架构上的hdfs,windows编译器IDEA,包含全开发流程,springboot部署在linux上,可公网访问)

m0_45311187的博客 1789

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【Java大数据开发】 Springboot整合hadoop

4. 在测试类中执行创建。文件夹,上传,下载文件。

weixin_45131680的博客 1478

SpringBoot 整合HDFS

文章目录SpringBoot 整合HDFS1 window本地测试前置操作2 整合代码2.1 pom2.2 code3 上传加载 SpringBoot 整合HDFS 1 window本地测试前置操作 本地安装hadhoop 2 整合代码 2.1 pom <!-- hadoop--> <dependency> <groupId>org.apache.hadoop</groupId> <

qq_27242695的博客 3541

Springboot操作Docker中的hadoop

基于Springboot完成对hadoop的数据简单操作

杨宇 826

Docker安装Hadoop

一、安装命令 docker pull sequenceiq/hadoop-docker docker run -it -p 50070:50070 -p 8088:8088 -p 50075:50075 sequenceiq/hadoop-docker /etc/bootstrap.sh -bash --privileged=true 二、启动服务 cd /usr/local/hadoop/sbin ./start-all.sh 服务启动验证: ...

summer_fish的专栏 1707

hdfs集成springboot使用

1)方法1:通过将hdfs的两个配置文件(hdfs-site.xml、core-site.xml)放到resources文件夹下后,新建Configuration的时候设置为true会自动读取,也可以通过conf.set(“配置”,“值”)来修改配置项。11)递归查询目录所有文件信息,比listStatus多了文本大小,副本系数,块大小信息。3)创建文件夹并设置权限为文件所有者可读可写,文件所有组可读可写,其他人可读。10)输出所有列表所有文件和文件夹信息。13)查询文件块信息并跳转读取。

weixin_45880765的博客 1064
上一篇: 百度地图街景图片爬取
下一篇: SpringCloud与SpringBoot的版本对应及相关札记整理
zhg_vincent
博客等级 码龄12年 93粉丝 45原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值