脚本宝典收集整理的这篇文章主要介绍了使用工具连接Hadoop集群,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。
在学习本节实训中,主要分为两部分,先了解在Linux环境下如何通过Eclipse开发Hadoop程序。其次是我们的API操作。
API(Application PRogramming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。 可简单理解API是一个中间件,我们的程序通过它实现与系统交互,把各种数据,应用和设备连系在一起,进行协同工作。
在学习过程中,我们要养成查看API文档的习惯,它是一个简明的参考手册,包含了使用API所需的所有信息,详细介绍了函数、类、返回类型、参数等,并有教程示例支撑。可以帮助我们有效的进行程序开发。查看官网地址。如常用的MapPEr类:
在Hadoop2.x版本中为了做Mapreduce开发,要使用Eclipse,并且需要对应的Hadoop插件hadoop-eclipse-plugin-xxx.jar,插件版本要和HadooP版本兼容。将其放入到Eclipse安装目录下的plugins文件夹下,我们实训环境已经将其放入,不需要操作。
(1)作用:junit是一个 Java语言的单元测试框架,用于编写和运行可重复的测试。能让我们快速完成单元测试。简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。
(2)常用注解:
(1)configuration:该类的对象封装了客户端或者服务器的配置,为YARN、HDFS、MapReduce等提供参数的配置、配置文件的分布式传输(实现了 Writable 接口)等重要功能。
使用:
使用Configuration类的一般过程是:构造Configuration对象,并通过类的addResource()
方法添加需要加载的资源;然后使用get()
或set()
方法访问或设置配置项,资源会在第一次使用的时候自动加载到对象中。
实例:
Configuration conf=new Configuration();
conf.addResource("core-default.XMl");
conf.addResource("core-site.xML");
conf.set("fs.defaultFS", "hdfs://localhost:9000");
解释:
上述实例中,我们加载了两个配置资源,这两个配置资源包含了相同的配置项,此时,后面的配置将覆盖前面的配置,即core-site.xml中的配置将覆盖core-default.xml中的同名配置。
之后使用set()
方法设置了“fs.defaultFS”配置项,此项将覆盖core-site.xml或core-default.xml配置项中的同名配置。
(2)FileSystem:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过FileSystem的静态方法get获得该对象。
方式一:通过配置获取
@Test
public void getFileSystem1() throws IOException {
Configuration configuration = new Configuration();
//指定我们使用的文件系统类型:
configuration.set("fs.defaultFS", "hdfs://localhost:9000/");
//获取指定的文件系统
FileSystem fileSystem = FileSystem.get(configuration);
System.out.println(fileSystem.toString());
}
方式二:直接获取
@Test
public void getFileSystem2() throws Exception{
// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,实训环境中是“root”
FileSystem fileSystem = FileSystem.get(new URI("hdfs://localhost:9000"), new Configuration(),"root");
System.out.println("fileSystem:"+fileSystem);
}
注意:如果我们的代码中没有指定fs.defaultFS
,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于Hadoop的jar包中的core-default.xml,默认值为file:///,此时获取的将不是我们指定文件系统的实例(如HDFS),而是一个本地文件系统的客户端对象。
我们的环境中Hadoop集群已经开启,也安装了Eclipse开发工具,因此我们跳过以上环节,直接进行后续操作。
代码如下:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
public class Test1 {
public static void main(String[] args) throws IOException {
Configuration conf=new Configuration();
//如果我们没有给conf设置文件系统,那么fileSystem默认获取的是本地文件系统的一个实例
//若是我们设置了“fs.defaultFS”参数,这表示获取的是该 URI 的文件系统的实例,就是我们需要的 HDFS 集群的一个 fs 对象
conf.set("fs.defaultFS", "???");
//获取文件系统对象
FileSystem fs=FileSystem.get(conf);
//打印URI地址
System.out.println(fs.getUri());
}
}
如图所示:
如图所示:
如图所示:
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
public class Test1 {
public static void main(String[] args) throws IOException {
Configuration conf=new Configuration();
//如果我们没有给conf设置文件系统,那么fileSystem默认获取的是本地文件系统的一个实例
//若是我们设置了“fs.defaultFS”参数,这表示获取的是该 URI 的文件系统的实例,就是我们需要的 HDFS 集群的一个 fs 对象
conf.set("fs.defaultFS", "hdfs://localhost:9000");
//获取文件系统对象
FileSystem fs=FileSystem.get(conf);
//打印URI地址
System.out.println(fs.getUri());
}
}
执行程序:
选择Test1类,右击选择Run as->Run on hadoop。
结果如图所示:
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
public class Test2 {
public static void main(String[] args) throws InterruptedException, URISyntaxException, IOException {
Configuration conf = new Configuration();
// 不需要配置“fs.defaultFS”参数,直接传入URI和用户身份,最后一个参数是安装Hadoop集群的用户,我的是“root”
FileSystem fs = FileSystem.get(new URI("hdfs://localhost:9000"), conf, "root");
//打印URI地址
System.out.println(fs.getUri());
}
}
结果如图所示:
以上是脚本宝典为你收集整理的使用工具连接Hadoop集群全部内容,希望文章能够帮你解决使用工具连接Hadoop集群所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。