大数据基础HDFS入门

举报
俺想吃蜂蜜 发表于 2022/04/13 08:26:53 2022/04/13
【摘要】 目的理解HDFS在Hadoop体系结构中的角色;熟练使用HDFS操作常用的Shell命令;熟悉HDFS操作常用的Java API。 平台操作系统:LinuxHadoop版本:2.6.0或以上版本JDK版本:1.6或以上版本Java IDE:Eclipse 内容和要求HDFS理解含义:HDFS是hadoop项目的核心子项目,是分布式计算中数据存储管理的基础。是基于流数据模式访问和处理超大文件...

目的

  1. 理解HDFS在Hadoop体系结构中的角色;

  2. 熟练使用HDFS操作常用的Shell命令;

  3. 熟悉HDFS操作常用的Java API。

平台

操作系统:Linux

Hadoop版本:2.6.0或以上版本

JDK版本:1.6或以上版本

Java IDE:Eclipse

内容和要求

HDFS理解

含义:

HDFS是hadoop项目的核心子项目,是分布式计算中数据存储管理的基础。是基于流数据模式访问和处理超大文件的需求而开发的, 可以运行于廉价的商用服务器上。

它所具有的高容错、 高可靠性、 高可扩展性、 高获得性、 高吞吐率等特征为海量数据提供了不怕故障的存储, 为超大数据集的应用处理带来了很多便利。

HDFS是开源的,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是它是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的、可扩展的分布式文件系统。

HDFS的关键元素:

Block:将一个文件进行分块,通常是64M,可配置。若文件大小不到64MB ,则单独存成一个block。Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更。

NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。

DataNode:分布在廉价的计算机上,用于存储Block块文件。

HDFS编程练习

1. 利用 Hadoop 提供的 Shell 命令完成

向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;

image.png

image.png

image.png

image.png
 
从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;

image.png

将HDFS中指定文件的内容输出到终端中;

image.png

显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;

image.png

给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;

image.png

利用JAVA API 编程实现

编写一个Java程序,判断HDFS上是否存在某个文件?

代码如下:

import org.apache.hadoop.conf.Configuration;

    import org.apache.hadoop.fs.FileSystem;

    import org.apache.hadoop.fs.Path;

    public class a1{

        public static void main(String[] args){

            try{

                String fileName = "/user/hadoop/123.txt";

                Configuration conf = new Configuration();

                conf.set("fs.defaultFS", "hdfs://localhost:9000");

                conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");

                FileSystem fs = FileSystem.get(conf);

                if(fs.exists(new Path(fileName))){

                    System.out.println(fileName + " 文件存在");

                }else{

                    System.out.println(fileName + " 文件不存在");

                }

            }catch (Exception e){

                e.printStackTrace();

            }

        }

}

结果如下:

image.png

在其中我遇到了以下错误:

Hadoop启动HDFS进程的时候报错,提示权限不够

错误:

image.png
错误原因:

因为切换了用户无法正常使用

解决办法:

复制导入公钥就可以了,SSH链接需要使用公钥认证:

切换到ssh目录:cd ~/.ssh/

image.png

再次启动HDFS就可以了。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。