加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 电商 > 正文

这是一篇最通熟易懂的Hadoop HDFS实践攻略!

发布时间:2021-01-17 14:37:49 所属栏目:电商 来源:网络整理
导读:《这是一篇最通熟易懂的Hadoop HDFS实践攻略
副标题[/!--empirenews.page--]

《这是一篇最通熟易懂的Hadoop HDFS实践攻略!》要点:
本文介绍了这是一篇最通熟易懂的Hadoop HDFS实践攻略!,希望对您有用。如果有疑问,可以联系我们。

作者介绍:杜亦舒,创业中,技术合伙人,喜欢研究分享技术.个人订阅号:性能与架构.

  • HDFS是用来解决什么问题?怎么解决的?
  • 如何在命令行下操作HDFS?
  • 如何使用Java API来操作HDFS?
  • 在了解基本思路和操作方法后,进一步深究HDFS具体的读写数据流程

学习并实践本文教程后,可以对HDFS有比较清晰的认识,并可以进行熟练操作,为后续学习Hadoop体系打好基础.

目录:

理论部分

  1. HDFS 基本原理
  2. 文件读取、写入机制
  3. 元数据管理思路

实践部分

  1. 安装实践环境
  2. Shell 命令行操作方式
  3. Java API操作方式

一、HDFS基本原理

HDFS(Hadoop Distribute File System)是一个分布式文件系统,是Hadoop的重要成员.

1、文件系统的问题

文件系统是操作系统提供的磁盘空间管理服务,只需要我们制定把文件放到哪儿,从哪个路径读取文件就可以了,不用关心文件在磁盘上是如何存放的.

当文件所需空间大于本机磁盘空间时,如何处理呢?

一是加磁盘,但是加到一定程度就有限制了;二是加机器,用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,可以把不同文件放入不同的机器中,空间不足了可继续加机器,突破了存储空间的限制.但这个方式有多个问题:

  • 单机负载可能极高例如某个文件是热门,很多用户经常读取这个文件,就使得次文件所在机器的访问压力极高.
  • 数据不安全如果某个文件所在的机器出现故障,这个文件就不能访问了,可靠性很差.
  • 文件整理困难例如想把一些文件的存储位置进行调整,就需要看目标机器的空间是否够用,并且需要自己维护文件位置,如果机器非常多,操作就极为复杂.

2、HDFS的解决思路

HDFS是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能,对于用户来讲,感觉就像在操作一台机器,感受不到HDFS下面的多台服务器.

例如用户访问HDFS中的/a/b/c.mpg这个文件,HDFS负责从底层相应服务器中读取,然后返回给用户,这样用户只需和HDFS打交道,不关心这个文件是怎么存储的.

例如用户需要保存一个文件/a/b/xxx.avi.

HDFS首先会把这个文件进行分割,例如分为4块,然后分别放到不同服务器上.

这样做有个好处,不怕文件太大,并且读文件的压力不会全部集中在一台服务器上.但如果某台服务器坏了,文件就读不全了.

HDFS为保证文件可靠性,会把每个文件块进行多个备份:

  • 块1:A B C
  • 块2:A B D
  • 块3:B C D
  • 块4:A C D

这样文件的可靠性就大大增强了,即使某个服务器坏了,也可以完整读取文件.

同时还带来一个很大的好处,就是增加了文件的并发访问能力,比如多个用户读取这个文件时,都要读块1,HDFS可以根据服务器的繁忙程度,选择从那台服务器读块1.

3、元数据的管理

HDFS中存了哪些文件?

文件被分成了哪些块?

每个块被放在哪台服务器上?

……

这些都叫做元数据,这些元数据被抽象为一个目录树,记录了这些复杂的对应关系.这些元数据由一个单独的模块进行管理,这个模块叫做NameNode.存放文件块的真实服务器叫做DataNode,所以用户访问HDFS的过程可以理解为:

用户->?HDFS?->?NameNode?->?DataNode

4、HDFS优点

  • 容量可以线性扩展
  • 有副本机制,存储可靠性高,吞吐量增大
  • 有了NameNode后,用户访问文件只需指定HDFS上的路径

二、HDFS实践

经过上面介绍,可以对HDFS有个基本的了解,下面开始进行实际操作,在实践中更好的认识HDFS.

1、安装实践环境

您可以选择自己搭建环境,也可以使用打包好的Hadoop环境(版本2.7.3)

这个Hadoop环境实际上是一个虚机镜像,所以需要安装virtualbox虚拟机、vagrant镜像管理工具,和我的Hadoop镜像,然后用这个镜像启动虚机就可以了,下面是具体操作步骤:

