HDFS(Hadoop Distributed File System)是可扩展、容错、高性能的分布式文件系统,异步复制,一次写入多次读取,主要负责存储。其概念和内容可以参考[1]。这里就做一个简单的实验来看一下其文件管理的功能。更多的Hadoop命令可以参考[2]

用户建立

在实验环境中,不建议使用root账号直接登录运行,所以建立一个普通账号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Elephant主机执行
# 安装ansible
[root@elephant ~]# yum install -y ansible
# 在/etc/ansible/hosts中新增所有主机名
# 建立ansible文件
[root@elephant ~]# mkdir playbook
[root@elephant ~]# vim ./playbook/useradd.yaml
---
- hosts: hadoop
remote_user: root
vars_prompt:
- name: user_name
prompt: Enter Username
private: no
- name: user_passwd
prompt: Enter Password
encrypt: "sha512_crypt"
confirm: yes
tasks:
- name: create user
user:
name: "{{user_name}}"
password: "{{user_passwd}}"

# 执行
[root@elephant ~]# ansible-playbook ./playbook/useradd.yaml
Enter Username: sujx
Enter Password:
confirm Enter Password:

PLAY [hadoop] *****************************************************************************

HDFS文件使用

我们先将准备的481M文件(access.log)上传至用户家目录,看看这个文件将在hdfs文件系统中如何存储。

1
2
3
4
5
[root@elephant ~]# su hdfs
[hdfs@elephant root]$ hadoop fs -mkdir /user/sujx
[hdfs@elephant root]$ hadoop fs -chown sujx /user/sujx
[hdfs@elephant root]$ su sujx -
[hdfs@elephant root]$ hdfs dfs -put access_log weblog

然后,我们通过hdfs的web控制台就可以看到文件的存储情况,可见文件以3副本的形式,按照每个128M大小的存储块分割存储在namenode之上。当前情况是分成了4块。 show block 我们可以从lion主机中看到存储的数据块。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@lion ~]# tree /dfs
/dfs
`-- dn
-- current
-- BP-752680285-192.168.174.131-1582986010714
-- current
-- VERSION
-- dfsUsed
-- finalized
`-- subdir0
-- subdir0
-- subdir1
-- subdir2
-- subdir3
-- blk_1073742734
-- blk_1073742734_1910.meta
`-- subdir4
`-- rbw
-- scanner.cursor
`-- tmp
`-- VERSION
`-- in_use.lock