大数据技术原理与应用实验指南——HDFS JAVA API编程实践

这篇具有很好参考价值的文章主要介绍了大数据技术原理与应用实验指南——HDFS JAVA API编程实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大数据技术原理与应用实验指南——HDFS JAVA API编程实践

hdfs Java API编写合并文件内容

1. 实验目的

(1) 熟练使用HDFS操作常用的Shell命令。

(2) 熟悉HDFS操作常用的Java API。

2. 实验内容

(1) 编程实现指定功能,并利用Hadoop提供的Shell命令完成相同任务(文件的上传、下载、输出、删除、移动等操作)。

(2) 有余力编写一个Java程序,读取HDFS中的指定文件。

3. 实验平台(软件版本)

VirtualBox-6.1.4

jdk-8u162-linux-x64.tar

eclipse-4.7.0-linux.gtk.x86_64.tar

ubuntukylin-16.04-desktop-amd64

hadoop-3.1.3

FileZilla_3.17.0.0_win64_setup 这是一个用于将windows文件与linux互相传的软件

**4. 实验步骤 **

实验步骤思维导图如下图所示
大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

(1) 启动全分布集群

$ start-dfs.sh

$ start-yarn.sh

$ mr-jobhistory-daemon.sh start historyserver

通过命令jps可以查看各个节点所启动的进程(如下图所示:)
大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop
在Slave节点可以看到DataNode和NodeManager进程(如下图所示:)
大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

集群启动成功:如下图所示

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

(2) 目录操作:

① 本教程全部采用hadoop用户登录Linux系统,因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:

$ hdfs dfs -mkdir -p /user/hadoop

该命令中表示在HDFS中创建一个“/user/hadoop”目录,“–mkdir”是创建目录的操作,“-p”表示如果是多级目录,则父目录和子目录一起创建,这里“/user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。

② “-ls”表示列出HDFS某个目录下的所有内容,“.”表示HDFS中的当前用户目录,也就是“/user/hadoop”目录,以下两个命令等价!

$ hdfs dfs –ls .

$ hdfs dfs –ls /user/hadoop

目录创建与显示如下图所示
大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

(3) 文件操作:

① 首先使用vim编辑器,在本地Linux文件系统的“/home/hadoop/”目录下创建四个文件file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,文件内容分别如下所示:

file1.txt的内容是: this is file1.txt
file2.txt的内容是: this is file2.txt
file3.txt的内容是: this is file3.txt
file4.abc的内容是: this is file4.abc
file5.abc的内容是: this is file5.abc

② 可以使用如下命令把本地文件系统的“/home/hadoop/***.txt”上传到HDFS中的当前用户目录

上传文件的代码显示如下图所示

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

(4) 利用Java API与HDFS进行交互——在Ubuntu中安装Eclipse

① 可以到Eclipse官网(https://www.eclipse.org/downloads/)下载安装包。

② 假设安装文件下载后保存在了Linux系统的目录“~/Downloads”下,下面执行如下命令对文件进行解压缩:

$ cd ~/Downloads
$ sudo tar -zxvf ./eclipse-4.7.0-linux.gtk.x86_64.tar.gz -C /usr/local

③ 然后,执行如下命令启动Eclipse:

$ cd /usr/local/eclipse`
$ ./eclipse

这样就可以看到启动界面,如下图所示:提示设置工作空间(workspace)

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

可以直接采用默认的设置“/home/hadoop/workspace”,点击“OK”按钮。可以看出,由于当前是采用hadoop用户登录了Linux系统,因此,默认的工作空间目录位于hadoop用户目录“/home/hadoop”下。

④ 为了能让代码顺利运行,需要在Eclipse工作空间(workspace)的bin目录下复制属于集群上的core-site.xml和dfs-site.xml(它们存放在/usr/local/hadoop/etc/hadoop目录下)

⑤ Eclipse启动以后,选择“File->New–>Java Project”菜单,开始创建一个Java工程,会弹出如下图所示界面。

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

⑥ 点击界面底部的“Next>”按钮,为项目添加需要用到的JAR包,包含common或者common/lib与hdfs或者hdfs/lib,还有client下所有的JAR包这些JAR包都位于Linux系统的Hadoop安装目录下,对于本教程而言,就是在“/usr/local/hadoop/share/hadoop”目录下。点击界面中的“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮,会弹出如下图所示界面。

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

(5) 编写Java应用程序

① 请在Eclipse工作界面左侧的“Package Explorer”面板中(如下图所示),找到刚才创建好的工程名称“HDFSExample”,然后在该工程名称上点击鼠标右键,在弹出的菜单中选择“New–>Class”菜单。然后在出现的界面中只需要在“Name”后面输入新建的Java类文件的名称,这里采用名称“MergeFile1”(其余java文件操作类似)“HDFSCreate”“HDFSUpload”…其他都可以采用默认设置,然后,点击界面右下角“Finish”按钮

出现如下图所示界面。

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

read.java创建并编写完毕后结果以及最终演示如下图所示(实现下载功能,并展示下载内容):

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop


(6) 这里展示MergeFile1.java的源代码文件。

package Demo;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
 
/**
 * 过滤掉文件名满足特定条件的文件 
 */
