如何使用Java API读写HDFS

如何使用Java API读写HDFS,第1张

import java.io.BufferedInputStream

import java.io.FileInputStream

import java.io.FileNotFoundException

import java.io.IOException

import java.io.InputStream

import java.io.OutputStream

import java.net.URI

import java.util.Date

import org.apache.hadoop.conf.Configuration

import org.apache.hadoop.fs.BlockLocation

import org.apache.hadoop.fs.FSDataOutputStream

import org.apache.hadoop.fs.FileStatus

import org.apache.hadoop.fs.FileSystem

import org.apache.hadoop.fs.Path

import org.apache.hadoop.hdfs.DistributedFileSystem

import org.apache.hadoop.hdfs.protocol.DatanodeInfo

import org.apache.hadoop.io.IOUtils

import org.apache.hadoop.util.Progressable

将这FileSystem hdfs = FileSystem.get(config)

改成FileSystem hdfs = FileSystem.get(URI.create("hdfs://master:9000"),config)

上面那句取得的是本地文件系统对象,改成下面这个才是取得hdfs文件系统对象,当你要 *** 作本地文件对象的时候就要用上面那句取得本地文件对象,我在2.7.4刚开始也是跟你一样的错误,改为下面的就可以了

apache的Hadoop项目提供一类api可以通过java工程 *** 作hdfs中的文件,包括:文件打开,读写,删除等、目录的创建,删除,读取目录中所有文件等。

1、到http://hadoop.apache.org/releases.html下载Hadoop,解压后把所有jar加入项目的lib里

2、程序处理步骤: 1)得到Configuration对象,2)得到FileSystem对象,3)进行文件 *** 作,简单示例如下:

/**

*

*/

package org.jrs.wlh

import java.io.IOException

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.Path

/**

* @PutMeger.java

* java *** 作hdfs 往 hdfs中上传数据

* @version $Revision$</br>

* update: $Date$

*/

public class PutMeger {

public static void main(String[] args) throws IOException {

String[] str = new String[]{"E:\\hadoop\\UploadFileClient.java","hdfs://master:9000/user/hadoop/inccnt.java"}

Configuration conf = new Configuration()

FileSystem fileS= FileSystem.get(conf)

FileSystem localFile = FileSystem.getLocal(conf) //得到一个本地的FileSystem对象

Path input = new Path(str[0])//设定文件输入保存路径

Path out = new Path(str[1]) //文件到hdfs输出路径

try{

FileStatus[] inputFile = localFile.listStatus(input) //listStatus得到输入文件路径的文件列表

FSDataOutputStream outStream = fileS.create(out) //创建输出流

for (int i = 0i <inputFile.lengthi++) {

System.out.println(inputFile[i].getPath().getName())

FSDataInputStream in = localFile.open(inputFile[i].getPath())

byte buffer[] = new byte[1024]

int bytesRead = 0

while((bytesRead = in.read(buffer))>0){ //按照字节读取数据

System.out.println(buffer)

outStream.write(buffer,0,bytesRead)

}

in.close()

}

}catch(Exception e){

e.printStackTrace()

}

}

}


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

原文地址: https://outofmemory.cn/tougao/11522076.html

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

发表评论

登录后才能评论

评论列表(0条)

保存