「hdfsjava例子」hdfs开发

博主:adminadmin 2022-12-31 09:09:07 586

本篇文章给大家谈谈hdfsjava例子,以及hdfs开发对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

编写一个JAVA类方法,通过该方法可以获取出存储在HDFS集群中根目录的所有文件?

public void listMyFile() throws Exception {

//获取FileSystem

//"hdfs"为伪造用户,使用hdfs用户进行访问

FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.83.141:8020"), new Configuration(), "hdfs");

//获取指定目标目录下的所有文件信息

RemoteIteratorLocatedFileStatus iterator =

fileSystem.listFiles(new Path("/"), true);

//遍历迭代器

while (iterator.hasNext()) {

//获取每个文件详细信息

LocatedFileStatus fileStatus = iterator.next();

//获取每个文件的存储路径

System.out.println("路径:" + fileStatus.getPath() +

"---" + fileStatus.getPath().getName());

//获取文件的block存储信息

BlockLocation[] blockLocations = fileStatus.getBlockLocations();

//打印每个文件的block数

System.out.println("block数量:" + blockLocations.length);

//打印每一个block副本的存储位置

for (BlockLocation blockLocation : blockLocations) {

String[] hosts = blockLocation.getHosts();

for (String host : hosts) {

System.out.println("主机:" + host);

}

}

}

}

java 怎么读取hdfs上csv文件的某一列

java 怎么读取hdfs上csv文件的某一列

import java.io.IOException;

import java.nio.charset.Charset;

import java.util.ArrayList;

import com.csvreader.CsvReader;

import com.csvreader.CsvWriter;

/**

* 读取CSV文件

* 所谓"CSV",是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。

* 可以看成数据库程序与电子表格之间一种中间通信文件,数据库可以导出。csv格式,excel也可以导入并打开。csv文件,例子如下

* sj_mino1001.jpg,715282,4FB55FE8,

* sj_mino1002.jpg,471289,93203C5C,

* sj_mino1003.jpg,451929,C4E80467,

*

*/

public class CSVDeal{

public static void main(String[] args) {

try {

String[] stringList;

String csvFilePath = "C:\\Users\\Administrator\\Desktop\\20140227135936.csv";

String sourceFileString= "C:\\Users\\Administrator\\Desktop\\test.csv";

CsvReader reader = new CsvReader(csvFilePath); //默认是逗号分隔符,UTF-8编码

CsvWriter writer = new CsvWriter(sourceFileString);

/*

* readRecord()判断是否还有记录,getValues()读取当前记录,然后指针下移

*/

reader.readRecord();

writer.writeRecord(reader.getValues()); //读取表头

/*

* 逐行读取,以免文件太大

* 处理表头后面的数据,这里是在第12列数据统一加前缀"V"

*/

while(reader.readRecord()){

stringList = reader.getValues();

stringList[11] = 'V' + stringList[11];

writer.writeRecord(stringList);

}

reader.close();

writer.close();

}catch(Exception ex){

System.out.println(ex);

}

}

}

关于用java写程序把本地文件上传到HDFS中的问题

将这FileSystem hdfs = FileSystem.get(config);

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

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

如何使用Java API读写HDFS

HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linux shell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。

比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python) 。

下面,散仙给出代码,以供参考:

view sourceprint?

package com.java.api.hdfs;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileStatus;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

/**

* @author 三劫散仙

* Java API操作HDFS

* 工具类

*

* **/

public class OperaHDFS {

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

//System.out.println("aaa");

// uploadFile();

//createFileOnHDFS();

//deleteFileOnHDFS();

//createDirectoryOnHDFS();

//deleteDirectoryOnHDFS();

// renameFileOrDirectoryOnHDFS();

readHDFSListAll();

}

/***

* 加载配置文件

* **/

static Configuration conf=new Configuration();

/**

* 重名名一个文件夹或者文件

public static void renameFileOrDirectoryOnHDFS()throws Exception{

FileSystem fs=FileSystem.get(conf);

Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile/my.txt");

fs.rename(p1, p2);

System.out.println("重命名文件夹或文件成功.....");

}

/***

*

* 读取HDFS某个文件夹的所有

* 文件,并打印

*

* **/

public static void readHDFSListAll() throws Exception{

//流读入和写入

InputStream in=null;

//获取HDFS的conf

//读取HDFS上的文件系统

FileSystem hdfs=FileSystem.get(conf);

//使用缓冲流,进行按行读取的功能

BufferedReader buff=null;

//获取日志文件的根目录

Path listf =new Path("hdfs://10.2.143.5:9090/root/myfile/");

//获取根目录下的所有2级子文件目录

FileStatus stats[]=hdfs.listStatus(listf);

//自定义j,方便查看插入信息

int j=0;

for(int i = 0; i stats.length; i++){

//获取子目录下的文件路径

FileStatus temp[]=hdfs.listStatus(new Path(stats[i].getPath().toString()));

for(int k = 0; k temp.length;k++){

System.out.println("文件路径名:"+temp[k].getPath().toString());

//获取Path

Path p=new Path(temp[k].getPath().toString());

//打开文件流 in=hdfs.open(p);

//BufferedReader包装一个流

buff=new BufferedReader(new InputStreamReader(in));

String str=null;

while((str=buff.readLine())!=null){

System.out.println(str);

}

buff.close();

in.close();

}

}

hdfs.close();

}

/**

* 从HDFS上下载文件或文件夹到本地

*

* **/

public static void downloadFileorDirectoryOnHDFS()throws Exception{

FileSystem fs=FileSystem.get(conf);

Path p1 =new Path("hdfs://10.2.143.5:9090/root/myfile//my2.txt");

Path p2 =new Path("D://7");

fs.copyToLocalFile(p1, p2);

fs.close();//释放资源

}

/**

* 在HDFS上创建一个文件夹

*

* **/

public static void createDirectoryOnHDFS()throws Exception

FileSystem fs=FileSystem.get(conf);

Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");

fs.close();//释放资源

System.out.println("创建文件夹成功.....");

}

/**

* 在HDFS上删除一个文件夹

*

* **/

public static void deleteDirectoryOnHDFS()throws Exception{

FileSystem fs=FileSystem.get(conf);

Path p =new Path("hdfs://10.2.143.5:9090/root/myfile");

fs.close();//释放资源

System.out.println("删除文件夹成功.....");

}

/**

* 在HDFS上创建一个文件

*

* **/

public static void createFileOnHDFS()throws Exception{

FileSystem fs=FileSystem.get(conf);

Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");

fs.createNewFile(p);

//fs.create(p);

fs.close();//释放资源

System.out.println("创建文件成功.....");

}

/**

* 在HDFS上删除一个文件

*

* **/

public static void deleteFileOnHDFS()throws Exception{

FileSystem fs=FileSystem.get(conf);

Path p =new Path("hdfs://10.2.143.5:9090/root/abc.txt");

fs.deleteOnExit(p);

fs.close();//释放资源

System.out.println("删除成功.....");

}

/***

* 上传本地文件到

* HDFS上

*

* **/

public static void uploadFile()throws Exception{

//加载默认配置

FileSystem fs=FileSystem.get(conf);

//本地文件

Path src =new Path("D:\\6");

//HDFS为止

Path dst =new Path("hdfs://10.2.143.5:9090/root/");

try {

fs.copyFromLocalFile(src, dst);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("上传成功........");

fs.close();//释放资源

}

}

java怎么连接hdfs文件系统,需要哪些包?

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

1、到下载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 = 0; i inputFile.length; i++) {

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();

}

}

}

关于hdfsjava例子和hdfs开发的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。