一、HDFS概念
优势:
存储超大文件
标准流式访问:“一次写入,多次读取”
运行在廉价的商用机器集群上
不足:
不能满足低延迟的数据访问
无法高效存储大量小文件
暂时不支持用户写入及随意修改文件
NameNode
HDFS主节点管理文件系统的命名空间(元数据)
储存文件的元数据,如文件名,文件目录结构、文件属性(生成时间、副本数、文件权限),
以及每个文件块列表和块所在的DataNode等。
协调客户端对文件的访问
DataNode
负责所在物理节点的存储管理
负责储存文件的块数据
一次写入,多次读取(不修改)
负责块的效验
HDFS 块(block)的概念
块block,默认大小128MB(用户可以自定义)
如果一个文件块小于这个块的大小,是不会占据整个块的空间
多个文件不能放到一个块中,一个块对应一个文件
负载均衡
HDFS的数据在各个Datanode中的分布可能很不均匀,尤其是在DataNode节点出现故障或新增DataNode节点时。使用如下命令可重新平衡DataNode上的数据块分布。
sbin/start-balancer.sh
安全机制
Master/Slave架构通过NameNode来统一调度,没有NameNode,文件系统将无法使用,Hadoop采用两种机制来确保NameNode的安全。
第一种是将NameNode上储存的元数据文件转移到其他文件系统中
第二种就是使用Secondary NameNode 同步备份。
SecondaryNameNode
Namenode的一个快照
周期性的备份NameNode
NameNode中的metadata及其它数据
可以用来恢复NameNode
二、SecondaryNameNode配置
Hadoop配置
配置文件:hdfs-site.xml
--》指定SecondaryNameNode所在的机器位置以及外部交互端口号
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bdqn.linux.com:50090</value>
</property>
验证Hadoop SecondaryNameNode
1.启动HDFS
sbin/hadoop-daemon.sh start secondarynamenode
2.查看Hadoop集群运行状态
jps
3.通过web访问端口访问
主机名:50090
三、HDFS Shell 命令
解决警告问题
18/06/27 06:00:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
原因:本地jar文件无法上传,找不到
解决方法:
方式一:重新编译hadoop
方式二:替换native
首先将Hadoop自带的native包重命名
工作目录:/opt/modules/hadoop-2.6.0/lib
mv native/ test_native
上传准备好的native
tar -zxvf native-2-6-0.tar.gz -C /opt/modules/hadoop-2.6.0/lib/
语法:
bin/hdfs dfs -cmd <args>
cmd:具体的操作,基本上与UNIX的命令行相同
<args>:有时需要包含参数
例如:bin/hdfs dfs -ls /
创建目录:
使用方法:hdfs dfs -mkdir <paths>
作用:创建目录
示例:
hdfs dfs -mkdir /user
--》同时创建多级目录
hdfs dfs -mkdir -p /user/tom
ls 列出目下的内容,包括文件名,权限,所有者,大小和修改时间
hdfs dfs -ls/
查看HDFS文件系统上的目录
hdfs dfs -ls -R /
查看HDFS文件系统上根下的所有目录及文件
put:简单的说就是将Linux中的文件拷贝到HDFS中
使用方法:hdfs dfs -put <localsrc>...<dst>
hdfs dfs -put music1.txt /input
-->同时上传多个文件
hdfs dfs -put music2.txt music3.txt /input
--》使用通配符上传
hdfs dfs -put music* /output
--》使用put去创建文件并编辑
hdfs dfs -put - /input/word.txt
Ctrl+C 终止程序,停止写入
cat/text
使用方法:hdfs dfs -cat URI [URI...]
复制文件到本地文件系统
作用:查看HDFS文件系统上的文件内容
示例:
hdfs dfs -cat /user/hadoop/file
get
使用方法:hdfs dfs -get <src> <localsrc>
复制文件到本地文件系统(将HDFS中的文件复制到Linux中)
作用:下载HDFS上的文件
示例:
hdfs dfs -get /user/hadoop/file localfile
-->同时下载多个文件
hdfs dfs -get /input/hello.txt /input/music1.txt /opt/datas/tom/
rm
使用方法:hdfs dfs -rm URI [URI...]
删除指定的文件。删除非空目录和文件。请参考rmr命令了解递归删除
delete的递归版本
作用:删除HDFS上的文件或目录
示例:
-->删除文件
hdfs dfs -rm /emptydir
--》删除目录
hdfs dfs -rm -r /output
getmerge
使用方法:hdfs dfs -getmerge <src> <localdst> [nl]
接受一个源目录和一个目标文件作为输入并且将源目录中所有的文件连接
成本地目标文件nl是可以选的,用于指定在每个文件结尾添加一个换行
符。
作用:合并多个文件内容
--》合并多个文件,生成一个本地文件
hdfs dfs -getmerge /input/music?.txt /opt/datas/music.txt
--》-nl 在合并的同时添加换行符。
hdfs dfs -getmerge -nl /input/music?.txt /opt/datas/musictop.txt
mv/cp
使用方法:hdfs dfs -mv URL <URL...> dest
将文件从源路径移动到目标路径,这个命令允许有多个源路径,此时目标
路径必须是一个目录。不允许在不同的文件系统间移动文件
作用:移动剪切文件
示例:
hdfs dfs -mv /hadoop/file1 /hadoop/file2
--》同时移动多个文件
hdfs dfs -mv /input/music1.txt /input/music2.txt /tom/
--》移动单个文件时,才能在移动的同时重命名
hdfs dfs -mv /input/music3.txt /tom/123.txt
-->在HDFS上复制目录,是不需要选项的
hdfs dfs -cp /input/ /tom/
tail
使用方法:hdfs dfs -tail [-f] URI
将文件尾部1K字节的内容输出到终端。支持 -f选项,行为和Unix中一致
hdfs dfs -tail pathname
作用:查看
示例:
hdfs dfs -tail /input2/README.txt
--》-f 实时监控文件内容,一旦文件内容发生变化,就会显示在控制台上
tail -f hadoop-root-namenode-bdqn.linux.com.log
chmod
使用方法:hdfs dfs -chmod [-R] <MODE[,MODE]...|OCTALMODE>
URI[URI]
设为所有人皆可读取
作用:更改文件或目录权限
chmod a+r file1.txt
hdfs dfs -chmod g+w,o+w /input/hello.txt
--》-R迭代修改
hdfs dfs -chmod -R 777 /tom/
chown
使用方法:hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R 将使改变在目录结构下递归进行。命令的使用者必须是 超级用户
hdfs dfs -chown bdqn:student /tom/music1.txt
========================以上为重点======================
touchz
使用方法:hdfs dfs -touchz URI [URI...]
创建一个0字节的空文件。
示例:
hdfs dfs -touchz pathname
du -s
使用方法:hdfs dfs -du -s <args>
显示文件的大小。
expunge
使用方法:hdfs dfs -expunge
清空回收站。
http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop-common/FileSystemShell.html
优势:
存储超大文件
标准流式访问:“一次写入,多次读取”
运行在廉价的商用机器集群上
不足:
不能满足低延迟的数据访问
无法高效存储大量小文件
暂时不支持用户写入及随意修改文件
NameNode
HDFS主节点管理文件系统的命名空间(元数据)
储存文件的元数据,如文件名,文件目录结构、文件属性(生成时间、副本数、文件权限),
以及每个文件块列表和块所在的DataNode等。
协调客户端对文件的访问
DataNode
负责所在物理节点的存储管理
负责储存文件的块数据
一次写入,多次读取(不修改)
负责块的效验
HDFS 块(block)的概念
块block,默认大小128MB(用户可以自定义)
如果一个文件块小于这个块的大小,是不会占据整个块的空间
多个文件不能放到一个块中,一个块对应一个文件
负载均衡
HDFS的数据在各个Datanode中的分布可能很不均匀,尤其是在DataNode节点出现故障或新增DataNode节点时。使用如下命令可重新平衡DataNode上的数据块分布。
sbin/start-balancer.sh
安全机制
Master/Slave架构通过NameNode来统一调度,没有NameNode,文件系统将无法使用,Hadoop采用两种机制来确保NameNode的安全。
第一种是将NameNode上储存的元数据文件转移到其他文件系统中
第二种就是使用Secondary NameNode 同步备份。
SecondaryNameNode
Namenode的一个快照
周期性的备份NameNode
NameNode中的metadata及其它数据
可以用来恢复NameNode
二、SecondaryNameNode配置
Hadoop配置
配置文件:hdfs-site.xml
--》指定SecondaryNameNode所在的机器位置以及外部交互端口号
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bdqn.linux.com:50090</value>
</property>
验证Hadoop SecondaryNameNode
1.启动HDFS
sbin/hadoop-daemon.sh start secondarynamenode
2.查看Hadoop集群运行状态
jps
3.通过web访问端口访问
主机名:50090
三、HDFS Shell 命令
解决警告问题
18/06/27 06:00:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
原因:本地jar文件无法上传,找不到
解决方法:
方式一:重新编译hadoop
方式二:替换native
首先将Hadoop自带的native包重命名
工作目录:/opt/modules/hadoop-2.6.0/lib
mv native/ test_native
上传准备好的native
tar -zxvf native-2-6-0.tar.gz -C /opt/modules/hadoop-2.6.0/lib/
语法:
bin/hdfs dfs -cmd <args>
cmd:具体的操作,基本上与UNIX的命令行相同
<args>:有时需要包含参数
例如:bin/hdfs dfs -ls /
创建目录:
使用方法:hdfs dfs -mkdir <paths>
作用:创建目录
示例:
hdfs dfs -mkdir /user
--》同时创建多级目录
hdfs dfs -mkdir -p /user/tom
ls 列出目下的内容,包括文件名,权限,所有者,大小和修改时间
hdfs dfs -ls/
查看HDFS文件系统上的目录
hdfs dfs -ls -R /
查看HDFS文件系统上根下的所有目录及文件
put:简单的说就是将Linux中的文件拷贝到HDFS中
使用方法:hdfs dfs -put <localsrc>...<dst>
hdfs dfs -put music1.txt /input
-->同时上传多个文件
hdfs dfs -put music2.txt music3.txt /input
--》使用通配符上传
hdfs dfs -put music* /output
--》使用put去创建文件并编辑
hdfs dfs -put - /input/word.txt
Ctrl+C 终止程序,停止写入
cat/text
使用方法:hdfs dfs -cat URI [URI...]
复制文件到本地文件系统
作用:查看HDFS文件系统上的文件内容
示例:
hdfs dfs -cat /user/hadoop/file
get
使用方法:hdfs dfs -get <src> <localsrc>
复制文件到本地文件系统(将HDFS中的文件复制到Linux中)
作用:下载HDFS上的文件
示例:
hdfs dfs -get /user/hadoop/file localfile
-->同时下载多个文件
hdfs dfs -get /input/hello.txt /input/music1.txt /opt/datas/tom/
rm
使用方法:hdfs dfs -rm URI [URI...]
删除指定的文件。删除非空目录和文件。请参考rmr命令了解递归删除
delete的递归版本
作用:删除HDFS上的文件或目录
示例:
-->删除文件
hdfs dfs -rm /emptydir
--》删除目录
hdfs dfs -rm -r /output
getmerge
使用方法:hdfs dfs -getmerge <src> <localdst> [nl]
接受一个源目录和一个目标文件作为输入并且将源目录中所有的文件连接
成本地目标文件nl是可以选的,用于指定在每个文件结尾添加一个换行
符。
作用:合并多个文件内容
--》合并多个文件,生成一个本地文件
hdfs dfs -getmerge /input/music?.txt /opt/datas/music.txt
--》-nl 在合并的同时添加换行符。
hdfs dfs -getmerge -nl /input/music?.txt /opt/datas/musictop.txt
mv/cp
使用方法:hdfs dfs -mv URL <URL...> dest
将文件从源路径移动到目标路径,这个命令允许有多个源路径,此时目标
路径必须是一个目录。不允许在不同的文件系统间移动文件
作用:移动剪切文件
示例:
hdfs dfs -mv /hadoop/file1 /hadoop/file2
--》同时移动多个文件
hdfs dfs -mv /input/music1.txt /input/music2.txt /tom/
--》移动单个文件时,才能在移动的同时重命名
hdfs dfs -mv /input/music3.txt /tom/123.txt
-->在HDFS上复制目录,是不需要选项的
hdfs dfs -cp /input/ /tom/
tail
使用方法:hdfs dfs -tail [-f] URI
将文件尾部1K字节的内容输出到终端。支持 -f选项,行为和Unix中一致
hdfs dfs -tail pathname
作用:查看
示例:
hdfs dfs -tail /input2/README.txt
--》-f 实时监控文件内容,一旦文件内容发生变化,就会显示在控制台上
tail -f hadoop-root-namenode-bdqn.linux.com.log
chmod
使用方法:hdfs dfs -chmod [-R] <MODE[,MODE]...|OCTALMODE>
URI[URI]
设为所有人皆可读取
作用:更改文件或目录权限
chmod a+r file1.txt
hdfs dfs -chmod g+w,o+w /input/hello.txt
--》-R迭代修改
hdfs dfs -chmod -R 777 /tom/
chown
使用方法:hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R 将使改变在目录结构下递归进行。命令的使用者必须是 超级用户
hdfs dfs -chown bdqn:student /tom/music1.txt
========================以上为重点======================
touchz
使用方法:hdfs dfs -touchz URI [URI...]
创建一个0字节的空文件。
示例:
hdfs dfs -touchz pathname
du -s
使用方法:hdfs dfs -du -s <args>
显示文件的大小。
expunge
使用方法:hdfs dfs -expunge
清空回收站。
http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop-common/FileSystemShell.html