基于 Gradle 远程连接Hadoop HDFS编程

在一个现代化的时候,界面不好看的 Eclipse 和操作易用性相比而言更高的 IntelliJ Idea。而在进行 Hadoop 进行编程的时候,最基本的是需要导入相应的 Jar 包,而更为便宜的则是使用 Maven 来进行包的依赖管理,而本文则结合 Gradle 来处理引入最基本的 Hadoop 包,配置运行环境。

新建一个 Gradle 项目

在新建时要选择 Gradle 项目,并在连接过程中自动下载 Gradle。
Step1 new_gradle_projects
在下一步中,要输入一个类似于下图的 GroupId,ArtifactId,这其实是基于 Maven 结构的,关于这个如何比较正确填写可以参考
Guide to naming conventions on groupId, artifactId, and version
Step2 group_artifactid_version-c500

接下来相应的配置可以直接进入下一步,配置如下,如果需要自动导包功能也可以选择
Step3 other_configure-c500

在 Maven Repository 中查找相应的依赖

通过Maven Repository中搜索Apache Hadoop Common并查找当前连接对应的 Hadoop 版本,我目前使用的是2.8.5,所以就找到了对应于2.8.5的版本,并在下面的代码框中选择 Gradle,默认是 Maven 导入的代码,切换后可以看到是一行代码compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '2.8.5'
hadoop common gradle-w1132

按照同样的方式还需要引入Apache Hadoop HDFS,查找对应的依赖代码
compile group: 'org.apache.hadoop', name: 'hadoop-hdfs', version: '2.8.5'
hadoop hdfs -w1128

将依赖代码填入

打开项目文件,在 Project 视图中找到build.gradle文件,并在 dependencies 中填入刚刚从 Maven Repository 中找到了两个依赖,当你输入后,IDE 会自动通过网络下载对应的依赖,所以相应的烦琐的依赖及其相互依赖关系,通过 Gradle 能够很好地避免,整个过事其实是非常简单,只要实际尝试后,后面再去操作都变得十分容易。
填入依赖

新建文件并测试

这里我自己通过新建一个HDFSCreateFile用来在 HDFS 文件系统创建一个名为test2的文件,文件内容则是Hello World。注意这里我修改了相应的 HDFS 文件系统地址,修改为hdfs://192.168.1.199:9000,是因为在局域网中我创建了了一真实的分布式文件系统,分为一个 master 节点和三个 slave 节点,而对于的名称节点即 master 节点对于的地址是192.168.1.199,当前的开发环境是在 Mac 下开发,如果你开发环境就是在对应的 master 节点,那么就可以用 localhost 或者127.0.0.1来处理。另外则是一般的文档说在和 HDFS 操作时创建了一个特殊用户名,如 Hadoop这类的,如果你运行程序的当前用户不是这个名称,需要提前在 HDFS 中创建对应的用户目录,否则运行程序会报权限错误。
具体代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class HDFSCreateFile {
	public static void main(String[] args){
		try{
			Configuration conf = new Configuration();
				conf.set("fs.defaultFS","hdfs://192.168.1.199:9000");
				conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
				FileSystem fs = FileSystem.get(conf);
				byte[] buff = "Hello World".getBytes();
				String fileName = "/test2";
				FSDataOutputStream os =fs.create(new Path(fileName));
				os.write(buff,0,buff.length);
				System.out.println("Create:"+fileName);
				os.close();
				fs.close();			
		} catch (Exception e){
			e.printStackTrace();
		}
	}
}

总结

相对于Eclipse,使用IntelliJ Idea显得更为现代感,功能上觉得两者都能实现。而Eclipse则更省资源,IntelliJ Idea使用上更为便捷。使用Gradle来进入依赖管理,可以省出更多时间专注于逻辑代码,解决不同包的依赖问题。

posted @ 2019-04-05 11:22  YorkYu  阅读(362)  评论(0编辑  收藏  举报