1)安装virtualbox

下载地址:https://www.virtualbox.org/wiki/Downloads

2)安装vagrant

因为官网下载较慢,我上传到了云盘

Windows版

链接:?https://pan.baidu.com/s/1pKKQGHl

密码:?eykr

Mac版

链接:?https://pan.baidu.com/s/1slts9yt

密码:?aig4

安装完成后,在命令行终端下就可以使用vagrant命令.

3)下载Hadoop镜像

链接:?https://pan.baidu.com/s/1bpaisnd?

密码:?pn6c

4)启动

加载Hadoop镜像

vagrant?box?add?{自定义镜像名称}?{镜像所在路径}

例如您想命名为Hadoop,镜像下载后的路径为d:hadoop.box,加载命令就是这样:

vagrant?box?add?hadoop?d:hadoop.box

创建工作目录,例如d:hdfstest.

进入此目录,初始化

cd?d:hdfstest

vagrant?init?hadoop

启动虚机

vagrant up

启动完成后,就可以使用SSH客户端登录虚机了

IP?? 127.0.0.1

端口 2222

用户名 root

密码 vagrant

登录后使用命令ifconfig 查看本虚机的IP(如192.168.31.239),可以使用此IP和端口22登录了

IP?? 192.168.31.239

端口 22

用户名 root

密码 vagrant

Hadoop服务器环境搭建完成.

2、Shell命令行操作

登录Hadoop服务器后,先启动HDFS,执行命令:

start-dfs.sh

  • 查看帮助

hdfs?dfs?–help

显示目录信息

-ls 后面是要查看的目录路径

创建目录

创建目录/test

hdfs?dfs?-mkdir?/test

一次创建多级目录/aa/bb

hdfs?dfs?-mkdir?-p?/aa/bb

  • 上传文件

形式

hdfs?dfs?-put?{本地路径}?{hdfs中的路径}

实例(先创建好一个测试文件mytest.txt,内容随意,然后上传到/test)

hadoop fs??? -put?????? ~/mytest.txt /test

  • 显示文件内容

hdfs?dfs?-cat?/test/mytest.txt

  • 合并下载

先创建2个测试文件(log.access,?log.error),使用-put上传到/test目录下

hdfs?dfs?-put?log.*?/test

然后把2个log文件合并下载到一个文件中

hdfs?dfs?-getmerge?/test/log.*?./log

查看本地log文件内容,应该包含log.access与log.error两个文件的内容.

  • 复制

从HDFS的一个路径拷贝HDFS的另一个路径

hdfs?dfs?-cp?/test/mytest.txt?/aa/mytest.txt.2

验证

hdfs?dfs?-ls?/aa

  • 移动文件

hdfs?dfs?-mv?/aa/mytest.txt.2?/aa/bb

验证

hdfs?dfs?-ls?/aa/bb

应列出mytest.txt.2.

  • 删除

hdfs?dfs?-rm?-r?/aa/bb/mytest.txt.2

使用-r参数可以一次删除多级目录.

验证

hdfs?dfs?-ls?/aa/bb

应为空

  • 修改文件权限

与Linux文件系统中的用法一样,修改文件所属权限

-chgrp

-chmod

-chown

示例

hdfs?dfs?-chmod?666?/test/mytest.txt

hdfs?dfs?-chown?someuser:somegrp?/test/mytest.txt

  • 统计文件系统的可用空间

hdfs?dfs?-df?-h?/

  • 统计文件夹的大小

hdfs?dfs?-du?-s?-h?/test

3、Java API操作

(1)环境配置

因为需要在本机链接Hadoop虚机服务器,所以需要配置Hadoop,使其可以被外部访问.

先登录Hadoop虚机服务器,然后:

1)查看本机IP

ip?address

例如IP为:192.168.31.239

2)修改文件:

vi?/usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:9000</value>

</property>

把其中的localhost:9000修改为本机IP 192.168.31.239:9000

3)重新启动HDFS

#停止

stop-dfs.sh

#启动

start-dfs.sh

(2)搭建开发环境

)新建项目目录hdfstest

2)在项目目录下创建pom.xml

内容:

3)创建源码目录src/main/java

现在项目目录结构

├──?pom.xml

!””?src

│???? └──?main

│???? └──?java

(3)示例代码

查看文件列表ls

1)新建文件src/main/java/Ls.java

列出/下的文件列表,及递归获取所有文件

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读