Hadoop实现了一套Java 的FileSystem API,通过这套API,可以像操作本地文件一样,操作HDFS上面的文件和目录,并且可以和本地File进行交互,实现文件或目录的上传下载
本例基于Hadoop 2.7.2
Maven 加入Hadoop client 依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.2</version>
</dependency>
通常情况下,下载还是很顺利的,如果你人品不好,下载很慢,那你就把 hadoop 安装目录下面 share下的 *.jar,自行去掉重复的,-test的jar,-source,-example的jar 加入到你的lib路径中。我这maven下下来是68个jar
Java 操作
Configuration configuration = new Configuration();
//如果不手动配置,也可以在classpath 的core-site.xml中配置
configuration.set("fs.default.name", "hdfs://192.168.189.141:9000");
DistributedFileSystem dfs = (DistributedFileSystem) FileSystem.get(configuration);
DatanodeInfo[] dataNodeStats = dfs.getDataNodeStats();
String[] names = new String[dataNodeStats.length];
System.out.println("List of all the datanode in the HDFS cluster:");
for (int i = 0; i < names.length; i++) {
names[i] = dataNodeStats[i].getHostName();
System.out.println(names[i]);
}
System.out.println(dfs.getUri().toString());
//文件操作和本地一样,
dfs.copyFromLocalFile(new Path("D:/Spark/bin"), new Path("/copy/"));
//删除
dfs.delete(new Path("/copy"), true);
//创建目录
dfs.mkdirs(new Path("/test/aaa/bbb"));
//上传一个目录
dfs.copyToLocalFile(new Path("/user/hive/warehouse/logs"), new Path("D:/aaa/"));
//读取文件内容
InputStream ins = dfs.open(new Path("/logs/LICENSE.txt"));
System.out.println(IOUtils.toString(ins));
//写入一个文件(目录自动创建)
OutputStream os = dfs.create(new Path("/test/新建文本文档.txt"));
IOUtils.copy(new FileInputStream("D:/新建文本文档.txt"), os);
注意,上面关于文件系统类的引用接为hadoop的
import org.apache.hadoop.conf.Configuration;
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;
说明:
小编从事IT工作10年,
10年,增加了一个人的阅历,也 历练了一个人的心性,
10年,我们从一个小菜鸟,变成带着买一众人攻坚克难的负责人,
我们学到了很多新技术,我们学到了很多新语言,我们学到了很多方法论,
而真正使我们成长的,是我们解决了什么问题。
10年之后,我带上全部积蓄回家创业,不为别的,为了心中的另一个梦想,
2017年,我与8个葡萄酒庄签了合作协议,我想把国产优质葡萄酒推向更广的市场,让消费者品尝到高品质的葡萄酒,给企业带来利润,给当地的农民带来效益。
在这转型之即,有些东西送给还在一线奋斗的理想青春们,加油!
这是送给过去的我的,也是送给现在的你们的。