java实现将ftp和http的文件直接传送到hdfs

之前实现了使用流来讲http和ftp的文件下载到本地,也实现了将本地文件上传到hdfs上,那现在就可以做到将
ftp和http的文件转移到hdfs上了,而不用先将ftp和http的文件拷贝到本地再上传到hdfs上了。其实这个东西的原理
很简单,就是使用流,将ftp或http的文件读入到流中,然后将流中的内容传送到hdfs上,这样子就不用让数据存到
本地的硬盘上了,只是让内存来完成这个转移的过程,希望这个工具,能够帮到有这样需求的同学~
这里先附上之前的几个工具的链接:

http工具
ftp工具
链接描述

代码如下:

import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;

public class FileTrans {
  private String head = "";
  private String hostname = "";
  private String FilePath = "";
  private String hdfsFilePath = "";
  private HDFSUtil hdfsutil = null;
  private FtpClient ftp;
  private HttpUtil http;

  public void setFilePath(String FilePath){
    this.FilePath = FilePath;
  }

  public String getFilePath(String FilePath){
    return this.FilePath;
  }

  public void sethdfsFilePath(String hdfsFilePath){
    this.hdfsFilePath = hdfsFilePath;
  }

  public String gethdfsFilePath(String hdfsFilePath){
    return this.hdfsFilePath;
  }

  public void setHostName(String hostname){
    this.hostname = hostname;
  }

  public String getHostName(){
    return this.hostname;
  }

  public void setHead(String head){
    this.head = head;
  }

  public String getHead(){
    return this.head;
  }

  public FileTrans(String head, String hostname, String filepath, String hdfsnode,String hdfsFilepath){
    this.head = head;
    this.hostname = hostname;
    this.FilePath = filepath;
    this.hdfsFilePath = hdfsFilepath;
    if (head.equals("ftp") && hostname != ""){
      this.ftp = new FtpClient(this.hostname);
    }
    if ((head.equals("http") || head .equals("https")) && hostname != ""){
      String httpurl = head + "://" + hostname + "/" + filepath;
      this.http = new HttpUtil(httpurl);
    }
    if (hdfsnode != ""){
      this.hdfsutil = new HDFSUtil(hdfsnode);
    }
    this.hdfsutil.setHdfsPath(this.hdfsFilePath);
    this.hdfsutil.setFilePath(hdfsutil.getHdfsNode()+hdfsutil.getHdfsPath());
    this.hdfsutil.setHadoopSite("./hadoop-site.xml");
    this.hdfsutil.setHadoopDefault("./hadoop-default.xml");
    this.hdfsutil.setConfigure(false);
  }

  public static void main(String[] args) throws IOException{
    String head = "";
    String hostname = "";
    String filepath = "";
    String hdfsfilepath = "";
    String hdfsnode = "";
    String localpath = "";
    InputStream inStream = null;
    int samplelines = 0;
    try{
      head = args[0];         //远端服务器类型,http还是ftp
      hostname = args[1];       //远端服务器hostname
      filepath = args[2];       //远端文件路径
      hdfsnode = args[3];       //hdfs的机器名,不带hdfs开头
      hdfsfilepath = args[4];     //hdfs的文件路径
      localpath = args[5];       //如果需要在本地保存一份的话,输入本地的路径,不保存,传入空格或者samplelines传入0
      samplelines = Integer.parseInt(args[6]); //保存在本地的话,保存前N行,如果不保存,填0
    }catch (Exception e){
      System.out.println("[FileTrans]:input args error!");
      e.printStackTrace();
    }
    FileTrans filetrans = new FileTrans(head, hostname, filepath, hdfsnode,hdfsfilepath);
    if (filetrans == null){
      System.out.println("filetrans null");
      return;
    }
    if (filetrans.ftp == null && head.equals("ftp")){
      System.out.println("filetrans ftp null");
      return;
    }
    if (filetrans.http == null && (head.equals("http") || head.equals("https"))){
      System.out.println("filetrans ftp null");
      return;
    }
    try{
      if (head.equals("ftp")){
        inStream = filetrans.ftp.getStream(filepath);
        if (samplelines > 0){
          filetrans.ftp.writeStream(inStream, localpath, samplelines);
        }
      }
      else{
        inStream = filetrans.http.getStream(head + "://" + hostname + "/" + filepath);
        if (samplelines > 0){
          filetrans.http.downLoad(head + "://" + hostname + "/" + filepath, localpath, samplelines);
        }
      }
      filetrans.hdfsutil.upLoad(inStream, filetrans.hdfsutil.getFilePath());
      if (head == "ftp"){
        filetrans.ftp.disconnect();
      }
    }catch (IOException e){
      System.out.println("[FileTrans]: file trans failed!");
      e.printStackTrace();
    }
    System.out.println("[FileTrans]: file trans success!");
  }

}

