原创作品,转载需声明出处:
package cn.hadoop_01;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class URLTest2 {
static {
//设定一个静态代码块,jvm只会执行一次,java中的URL类的setURLStreamHandlerFactory方法
//方法:
//实际上创建了一个FsUrlStreamHandlerFactory的对象:
//FsUrlStreamHandlerFactory a =new
FsUrlStreamHandlerFactory();
//FsUrlStreamHandlerFactory该类的作用是:URL流处理工厂,具体的作用要使用Java.net.URL的
setURLStreamHandlerFactory()
//方法设置URLStreamHandlerFactory,这时需要传递一个
FsUrlStreamHandlerFactory。这个操作对一个jvm只能使用一次
//也就是说它要返回FsUrlStreamHandlerFactory的对象,再通过对象调用URL.setURLStreamHandlerFactory方法
//用URL.setURLStreamHandlerFactory方法将自己的URLStreamHandlerFactory对象注册到URL类中
URL.setURLStreamHandlerFactory(new
FsUrlStreamHandlerFactory());
}
public static void main(String[] args)throws Exception {
read2();
}
//写方法:关于怎么去读写一个输入的url数据。
//MalformedURLException, IOException抛出一些异常
public static void read2() throws MalformedURLException,
IOException{
//创建局部变量,调用方法,也是目标url,将来要t通过该类来在hadoop上打印输出
//注意目录:该目录是我在dfs上创建的一个根目录/,url目标是其下面的一个txt文件
String url = "/input/test2.txt";
//初始化InputStream类型的变量in,在Java
API中,读取对象的时候一般都是按照一个有序的字节流进行读取,这种读取方式称为流式读取;按照这种
//方式读取一个对象的字节流称作输入流(Input Stream),写入一个对象的字节流称作输出流(Output
Stream),至于输入和输出的目标以及源
//可以是控制台,同样可以是文件、网络连接甚至是内存块
InputStream in = null;
//调用Configuration类,创建一个对象,该类是专门说明hadoop的详细配置信息的类
Configuration conf = new Configuration();
//将配置信息用文件类deget得到
FileSystem fs = FileSystem.get(conf);
//开始写一个输入流,赋值输入流啦,得到配置信息的文件调用open方法打开一个路径对象,并给该路径对象赋值url路径,
in = fs.open(new Path(url));
//调用hadoop的简洁的IOUtils类的方法copyBytes在输入流和输出流之间复制数据并且可以直接执行close关闭
IOUtils.copyBytes(in, System.out,4096,false);
IOUtils.closeStream(in);
}
}
方法一:eclipse上运行,需要导入hadoop的jar包,直接在windows上解压hadoop,找到jar包即可,基本在其share文件夹内
只需要在测试所在的包下面新建一个文件夹conf,将hadoop的配置文件,hdfs-site.xml和core-site.xml添加进去直接编译即可。
方法二:在hadoop上运行
首先在eclipse上导出该类的jar包,并指定成主类(hadoop默认这个主类就可以直接编译运行了)
在指定的class目录下面执行jar的命令,hadoop
jar+文件名.jar即可。在linux上编译运行,使用xftp和xshell一起使用相当直观方便。