class Filter implements PathFilter {
     String reg = null; 
     Filter(String reg) {
          this.reg = reg;
     }
     public boolean accept(Path path) {
        if (!(path.toString().matches(reg)))
            return true;
        return false;
    }
}
/***
 * 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件
 */
public class MergeFile1 {
    Path inputPath = null; //待合并的文件所在的目录的路径
    Path outputPath = null; //输出文件的路径
    public MergeFile1(String input, String output) {
        this.inputPath = new Path(input);
        this.outputPath = new Path(output);
    }
    public void doMerge() throws IOException {
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://192.168.43.49:9000");//特别注意此处192.168.43.49是自己主节点的IP地址
          conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
        FileSystem fsSource = FileSystem.get(URI.create(inputPath.toString()), conf);
        FileSystem fsDst = FileSystem.get(URI.create(outputPath.toString()), conf);
                //下面过滤掉输入目录中后缀为.abc的文件
        FileStatus[] sourceStatus = fsSource.listStatus(inputPath,
                new Filter(".*\\.abc")); 
        FSDataOutputStream fsdos = fsDst.create(outputPath);
        PrintStream ps = new PrintStream(System.out);
        //下面分别读取过滤之后的每个文件的内容,并输出到同一个文件中
        for (FileStatus sta : sourceStatus) {
            //下面打印后缀不为.abc的文件的路径、文件大小
            System.out.print("路径:" + sta.getPath() + "    文件大小:" + sta.getLen()
                    + "   权限:" + sta.getPermission() + "   内容:");
            FSDataInputStream fsdis = fsSource.open(sta.getPath());
            byte[] data = new byte[1024];
            int read = -1;
 
            while ((read = fsdis.read(data)) > 0) {
                ps.write(data, 0, read);
                fsdos.write(data, 0, read);
            }
            fsdis.close();          
        }
        ps.close();
        fsdos.close();
    }
    public static void main(String[] args) throws IOException {
        MergeFile1 merge = new MergeFile1(
                "hdfs://192.168.43.49:9000/user/hadoop/",//特别注意此处192.168.43.49是自己主节点的IP地址
                "hdfs://192.168.43.49:9000/user/hadoop/merge.txt");//特别注意此处192.168.43.49是自己主节点的IP地址
        merge.doMerge();
    }
}

MergeFile.java运行结果如下
大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

merge.txt文件生成成功

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

merge.txt文件内容展示如下

大数据技术原理与应用实验指南——HDFS JAVA API编程实践,hdfs,java,hadoop

5. 完成情况与问题讨论

(1) 实际完成情况

完成!

(2) 问题与讨论

问题一:伪分布的java API实现与全分布有什么不同?

解决:

Configuration conf =new Configuration(); 
//对于全分布而言是连接到NameNode(主节点的ip地址)
//对于伪分布而言使用localhost代替主机ip地址的输入。
conf.set("fs.defaultFS", "hdfs://192.168.43.49:9000");
        //得到HDFS的客户端
FileSystem fs = FileSystem.get(conf);

问题二:出现Wrong FS:hdfs://localhost:9000/user/hadoop/input.txt,excepted:file:///这类问题该怎么办?

解决:

把配置文件放到当前Java工程目录下:需要把集群上的core-site.xml和hdfs-site.xml(这两个文件存在于/usr/local/hadoop/etc/hadoop目录下)放到当前工程项目下,即eclipse工作目录的bin文件夹下面文章来源地址https://www.toymoban.com/news/detail-828000.html

