kettle6.0 向HDFS已有文件追加内容

kettle6.0 向HDFS已有文件追加内容,第1张

顺序文件不能直接再前面追加写入,可按下列步骤,利用下述步骤来实现1 创建一个新的文件。2 写入要追加的数据3从原文件中读取数据,追加写入新文件中4 删除原文件。5 重新命名新文件为老文件名。

Hadoop中关于文件 *** 作类基本上全部是在"org.apache.hadoop.fs"包中,这些API能够支持的 *** 作包含:打开文件,读写文件,删除文件等。

Hadoop类库中最终面向用户提供的接口类是FileSystem,该类是个抽象类,只能通过来类的get方法得到具体类。get方法存在几个重载版本,常用的是这个:

hdfs api创建文件写入内容全部程序如下:

(1):import java.io.IOException

import java.net.URI

import java.net.URISyntaxException

import org.apache.hadoop.conf.Configuration

import org.apache.hadoop.fs.FSDataInputStream

import org.apache.hadoop.fs.FSDataOutputStream

import org.apache.hadoop.fs.FileStatus

import org.apache.hadoop.fs.FileSystem

import org.apache.hadoop.fs.FileUtil

import org.apache.hadoop.fs.Path

import org.apache.hadoop.io.IOUtils

public class HDFSTest {

//在指定位置新建一个文件,并写入字符

public static void WriteToHDFS(String file, String words) throws IOException, URISyntaxException

{

Configuration conf = new Configuration()

FileSystem fs = FileSystem.get(URI.create(file), conf)

Path path = new Path(file)

FSDataOutputStream out = fs.create(path)   //创建文件

//两个方法都用于文件写入,好像一般多使用后者

out.writeBytes(words)

out.write(words.getBytes("UTF-8"))

out.close()

//如果是要从输入流中写入,或是从一个文件写到另一个文件(此时用输入流打开已有内容的文件)

//可以使用如下IOUtils.copyBytes方法。

//FSDataInputStream in = fs.open(new Path(args[0]))

//IOUtils.copyBytes(in, out, 4096, true)        //4096为一次复制块大小,true表示复制完成后关闭流

}

(2): public static void DeleteHDFSFile(String file) throws IOException

{

Configuration conf = new Configuration()

FileSystem fs = FileSystem.get(URI.create(file), conf)

Path path = new Path(file)

//查看fs的delete API可以看到三个方法。deleteonExit实在退出JVM时删除,下面的方法是在指定为目录是递归删除

fs.delete(path,true)

fs.close()

}

public static void UploadLocalFileHDFS(String src, String dst) throws IOException

{

Configuration conf = new Configuration()

FileSystem fs = FileSystem.get(URI.create(dst), conf)

Path pathDst = new Path(dst)

Path pathSrc = new Path(src)

fs.copyFromLocalFile(pathSrc, pathDst)

fs.close()

}

public static void ListDirAll(String DirFile) throws IOException

{

Configuration conf = new Configuration()

FileSystem fs = FileSystem.get(URI.create(DirFile), conf)

Path path = new Path(DirFile)

FileStatus[] status = fs.listStatus(path)

//方法1

for(FileStatus f: status)

{

System.out.println(f.getPath().toString())

}

//方法2

Path[] listedPaths = FileUtil.stat2Paths(status)

for (Path p : listedPaths){

System.out.println(p.toString())

}

}

(3):


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11727072.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存