编译有问题的话,在hadoop工具的那篇文章中有提到,可以参考
注:最好将其他三个工具的文件放在同一个目录下,如果不放在一起,那么请自行引用

这个工具既可以将ftp或者http转移到hdfs,也能将前N行保存到本地,进行分析

以上就是本文所述的全部内容了,希望能够对大家学习java有所帮助。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

(0)

相关推荐

  • Java访问Hadoop分布式文件系统HDFS的配置说明

    配置文件 m103替换为hdfs服务地址. 要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件hadoop-0.20.2/conf/core-site.xml了,最初我就是在这里吃了大亏,所以我死活连不上HDFS,文件无法创建.读取. <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <co

  • 详解HDFS多文件Join操作的实例

    详解HDFS多文件Join操作的实例 最近在做HDFS文件处理之时,遇到了多文件Join操作,其中包括:All Join以及常用的Left Join操作, 下面是个简单的例子:采用两个表来做left join其中数据结构如下: A 文件: a|1b|2|c B文件: a|b|1|2|c 即:A文件中的第一.二列与B文件中的第一.三列对应:类似数据库中Table的主键/外键 代码如下: import java.io.DataInput; import java.io.DataOutput; imp

  • hadoop的hdfs文件操作实现上传文件到hdfs

    hdfs文件操作操作示例,包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,大家参考使用吧 复制代码 代码如下: import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.*; import java.io.File;import java.io.IOException;public class HadoopFile {    private Configuration conf =null

  • java连接hdfs ha和调用mapreduce jar示例

    Java API 连接 HDFS HA 复制代码 代码如下: public static void main(String[] args) {  Configuration conf = new Configuration();  conf.set("fs.defaultFS", "hdfs://hadoop2cluster");  conf.set("dfs.nameservices", "hadoop2cluster");

  • JAVA操作HDFS案例的简单实现

    本文介绍了JAVA操作HDFS案例的简单实现,分享给大家,也给自己做个笔记 Jar包引入,pom.xml: <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.8.0</version> </dependency> <dependency> <gr

  • HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的文件操作主要涉及一下几个类: Configuration类:该类的对象封转了客户端或者服务器的配置. FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作.FileSystem fs = FileSystem.get(conf);通过FileSystem的静态

  • hadoop重新格式化HDFS步骤解析

    了解Hadoop的同学都知道,Hadoop有两个核心的组成部分,一个是HDFS,另一个则是MapReduce,HDFS作为Hadoop的数据存储方案,MapReduce则提供计算服务:同时,HDFS作为一种分布式文件系统,它的安装也是需要相应的格式化操作的,如果安装失败或者我们需要重新安装的时候,那我们就需要对HDFS重新进行格式化,这篇文章就和大家一起讨论下如何进行HDFS的重新格式化. 重新格式化hdfs系统的方法: 1.打开hdfs-site.xml 我们打开Hadoop的hdfs-sit

  • hadoop格式化HDFS出现错误解决办法

    hadoop格式化HDFS出现错误解决办法 报错信息: host:java.net.UnknownHostException: centos-wang: centos-wang: unknown error 在执行hadoop namenode -format命令时,出现未知的主机名. 问题原因: 出现这种问题的原因是Hadoop在格式化HDFS的时候,通过hostname命令获取到的主机名与/etc/hosts文件中进行映射的时候,没有找到. 解决方案: 1.修改/etc/hosts内容 2.

  • java 中Spark中将对象序列化存储到hdfs

    java 中Spark中将对象序列化存储到hdfs 摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子演示了Spark环境下从Hbase读取数据, 生成一个word2vec模型, 存储到hdfs. 废话不多说, 直接贴代码了. spark1.4 + hbase0.98 import org.apache.spark.storage.StorageLevel imp

  • java实现将ftp和http的文件直接传送到hdfs

    之前实现了使用流来讲http和ftp的文件下载到本地,也实现了将本地文件上传到hdfs上,那现在就可以做到将 ftp和http的文件转移到hdfs上了,而不用先将ftp和http的文件拷贝到本地再上传到hdfs上了.其实这个东西的原理 很简单,就是使用流,将ftp或http的文件读入到流中,然后将流中的内容传送到hdfs上,这样子就不用让数据存到 本地的硬盘上了,只是让内存来完成这个转移的过程,希望这个工具,能够帮到有这样需求的同学~ 这里先附上之前的几个工具的链接: http工具 ftp工具

  • Java多线程实现FTP批量上传文件

    本文实例为大家分享了Java多线程实现FTP批量上传文件的具体代码,供大家参考,具体内容如下 1.构建FTP客户端 package cn.com.pingtech.common.ftp; import lombok.extern.slf4j.Slf4j; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.*; import java.net

  • java基于Apache FTP实现文件上传、下载、修改文件名、删除

    Apache FTP 是应用比较广泛的FTP上传客户端工具,它易于操作,代码简略,结构清晰,是做FTP文件客户端管理软件的优先之选.FTP的操作包括:FTP文件上传(断点续传).FTP文件下载.FTP文件重命名.FTP文件删除,这些操作已经将FTP应用管理的方式发挥的淋漓尽致了,So 我一直都用此种方式来实现FTP文件服务器的管理工作:下附FTP工具代码. 1.FTP文件操作状态枚举类 package com.scengine.wtms.utils.ftp; public enum FTPSta

  • Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    一个JAVA 实现FTP功能的代码,包括了服务器的设置模块,并包括有上传文件至FTP的通用方法.下载文件的通用方法以及删除文件.在ftp服务器上传文件夹.检测文件夹是否存在等,里面的有些代码对编写JAVA文件上传或许有参考价值,Java FTP主文件代码: package ftpDemo; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import sun.net

  • java基于Apache FTP点断续传的文件上传和下载

    基于Apache FTP实现文件上传下载工具 ,上传文件时需要考虑以下问题(实例是续传功能): (1). FTP服务器是否存在改目录,如果不存在目录则需要创建目录. (2).判断上传文件是否已经存在,如果存在是需要删除后再上传还是续传. 1.上传或下载状态的枚举类: package com.scengine.wtms.utils.ftp; public enum UploadStatus { File_Exits(0), Create_Directory_Success(1), Create_D

  • java基于jcifs.smb实现远程发送文件到服务器

    本文实例为大家分享了java实现远程发送文件到服务器的具体代码,供大家参考,具体内容如下 1.依赖的相关jar包         jcifs-1.3.14.1.jar 2.创建SMB的声明 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.MalformedURLException;

  • Android FTP服务器上传文件攻略(代码详解)

    1.前言 在开发中,会遇到向FTP服务器上传文件的需求,首先要导入 commons-net-3.3.jar 然后利用api进行相关操作,具体功能如下: Ftp相关代码 import android.util.Log; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.i

  • Java+Springboot搭建一个在线网盘文件分享系统

    目录 前言 效果图 主要代码 管理员控制器: 文件仓库控制器: 登录控制器: FTP工具类:  前言 springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百度网盘非常类似,普通用户可以注册登录,注册后默认分配1G的空间大小,登录进去后可以新建文件夹.上传各种类型的文件.文件移动.复制.下载.删除.分享,分享分为私密分享和公开分享,还可以设置分享过期时间,打开分享链接后可以对文件进行查看.下载.保存到自己网盘等.超级管理员登录后可以设置普通用户的空间大小.

  • Java 读取类路径下的资源文件实现代码

    Java 读取类路径下的资源文件实现代码 一.工具类代码ResourceLoadUtil.java import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; public class ResourceLoadUtil { /** * @par

  • Java Struts图片上传至指定文件夹并显示图片功能

    继上一次利用Servlet实现图片上传,这次利用基于MVC的Struts框架,封装了Servlet并简化了JSP页面跳转. JSP上传页面 上传一定要为form加上enctype="multipart/form-data",表示提交的数据时二进制的 并且必须是method="post" <%@ page language="java" contentType="text/html; charset=utf-8" page

随机推荐