java连接hdfs
HDFS,是一个分布式文件系统。HDFS有着高容错性(fault-tolerent)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。HDFS开始是为开源的apache项目nutch的基础结构而创建,HDFS是hadoop项目的一部分,而hadoop又是lucene的一部分。
这里我们已经搭好了hdfs分布式,方法就不说了,我们主要看java连接的方法
首先我们看此时hdfs上有一个文件,在/user/root/wcinput下,
我们要将这个文件放到本机上,该怎么做
我们先建立一个maven项目,在pom.xml里加入:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
然后写一个Test:
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class Test {
public static void main(String[] args) throws Exception {
System.out.println("-----开始-----");
demo1();
System.out.println("-----ok-----");
}
//下载hdfs上的文件
static void demo1() throws Exception {
//它是java.net下的
URI uri=new URI("hdfs://192.168.107.129:9000");
Configuration conf=new Configuration();
FileSystem fs=FileSystem.get(uri, conf);
InputStream in = fs.open(new Path("/user/root/wcinput/wc.input"));
FileOutputStream out=new FileOutputStream("c:/files/hdfs/wc.txt");
IOUtils.copyBytes(in, out, 4096,true);
fs.close();
}
}
运行结束之后便可以看到,在本机c:/files/hdfs/wc.txt里有了hdfs里/user/root/wcinput/wc.input的内容