ubantu18.04HDFS编程实践(Hadoop3.1.3)

说明:本文图片较多,耐心等待加载。(建议用电脑)

注意所有打开的文件都要记得保存。

 第一步:准备工作

本文是在之前Hadoop搭建完集群环境后继续进行的,因此需要读者完成我之前教程的所有操作。

第二步:我们先将Hadoop集群启动(上篇都讲过)

1.将两台虚拟机都启动。

2.进去Master终端,(右键-》打开终端),启动,并用jps检查是否成功启动

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

 第三步:学习利用Shell命令与HDFS进行交互

1.基本操作:

1.第一个:我们可以在终端输入如下命令,查看fs总共支持了哪些命令

./bin/hadoop fs

2.第二个:在终端输入如下命令,可以查看具体某个命令的作用

./bin/hadoop fs -help put

 2.目录操作:

要使用 HDFS,首先创建HDFS上的用户目录,我们在之前的教程都是做过的,如果没有的话,可以输入以下命令:

cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop

1.第一个:可以使用如下命令显示HDFS中与当前用户hadoop对应的用户目录下的内容:

 ./bin/hdfs dfs -ls .

如果要列出HDFS上的所有目录,可以使用如下命令:

./bin/hdfs dfs -ls

2.第二个:可以使用如下命令创建一个input目录:

./bin/hdfs dfs -mkdir input

如果要在HDFS的根目录下创建一个名称为input的目录,则需要使用如下命令:

./bin/hdfs dfs -mkdir /input

 可以使用rm命令删除一个目录,比如,可以使用如下命令删除刚才在HDFS中创建的“/input”目录(不是“/user/hadoop/input”目录):

./bin/hdfs dfs -rm -r /input

 3.文件操作:

经常需要从本地文件系统向HDFS中上传文件,或者把HDFS中的文件下载到本地文件系统中。

1.我们先编辑一个文件在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件myLocalFile.txt

sudo vim /home/hadoop/myLocalFile.txt

 在文件里写入下面三行:

Hadoop

Spark

XMU DBLAB

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

./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt  input

如果没有出现下面报错,直接跳到第三步

 解决方法:

hdfs dfsadmin -safemode leave

 然后重新执行上面的命令,出现下面的界面即成功。

3. 可以使用ls命令查看一下文件是否成功上传到HDFS中

./bin/hdfs dfs -ls input

4.下面使用如下命令查看HDFS中的myLocalFile.txt这个文件的内容:

./bin/hdfs dfs -cat input/myLocalFile.txt

 

5. 下面把HDFS中的myLocalFile.txt文件下载到本地文件系统中的“/home/hadoop/下载/”这个目录下,命令如下:

注意博主的是中文版,所以叫下载,大家自己分辨修改(英文版为Downloads)

./bin/hdfs dfs -get input/myLocalFile.txt  /home/hadoop/下载

 如果没有出现下面报错,直接跳到第6步

 解决方法:

sudo chmod a+w /home/hadoop/下载

 这个本身是不推荐的,但我们这里只用学习,所以为了方便就直接这样子写了,可以单独给你的用户权限。 然后重新执行上面的命令,出现下面的界面即成功。

6.可以使用如下命令,到本地文件系统查看下载下来的文件myLocalFile.txt:

cd ~
cd 下载
ls
cat myLocalFile.txt

 7.了解一下如何把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录。比如,如果要把HDFS的“/user/hadoop/input/myLocalFile.txt”文件,拷贝到HDFS的另外一个目录“/input”中(注意,这个input目录位于HDFS根目录下),可以使用如下命令:

./bin/hdfs dfs -cp input/myLocalFile.txt  /input

第四步:利用Web界面管理HDFS

打开Linux自带的Firefox浏览器,输入地址http://localhost:9870。

第五步:利用Java API与HDFS进行交互

 (一) 在Ubuntu中安装Eclipse

