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()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)