HDFS(Hadoop Distributed File System):分布式存储
MapReduce:分布式计算
Hadoop的四大模块:
Common
HDFS
Yarn
mapReduce
部署的Linux(CentOS 6.5)、Hadoop
---------------------------------------------------------
HDFS(Hadoop Distributed File System):分布式存储
NameNode
是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的
元信息和每个文件对应的数据块列表。接收用户的操作请求。
文件包括:
1)fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
2)edits:操作日志文件。
3)fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中。
查看NameNode内容
bin/hdfs oiv -p XML -i fsimage-path -o fsimage.xml
bin/hdfs oev -p XML -i edits-path -o edits.xml
主要配置选项:hdfs-site.xml的
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop-repo/name</value>
</property>
通过HDFS命令查看fsimage文件:
hdfs oiv -p XML -i fsimage_0000000000000000115 -o fsimage.xml
查看hdfs://uplooking:9000/hello
<inode>
<id>16386</id>
<type>FILE</type>
<name>hello</name>
<replication>1</replication>
<mtime>1499706594113</mtime>
<atime>1499706593097</atime>
<perferredBlockSize>134217728</perferredBlockSize>//128M
<permission>root:supergroup:rw-r--r--</permission>
<blocks>
<block>
<id>1073741825</id>
<genstamp>1001</genstamp>
<numBytes>29</numBytes>
</block>
</blocks>
</inode>
通过HDFS命令查看edits操作文件
hdfs oev -p XML -i edits_0000000000000000004-0000000000000000115 -o edits.xml
DataNode
提供真实文件数据的存储服务。
文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,
按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。
HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个Block。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
Replication。多复本。默认是三个。
hdfs是专门为大文件设计文件系统,而不是为小文件设计的问题。
hdfs不适合存储小文件?
因为hdfs需要在内存中存放datanode中数据的元数据信息,如果存放过多的小文件的话,会极大的浪费内存开销
HDFS SHELL操作
hdfs dfs -ls hdfs://uplooking:9000/ --->(hdfs的根目录)
hdfs dfs -ls /
hdfs文件权限说明
- rw- r-- r-- 1 root supergroup 29 2017-07-10 10:09 hdfs://uplooking01:9000/hello
d rwx r-x r-x - root supergroup 0 2017-07-10 10:12 hdfs://uplooking01:9000/output
文 文件 文件 其它 备 文件 用户 文件 修改时间 文件在hdfs上面的路径
件 用户 用户 用户 份 用户 所在 大小
类 权限 组 权限 数 组
型 权限
-表示文件类型为文件
d表示文件类型为目录
用户权限有:r(read 读 4) w(write 写 2) x(execute 执行 1)
rwx:7
如果一个文件的权限是755:rwxr-xr-x
-ls 浏览hdfs的具体目录
hdfs dfs -ls [-R] / --->-R递归浏览/目录
查看文件内容:
-cat 浏览hdfs上的一个文件内容,和linux本地的cat命令一样
hdfs dfs -cat /input/hadoop/hdfs/data.log
-text hdfs dfs -text /input/hadoop/hdfs/data.log
-tail hdfs dfs -tail /input/hadoop/hdfs/data.log
创建目录:
-mkdir:在hdfs上面创建一个目录,如果创建的是多级目录:使用 -mkdir -p
eg. hdfs dfs -mkdir -p /input/hadoop/hdfs
文件移动:
-copyFromLocal [-f] [linux_src_path hdfs_dest_path] 将linux本地的文件拷贝/上传到hdfs
其中-f参数是强制上传,如果hdfs_dest_path已经存在,则覆盖之
eg.hdfs dfs -copyFromLocal /hello /hello-1
-copyToLocal
-moveFromLocal
-moveToLocal
以上四个命令,都是用于在linux本地和hdfs之前传递文件,不是工作中最常用的命令
-put-->就相当于-copyFromLocal---》从linux本地上传文件到hdfs
hdfs dfs -put data.log /input/hadoop/hdfs/
-get-->就相当于-copyToLocal---》从hdfs下载文件到linux本地
hdfs dfs -get /input/hadoop/hdfs/data.log aaa
-cp--->从hdfs上面的路径A,拷贝相关目录到hdfs上面的路径B
hdfs dfs -cp /input/hadoop/hdfs/data.log /input/hadoop/hdfs/data.1.log
-mv--->从hdfs上面的路径A,移动相关目录到hdfs上面的路径B
hdfs dfs -mv /input/hadoop/hdfs/data.log /input/hadoop/hdfs/data.2.log
文件删除:
-rm [-f] [-r|-R] hdfs目录:删除hdfs上面的指定目录
eg. hdfs dfs -rm -R /out 删除hdfs上面的文件夹/out