可以到Eclipse官网(Eclipse Downloads | The Eclipse Foundation)下载安装包。
或者直接点击这里从百度云盘下载软件(提取码:lnwl),位于“软件”目录下,假设安装文件下载后保存在了Linux系统的目录“~/Downloads”下。(大家不嫌慢的话可以直接再虚拟机浏览器访问官网进行下载)

说明:我这里是从官网直接下载的,因为虚拟机访问速度有点慢,我这里就在windos主机去官网下载,然后用之前的共享文件夹直接传到虚拟机,也是很简单的,给大家也截一下屏。

 进入官网:

 点击 Download Packages选择Linux_x86,然后就开始下载了。

 之后我们将这个下载的文件放到第一章所建的共享文件夹share里

然后我们继续在虚拟机找到他。

 1.点击文件

点击其他位置,点击计算机----> mnt ---->hgfs------>share

 

然后我们将他拖入到下载中。 

 然后在终端继续输入:

cd ~/下载
ls
sudo tar -zxvf ./eclipse-4.7.0-linux.gtk.x86_64.tar.gz -C /usr/local 

(注意英文版是Downloads,我这里是中文就是下载,还有就是这个文件名是你自己的,你去文件那里右键文件,然后重命名,全选复制一下)

 执行如下命令启动Eclipse:

cd /usr/local/eclipse
./eclipse 

 

出现这个界面即为启动成功。

(二)使用Eclipse开发调试HDFS Java程序(保证之前的集群成功启动)

1.在Eclipse中创建项目:

我们直接点击launch。

 继续

继续

 继续

注意这里最后点击Next,而不是Finsh,图片中打错字了。

2. 为项目添加需要用到的JAR包

 

 

 

 注意不要选中前面的四个

 出现这个界面

 然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

 然后继续选中classpath,点击Add_External_JARS,下面的操作和上面的都是重复操作,就是选中jar包,然后引入。

然后点击Finsh

 继续

继续

继续

 3.编写Java应用程序

 

然后将下面的代码覆盖掉他自动生成的。

import java.io.IOException;
import java.io.PrintStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

/**
 * 过滤掉文件名满足特定条件的文件 
 */
class MyPathFilter implements PathFilter {
    String reg = null; 
    MyPathFilter(String reg) {
        this.reg = reg;
    }
    public boolean accept(Path path) {
        if (!(path.toString().matches(reg)))
            return true;
        return false;
    }
}

/***
 * 利用FSDataOutputStream和FSDataInputStream合并HDFS中的文件
 */
public class MergeFile {
    Path inputPath = null; //待合并的文件所在的目录的路径
    Path outputPath = null; //输出文件的路径

    public MergeFile(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://Master:9000");
        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 MyPathFilter(".*\\.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);
            }
         }

        ps.close();
        fsdos.close();
    }

    public static void main(String[] args) throws IOException {
        MergeFile merge = new MergeFile(
                "hdfs://Master:9000/user/hadoop/",
                "hdfs://Master:9000/user/hadoop/merge.txt");
        merge.doMerge();
    }
}
          

 4.编译运行程序

准备工作:我们先提前准备几个文件,后续会用到。

因为刚刚启动了Eclipse,所以我们可以再打开一个终端,(来到桌面右键--》打开终端)

注意刚刚的终端不要关闭,只需要小化就行。

在新的终端输入以下命令,创建并且写入文件。在本地创建文件
echo "this is file1.txt" > file1.txt
echo "this is file2.txt" > file2.txt
echo "this is file3.txt" > file3.txt
echo "this is file4.abc" > file4.abc
echo "this is file5.abc" > file5.abc
确保 HDFS 中 /user/hadoop 目录存在

可以运行以下命令来创建这个目录(如果已经存在则会提示已存在):

