使用工具连接Hadoop集群

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用工具连接Hadoop集群脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
引言:

  HDFS在生产应用中主要是客户端的开发,其核心步骤是从HDFS提供的API中构造一个HDFS的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS上的文件。

  在学习本节实训中,主要分为两部分,先了解在Linux环境下如何通过Eclipse开发Hadoop程序。其次是我们的API操作。

API介绍:

  API(Application PRogramming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问码,或理解内部工作机制的细节。  可简单理解API是一个中间件,我们的程序通过它实现与系统交互把各种数据,应用和设备连系在一起,进行协同工作

Hadoop API文档:

  在学习过程中,我们要养成查看API文档的习惯,它是一个简明的参考手册,包含了使用API所需的所有信息,详细介绍了函数、类、返回类型、参数等,并有教程示例支撑。可以帮助我们有效的进行程序开发。查看官网地址。如常用的MapPEr类:

使用工具连接Hadoop集群
任务介绍:
1. 通过配置Eclipse连接Hadoop。
2. 学习junIT注解。
3. Eclipse访问HDFS数据涉及到的类操作。
学习相关知识点
准备开发环境:
(1)hadoop-eclipse-plugin-2.7.7.jar。

  在Hadoop2.x版本中为了做Mapreduce开发,要使用Eclipse,并且需要对应的Hadoop插件hadoop-eclipse-plugin-xxx.jar,插件版本要和HadooP版本兼容。将其放入到Eclipse安装目录下的plugins文件夹下,我们实训环境已经将其放入,不需要操作。

(2)通过Eclipse配置Hadoop Map/Reduce。
junit的作用和常用注解:

(1)作用junit是一个 Java语言的单元测试框架,用于编写和运行可重复的测试。能让我们快速完成单元测试简化单元测试,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

(2)常用注解

  • @test:测试方法。
  • @Before:每个测试方法之前运行。
  • @After:每个测试方法之后运行。
涉及主要类:
  在Java中操作HDFS,主要涉及以下类:

(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获得该对象。

获取FileSystem方式:

方式一:通过配置获取

@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),而是一个本地文件系统的客户端对象

任务1:Linux下Eclipse连接Hadoop

  我们的环境中Hadoop集群已经开启,也安装了Eclipse开发工具,因此我们跳过以上环节,直接进行后续操作。

1.Linux下Eclipse连接Hadoop:
(1)hadoop-eclipse-plugin-2.7.7.jar已经保存在eclipse工具plugins目录。
(2)启动Eclipse,选择默认路径即可。
(3)关闭Welcome页面。
(4)点击Window->Preferences,左侧对话框选择Hadoop Map/Reduce选项。
(5)设置hadoop-2.7.7的安装路径。(实验环境hadoop-2.7.7的安装目录为:/root/Software/hadoop-2.7.7)。
(6)点击Apply and Close。
(7)点击Window->Show View->Other,弹出Show View对话框,选中MapReduce Tools下的Map/Reduce Locations,点击Open。
(8)Eclipse底部出现Map/Reduce Locations窗口,点击其右边的蓝色小象图标。
(9)弹出New Hadoop locaiton...对话框,将Location name命名为hadoop。
(10)Map/Reduce(V2)Master下将Host修改为YARN集群主节点的IP地址或主机名localhost。
(11)DFS Master下将Host修改为HDFS集群主节点的IP地址或主机名localhost,Port修改为9000,将User name设置为搭建集群用户root。
2.测试连接
(1)选择File->New->Project->;map/Reduce Project->Next,弹出new MapReduce Project Wizard对话框。
(2)为Project name起名为Test,点击Finsh。
(3)弹出Open Associated Perspective对话框选择No。
(4)在左侧Project Explorer下出现DFS Locations列表栏和Test。
  至此,我们Hadoop已经可以连接上Eclipse。后续可进行程序开发。
@H_568_304@
查看任务解析
1.Linux下Eclipse连接Hadoop:
(1)hadoop-eclipse-plugin-2.7.7.jar已经存在Plugins目录。
(2)启动Eclipse,选择默认路径即可。
使用工具连接Hadoop集群
(3)关闭Welcome页面。
使用工具连接Hadoop集群
(4)点击Window->Preferences,左侧对话框选择Hadoop Map/Reduce选项。
使用工具连接Hadoop集群 使用工具连接Hadoop集群
(5)设置hadoop-2.7.7的安装路径。(实验环境hadoop-2.7.7的安装目录为:/root/software/hadoop-2.7.7)。
使用工具连接Hadoop集群
(6)点击Apply and Close。
使用工具连接Hadoop集群
(7)点击Window->Show View->Other,弹出Show View对话框,选中MapReduce Tools下的Map/Reduce Locations,点击Open。
使用工具连接Hadoop集群 使用工具连接Hadoop集群
(8)Eclipse底部出现Map/Reduce Locations窗口,点击其右边的蓝色小象图标。
使用工具连接Hadoop集群
(9)弹出New Hadoop locaiton...对话框,将Location name命名为hadoop。
使用工具连接Hadoop集群
(10)Map/Reduce(V2)Master下将Host修改为YARN集群主节点的IP地址或主机名localhost。
使用工具连接Hadoop集群
(11)DFS Master下将Host修改为HDFS集群主节点的IP地址或主机名localhost,Port修改为9000,将User name设置为搭建集群用户root。
使用工具连接Hadoop集群
2.测试连接
(1)选择File->New->Project->Map/Reduce Project->Next,弹出new MapReduce Project Wizard对话框。
使用工具连接Hadoop集群 @H_951_360使用工具连接Hadoop集群
(2)为Project name起名为Test,点击Finsh。
使用工具连接Hadoop集群
(3)弹出Open Associated Perspective对话框选择No。
使用工具连接Hadoop集群
(4)在左侧Project Explorer下出现DFS Locations列表栏和Test。
使用工具连接Hadoop集群
任务2:获取FileSystem实例演示
1. 创建项目:
(1)选择File->New->Project->Map/Reduce Project->Next,弹出new MapReduce Project Wizard对话框。Project name命名为:getFS,点击Finsh
(2)点击左侧getFS,在src下创建包结构:com.hongya.getfs。

 

(3)在包下创建测试类test1test2
2. 通过配置获取FileSystem对象:
(1)在Test1下使用new构造Configuration对象,获取配置信息类。
(2)通过set方法设置配置项,指定文件系统为HDFS,即fs.defaultFS参数的值为hdfs://localhost:9000。
(3)获取文件系统对象并打印URI地址。

代码如下:

注:???处需补全代码。
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());
}
}
3. 直接获取FileSystem对象:
(1)在Test2中用new构造Configuration对象,获取配置信息类。
(2)通过get方法获取HDFS文件系统对象,设置URI为hdfs://localhost:9000,安装集群用户名为root。
(3)打印获取的文件系统URI。
查看任务解析
1. 创建项目:
(1)选择File->New->Project->Map/Reduce Project->Next,弹出new MapReduce Project Wizard对话框。Project name命名为:getFS,点击Finsh

如图所示:使用工具连接Hadoop集群

(2)点击左侧getFS,在src下创建包结构:com.hongya.getfs。

如图所示:使用工具连接Hadoop集群使用工具连接Hadoop集群

(3)在包下创建测试类Test1,Test2。

如图所示:使用工具连接Hadoop集群

2. 通过配置获取FileSystem对象代码实现:
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

使用工具连接Hadoop集群

结果如图所示:使用工具连接Hadoop集群

3. 直接获取FileSystem对象代码实现:
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集群全部内容,希望文章能够帮你解决使用工具连接Hadoop集群所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。