到了这里,关于大数据技术原理与应用实验指南——HDFS JAVA API编程实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据技术原理及应用课实验5 :MapReduce初级编程实践

    目录 一、实验目的 二、实验平台 三、实验步骤(每个步骤下均需有运行截图) (一)编程实现文件合并和去重操作 (二)编写程序实现对输入文件的排序 (三)对给定的表格进行信息挖掘 四、实验总结 五、优化及改进(选做) 实验5  MapReduce初级编程实践 1. 通过实验掌

    2024年01月21日
    浏览(33)
  • 大数据技术原理及应用课实验7 :Spark初级编程实践

    实验7  Spark初级编程实践 一、实验目的 1. 掌握使用Spark访问本地文件和HDFS文件的方法 2. 掌握Spark应用程序的编写、编译和运行方法 二、实验平台 1. 操作系统:Ubuntu18.04(或Ubuntu16.04); 2. Spark版本:2.4.0; 3. Hadoop版本:3.1.3。 三、实验步骤(每个步骤下均需有运行截图) 实

    2024年01月22日
    浏览(38)
  • 大数据技术原理与应用 概念、存储、处理、分析和应用(林子雨)——第三章 分布式文件系统HDFS

    大数据要解决数据存储问题,所以有了分布式文件系统(DFS),但可能不符合当时的一些应用需求,于是谷歌公司开发了GFS(Google file System)。GFS是闭源的,而HDFS是对GFS的开源实现。 1.GFS和DFS有什么区别? GFS(Google File System)和DFS(Distributed File System)都是分布式文件系统,

    2024年02月03日
    浏览(56)
  • 云计算技术 实验四 HDFS操作方法和基础编程

    参考资料为: 教材代码-林子雨编著《大数据基础编程、实验和案例教程(第2版)》教材所有章节代码_厦大数据库实验室博客 1 . 实验学时 4学时 2 . 实验目的 熟悉HDFS的基本shell命令 熟悉HDFS的web管理 掌握HDFS编程实践 3 . 实验内容 (一)参考实验指南的内容,完成相关的HDF

    2024年02月08日
    浏览(28)
  • 《大数据技术原理与应用(第3版)》期末复习——第三章分布式文件系统HDFS习题

    分布式文件系统的结构 1、 名称节点 (“主节点”): 负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块之间的映射关系。 2、 数据节点 (“从节点”): 负责数据的存储和读取。在存储时,由名称节点分配存储位置,然后由客户端把数据直接写入相应

    2024年02月12日
    浏览(35)
  • 大数据技术原理与应用 实验6 Spark数据处理系统的搭建

    熟悉常用的Spark操作。 1.熟悉Spark Shell的使用; 2.熟悉常用的Spark RDD API、Spark SQL API和Spark DataFrames API。 操作系统:Linux Spark版本: 1.6 Hadoop版本: 3.3.0 JDK版本:1.8 使用Spark shell完成如下习题: a)读取Spark安装目录下的文件README.md(/usr/local/spark/README.md); b)统计包含“Spark”的单词

    2024年02月09日
    浏览(48)
  • 大数据技术基础实验四:HDFS实验——读写HDFS文件

    在前面的实验中我们进行了HDFS的部署,并设置了一键启动HDFS操作,本期实验我们将使用HDFS开发环境进行HDFS写、读的编写,以及程序的运行,了解HDFS读写文件的调用流程,理解HDFS读写文件的原理。 好啦废话不多说,我们开始今天的实验操作。 会在Linux环境下编写读写HDFS文

    2023年04月16日
    浏览(28)
  • 大数据技术原理与应用实验3——NoSQL和关系数据库的操作比较

    (1)理解四种数据库(MySQL、HBase、Redis和MongoDB)的概念以及不同点; (2)熟练使用四种数据库操作常用的Shell命令; (3)熟悉四种数据库操作常用的Java API。 (1)Linux操作系统(CentOS7.5) (2)VMware Workstation Pro 15.5 (3)远程终端工具Xshell7 (4)Xftp7传输工具 (5)Hadoop版本:

    2024年02月02日
    浏览(32)
  • 大数据编程实验二:熟悉常用的HDFS操作

    实验目的 1、理解HDFS在Hadoop体系结构中的角色 2、熟悉使用HDFS操作常用的Shell命令 3、熟悉HDFS操作常用的Java API 实验平台 1、操作系统:Windows 2、Hadoop版本:3.1.3 3、JDK版本:1.8 4、Java IDE:IDEA 前期:一定要先启动hadoop   1、编程实现以下功能,并利用Hadoop提供的Shell命令完成相

    2024年02月08日
    浏览(28)
  • 大数据编程实验一:HDFS常用操作和Spark读取文件系统数据

    这是我们大数据专业开设的第二门课程——大数据编程,使用的参考书是《Spark编程基础》,这门课跟大数据技术基础是分开学习的,但这门课是用的我们自己在电脑上搭建的虚拟环境进行实验的,不是在那个平台上,而且搭建的还是伪分布式,这门课主要偏向于有关大数据

    2024年04月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包