./bin/hdfs dfs -mkdir -p /user/hadoop
然后继续输入,将文件上传到 HDFS
./bin/hdfs dfs -put file1.txt /user/hadoop/
./bin/hdfs dfs -put file2.txt /user/hadoop/
./bin/hdfs dfs -put file3.txt /user/hadoop/
./bin/hdfs dfs -put file4.abc /user/hadoop/
./bin/hdfs dfs -put file5.abc /user/hadoop/
继续输入,我们查看是否成功。
./bin/hdfs dfs -ls /user/hadoop/

然后我们点击这个,打开Eclipse

 继续

 运行成功界面

我们现在有两个终端,点击这个可以看到

如果程序运行成功,这时,可以到HDFS中查看生成的merge.txt文件,比如,可以在Linux终端中执行如下命令: 

cd /usr/local/hadoop
./bin/hdfs dfs -ls /user/hadoop
./bin/hdfs dfs -cat /user/hadoop/merge.txt

 可以看到如下界面。

 5.应用程序的部署

终端中执行如下命令:

cd /usr/local/hadoop
mkdir myapp

然后再打开Eclipse

 目录“(注意这里去了粘贴使用CTRL+v)

/usr/local/hadoop/myapp/HDFSExample.jar

之后出现的两个界面全部点击ok

继续在终端中执行如下命令: 

cd /usr/local/hadoop/myapp
ls

由于之前已经运行过一次程序,已经生成了merge.txt,因此,需要首先执行如下命令删除该文件:

cd /usr/local/hadoop
./bin/hdfs dfs -rm /user/hadoop/merge.txt
cd /usr/local/hadoop
./bin/hadoop jar ./myapp/HDFSExample.jar
cd /usr/local/hadoop
./bin/hdfs dfs -ls /user/hadoop
./bin/hdfs dfs -cat /user/hadoop/merge.txt

出现如上界面即为成功。 

结语:整体的操作步我都给大家写出来,并且截图了,大家只需要无脑粘贴就好了,具体的讲解可以看我的资料里的文档解释更加详细,这个实验就结束了。 

上面内容制作不易,喜欢的点个赞和收藏支持一下吧!!

后期会持续更新更多大数据内容,如果想共同学习,就点点关注把(

### HDFS 编程实践在 VMware 环境下的实现 对于希望在 VMware 虚拟化环境中开展 HDFS (Hadoop Distributed File System) 编程实践的研究者或开发者而言,理解如何配置虚拟机环境以及部署 Hadoop 集群至关重要。 #### 构建适合的开发环境 为了确保最佳性能,在 VMware 中创建用于 HDFS 开发的虚拟机时应考虑分配足够的资源给每台 VM。建议至少为每个节点提供 4GB RAM 和两个 vCPU 核心[^1]。此外,安装 CentOS 或 Ubuntu Server 版本的操作系统作为基础平台通常是一个不错的选择。 #### 安装与配置 Hadoop 完成操作系统设置之后,下一步就是下载并解压 Apache Hadoop 发行版到指定目录下。接着修改 `hdfs-site.xml` 文件来定义 NameNode 及 DataNodes 的 IP 地址和其他必要参数;同样地调整 `core-site.xml` 来指明文件系统的默认名称服务地址。 ```bash # 设置 Java_HOME 环境变量 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ # 启动 Hadoop 名称节点守护进程 $HADOOP_HOME/sbin/start-dfs.sh ``` #### 实现简单的 MapReduce 应用程序 编写一个基本的 WordCount 示例可以帮助熟悉 HDFS 上的数据处理流程。此应用程序接收输入文本文件路径作为命令行参数,并输出单词频率统计结果至另一位置存储。通过这种方式可以验证集群是否正常工作并且能够执行分布式计算任务。 ```java public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); // ...省略部分代码... System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` #### 测试与优化 最后一步是对所构建的应用进行全面测试以确认其稳定性和效率。这可能涉及到多次迭代调整 JVM 参数、增加更多数据节点或者更改网络拓扑结构等方面的工作。同时也可以利用 YARN ResourceManager UI 页面监控作业进度和资源利用率情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值