HDFS操作方法和基础编程

您所在的位置:网站首页 linux系统文件目录操作编程实验 HDFS操作方法和基础编程

HDFS操作方法和基础编程

2024-07-01 09:15| 来源: 网络整理| 查看: 265

文章目录 一、HDFS操作常用Shell命令(一)查看命令使用方法(二)HDFS目录操作目录操作文件操作目录拷贝 二、利用HDFS的Web管理界面三、HDFS编程实例小结 四、参考资料

使用的工具 平台:阿里云轻量级应用服务器 Hadoop 3.3.0

一、HDFS操作常用Shell命令 (一)查看命令使用方法 启动Hadoop 登录Linux系统,打开一个终端 使用命令cd /usr/local/hadoop sudo ./sbin/start-dfs.sh 运行结果在这里插入图片描述查看hdfs dfs总共支持哪些操作 使用命令cd /usr/local/hadoop sudo ./bin/hdfs dfs 运行结果 在这里插入图片描述查看某个命令的作用 举例说明 查询put命令的具体用法 使用命令./bin/hdfs dfs –help put 运行结果 在这里插入图片描述 (二)HDFS目录操作 目录操作 HDFS中创建用户目录 命令内容./bin/hdfs dfs –mkdir –p /user/hadoop “/user/hadoop”目录就成为hadoop用户对应的用户目录 显示HDFS中与当前用户hadoop对应的用户目录下的内容方法1 ./bin/hdfs dfs –ls . 方法2 ./bin/hdfs dfs –ls /user/hadoop 运行结果 在这里插入图片描述列出HDFS上的所有目录 命令内容./bin/hdfs dfs –ls 创建目录 创建一个input目录./bin/hdfs dfs –mkdir -p input HDFS的根目录下创建一个名称为input的目录./bin/hdfs dfs –mkdir -p /input 在这里插入图片描述删除目录 例如: 删除在HDFS中创建的“/input”目录./bin/hdfs dfs –rm –r /input 在这里插入图片描述 文件操作 上传文件 本地/home/hadoop创建一个文件myLocalFile.txtsudo nano /home/hadoop/myLocalFile.txt 文件内容Hadoop Spark XMU DBLAB 上次文件./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt input 查看文件是否上传成功./bin/hdfs dfs -ls input 在这里插入图片描述 查看文件内容./bin/hdfs dfs –cat input/myLocalFile.txt 在这里插入图片描述下载文件 将上面的myLocalFile.txt下载到本地/home目录下./bin/hdfs dfs -get input/myLocalFile.txt /home 查看下载的文件及内容cd ~ cd /home ls cat myLocalFile.txt 在这里插入图片描述 目录拷贝

把文件从HDFS中的一个目录拷贝到HDFS中的另外一个目录 例如: 把HDFS的“/user/hadoop/input/myLocalFile.txt”文件,拷贝到HDFS的另外一个目录“/input”中

./bin/hdfs dfs -cp input/myLocalFile.txt /input 二、利用HDFS的Web管理界面

进入web管理界面的方法 在浏览器中输入 公网ip:9870 , 跳转到dfs页面,其中端口号是根据自己在按照hadoop的时候,文件配置过程中,自己进行配置的 在这里插入图片描述

三、HDFS编程实例

问题描述 假设在目录“hdfs://localhost:9000/user/hadoop”下面有几个文件,分别是file1.txt、file2.txt、file3.txt、file4.abc和file5.abc,需要从该目录中过滤出所有后缀名不为“.abc”的文件,对过滤之后的文件进行读取,并将这些文件的内容合并到文件 “hdfs://localhost:9000/user/hadoop/merge.txt”

Eclipse中创建项目 打开Eclipse,选择File->New->other 在这里插入图片描述 进行工程的设置 在这里插入图片描述

添加需要用到的JAR包 首先选中Modulepath,然后点击Add External JARs 在这里插入图片描述 选择对应jar包所在的路径 在这里插入图片描述 点击Finish,完成工程创建 在这里插入图片描述

编写Java应用程序 创建一个class 在这里插入图片描述 编写代码

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://localhost: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); } fsdis.close(); } ps.close(); fsdos.close(); } public static void main(String[] args) throws IOException { MergeFile merge = new MergeFile( "hdfs://localhost:9000/user/hadoop/", "hdfs://localhost:9000/user/hadoop/merge.txt"); merge.doMerge(); } }

启动运行Hadoop

cd /usr/local/hadoop ./sbin/start-dfs.sh

编译运行程序 点击运行后,选择Run As->Java 在这里插入图片描述 出现jar包缺少的报错的解决方法

导入相关的jar包,首先进入/usr/local/hadoop/share/hadoop/common/lib,使用ctr+A全选,将其中所有的包,都导入进去。接着,进入/usr/local/hadoop/share/hadoop/hdfs,将hadoop-hdfs-client-3.1.1.jar导入

Permission denied: user=Admin, access=WRITE, inode="/":root:supergroup:drwxr-xr-x 解决方法

sudo ./bin/hdfs dfs -chmod -R 777 /

运行结果 在这里插入图片描述 使用命令查看结果

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

在这里插入图片描述 在这里插入图片描述

web browser结果 在这里插入图片描述

应用程序的部署 创建一个目录,用于存放应用程序

cd /usr/local/hadoop mkdir myapp

在eclipse中,选中工程后,右键选择export 在这里插入图片描述 选择Java->Runable JAR file,再点击Next 在这里插入图片描述 填写保存路径及jar的文件名,然后点击Finish 在这里插入图片描述 选择OK 在这里插入图片描述 问题描述: /usr/local/hadoop/myapp/HDFSExample.jar(Permission denined) 在这里插入图片描述 解决方法 在终端下,使用该命令chmod -R 777 /usr/local/hadoop/myapp 重新开始应用部署,出现下面弹窗,选择OK即可 在这里插入图片描述

部署的使用 查看部署的jar

cd /usr/local/hadoop/myapp ls

在这里插入图片描述 部署的应用 删除原来利用eclipse生成的结果

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

在这里插入图片描述 使用hadoop jar命令运行程序

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

其结果与上面一致,不过要注意class File version的问题,如果版本不一致,就会出现报错

小结

了解到HDFS操作常用的Shell命令,其中主要包括目录操作命令和文件操作命令等。同时,还掌握了如何利用HDFS的Web管理界面,以可视化的方式查看HDFS的相关信息。同时,也初步了解到如何使用Eclipse开发操作HDFS的Java应用程序。

四、参考资料

http://dblab.xmu.edu.cn/blog/2798-2/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3