HDFS操作方法和基础编程——文件和目录的操作
发布日期:2021-06-22 22:48:19 浏览次数:2 分类:技术文章

本文共 5017 字,大约阅读时间需要 16 分钟。

文章目录

使用的工具

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

一、HDFS操作常用Shell命令

(一)查看命令使用方法

  1. 启动Hadoop
    登录Linux系统,打开一个终端
    使用命令
    cd /usr/local/hadoopsudo ./sbin/start-dfs.sh
    运行结果在这里插入图片描述
  2. 查看hdfs dfs总共支持哪些操作
    使用命令
    cd /usr/local/hadoopsudo ./bin/hdfs dfs
    运行结果
    在这里插入图片描述
  3. 查看某个命令的作用
    举例说明
    查询put命令的具体用法
    使用命令
    ./bin/hdfs dfs –help put
    运行结果
    在这里插入图片描述

(二)HDFS目录操作

目录操作

  1. 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
    运行结果
    在这里插入图片描述
  2. 列出HDFS上的所有目录
    命令内容
    ./bin/hdfs dfs –ls
  3. 创建目录
    创建一个input目录
    ./bin/hdfs dfs –mkdir -p input
    HDFS的根目录下创建一个名称为input的目录
    ./bin/hdfs dfs –mkdir -p /input
    在这里插入图片描述
  4. 删除目录
    例如:
    删除在HDFS中创建的“/input”目录
    ./bin/hdfs dfs –rm –r /input
    在这里插入图片描述

文件操作

  1. 上传文件
    本地/home/hadoop创建一个文件myLocalFile.txt
    sudo nano /home/hadoop/myLocalFile.txt
    文件内容
    HadoopSparkXMU DBLAB
    上次文件
    ./bin/hdfs dfs -put /home/hadoop/myLocalFile.txt  input
    查看文件是否上传成功
    ./bin/hdfs dfs -ls input
    在这里插入图片描述
    查看文件内容
    ./bin/hdfs dfs –cat input/myLocalFile.txt
    在这里插入图片描述
  2. 下载文件
    将上面的myLocalFile.txt下载到本地/home目录下
    ./bin/hdfs dfs -get input/myLocalFile.txt  /home
    查看下载的文件及内容
    cd ~cd /homelscat 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”

  1. Eclipse中创建项目

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

  2. 添加需要用到的JAR包

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

  3. 编写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
  4. 编译运行程序

    点击运行后,选择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结果

    在这里插入图片描述

  5. 应用程序的部署

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

    cd /usr/local/hadoopmkdir 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即可
    在这里插入图片描述

  6. 部署的使用

    查看部署的jar

    cd /usr/local/hadoop/myappls

    在这里插入图片描述

    部署的应用
    删除原来利用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应用程序。

四、参考资料

转载地址:https://blog.csdn.net/qq_43279579/article/details/116093394 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android文件读写操作
下一篇:AtCoder Beginner Contest 176 D.Wizard in Maze

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年03月04日 06时04分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

linux磁盘的命令是,linux磁盘相关的命令 2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存 2019-04-21
linux查进程内存问题,关于linux 查看服务进程内存,cpu,内存占用的一些基础命令... 2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解 2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步 2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化 2019-04-21
arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法 2019-04-21
私人linux远程连接,Linux远程连接 - osc_5g1gl9wp的个人空间 - OSCHINA - 中文开源技术交流社区... 2019-04-21
windows文件迁移到linux,从Windows到Linux迁移之文件服务器(Samba和AD完美结合) 2019-04-21
linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版) 2019-04-21
linux结构体数组的定义数组,task_struct结构体中的run_list和array域 2019-04-21
C语言极坐标转直角坐标,C语言实现直角坐标转换为极坐标的方法 2019-04-21
16F877A和24C02通信汇编语言,PIC16f877A读写24c02程序 2019-04-21
用c语言编写小于n的所有素数,关于求N以内素数的一点小问题(N小于一亿) 2019-04-21
华为100万部鸿蒙,2019年Q4发布 华为100万部鸿蒙OS手机已开测 2019-04-21
android+大富翁+局域网,【图片】大富翁6局域网(LAN)多人联机教程(求精)_大富翁吧_百度贴吧... 2019-04-21
html5 video视频资源保护,HTML5 视频播放 <video> 2019-04-21
html表头跟随滚动,JS实现table表格固定表头且表头随横向滚动而滚动_心善_前端开发者... 2019-04-21
rn webview加载本地静态html,React Native - Webview 加载本地文件 2019-04-21
dax powerbi 生成表函数_Power BI |DAX函数のCALCULATETABLE、CALENDAR函数以及相关表生成函数... 2019-04-21