且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[python作业AI毕业设计博客]大数据Hadoop工具python教程1-HDFS Hadoop分布式文件系统

更新时间:2022-06-12 05:43:21

Hadoop分布式文件系统(HDFS:Hadoop Distributed File System)是基于Java的分布式文件系统
分布式,可扩展和可移植的文件系统,旨在跨越大型商用服务器集群。 HDFS的设计基于谷歌文件系统GFS(https://ai.google/research/pubs/pub51)。与许多其他分布式文件系统一样,HDFS拥有大量数据并提供对许多客户端的透明访问。

HDFS以可靠和可扩展的方式存储非常大的文件:PB(1PB=1024TB,,针对非常大的文件)、GB和MB。它使用块结构文件系统来完成的。单个文件被拆分为固定大小的块,存储在集群中的计算机上。由多个块组成的文件通常不会将所有块存储在一台机器。

HDFS通过复制块并在集群中分发副本来确保可靠性。默认复制因子为3,表示每个块在群集上存在三次。即使单机出现故障,块级复制也保证数据可用。

本章首先介绍HDFS的核心概念,并解释如何使用本机内置命令与文件系统进行交互。

HDFS概述

HDFS的体系结构设计由两个进程组成:一个NameNode进程保存文件系统的元数据,一个或多个DataNode进程存储块。 NameNode和DataNode可以在一台机器上运行,但HDFS集群通常包含专机运行NameNode进程,可能还有数千台运行DataNode进程的计算机。

NameNode是HDFS中最重要的机器。它存储整个文件系统的元数据:文件名,文件权限以及每个文件对应块的位置。为了允许快速访问,NameNode将整个元数据结构存储在内存中。

NameNode还跟踪块的复制,确保机器故障不会导致数据丢失。由于NameNode存在单点故障,可以使用第2个NameNode生成主NameNode内存结构的快照,从而降低NameNode失败时数据丢失的风险。

在HDFS中存储块的机器称为DataNode。 DataNode通常是具有大存储容量的商用机器。与NameNode不同,少量DataNode失败,HDFS将继续正常运行。当DataNode失败时,NameNode将复制丢失的块,以保证最少复制数。

[python作业AI毕业设计博客]大数据Hadoop工具python教程1-HDFS Hadoop分布式文件系统

HDFS交互

与HDFS交互主要使用hdfs的脚本

$ hdfs COMMAND [-option <arg>]

参考资料

通用文件操作

在HDFS上执行基本文件操作操作,使用dfs子命令。 dfs命令支持类似Linux shell中的许多文件操作。

$ hdfs COMMAND [-option <arg>]

注意:hdfs命令以系统用户的权限运行。 以下示例用“hduser”的用户运行。

列出HDFS中目录的内容,请使用-ls命令:

$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/hduser
$ hdfs dfs -ls /
Found 1 items
drwxr-xr-x   - hduser_ supergroup          0 2019-01-21 16:37 /user
$ hdfs dfs -ls -R /user
drwxr-xr-x   - hduser_ supergroup          0 2019-01-21 16:45 /user/hduser

put与get数据

$ hdfs dfs -put /home/hduser_/input.txt /user/hduser
$ hdfs dfs -cat /user/hduser/input.txt
https://china-testing.github.io/
$ dfs -get /user/hduser/input.txt /home/hduser_/test.txt

命令参考

$ hdfs dfs
Usage: hadoop fs [generic options]
    [-appendToFile <localsrc> ... <dst>]
    [-cat [-ignoreCrc] <src> ...]
    [-checksum <src> ...]
    [-chgrp [-R] GROUP PATH...]
    [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
    [-chown [-R] [OWNER][:[GROUP]] PATH...]
    [-copyFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
    [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...]
    [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
    [-createSnapshot <snapshotDir> [<snapshotName>]]
    [-deleteSnapshot <snapshotDir> <snapshotName>]
    [-df [-h] [<path> ...]]
    [-du [-s] [-h] [-x] <path> ...]
    [-expunge]
    [-find <path> ... <expression> ...]
    [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
    [-getfacl [-R] <path>]
    [-getfattr [-R] {-n name | -d} [-e en] <path>]
    [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
    [-help [cmd ...]]
    [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]]
    [-mkdir [-p] <path> ...]
    [-moveFromLocal <localsrc> ... <dst>]
    [-moveToLocal <src> <localdst>]
    [-mv <src> ... <dst>]
    [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
    [-renameSnapshot <snapshotDir> <oldName> <newName>]
    [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
    [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
    [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
    [-setfattr {-n name [-v value] | -x name} <path>]
    [-setrep [-R] [-w] <rep> <path> ...]
    [-stat [format] <path> ...]
    [-tail [-f] <file>]
    [-test -[defsz] <path>]
    [-text [-ignoreCrc] <src> ...]
    [-touchz <path> ...]
    [-truncate [-w] <length> <path> ...]
    [-usage [cmd ...]]

Generic options supported are:
-conf <configuration file>        specify an application configuration file
-D <property=value>               define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port>  specify a ResourceManager
-files <file1,...>                specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...>               specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...>          specify a comma-separated list of archives to be unarchived on the compute machines

The general command line syntax is:
command [genericOptions] [commandOptions]

更多帮助可以 hdfs dfs -usage 或 hdfs dfs -help