hdfs shell 命令以及原理
shell 操作 dfs
上传
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -put /opt/MegaRAID/MegaCli/MegaCli64 hdfs://ns1/MegaCli
或者
[hadoop@namenode ~]$ /data/hadoop/bin/hdfs dfs -put /opt/MegaRAID/MegaCli/MegaCli64 /megacli
查看
[hadoop@namenode ~]$ /data/hadoop/bin/hdfs dfs -ls /
Found 7 items
drwxr-xr-x - hadoop supergroup 0 2016-11-09 14:21 /123456
-rw-r--r-- 3 hadoop supergroup 2247752 2016-11-10 15:49 /MegaCli
drwxr-xr-x - hadoop supergroup 0 2016-11-04 15:20 /data
-rw-r--r-- 3 hadoop supergroup 2247752 2016-11-10 15:50 /megacli
drwx------ - hadoop supergroup 0 2016-11-09 12:11 /tmp
-rw-r--r-- 3 hadoop supergroup 214092195 2016-11-08 18:50 /tools
-rw-r--r-- 3 hadoop supergroup 53 2016-11-09 12:08 /worlds
下载
/data/hadoop/bin/hadoop fs -get hdfs://ns1/MegaCli ./
或者
/data/hadoop/bin/hdfs dfs -get /MegaCli ~/megacli
本地文件拷贝到hdfs中
/data/hadoop/bin/hadoop fs -copyFromLocal /data/auto_pub.sh /
查看 hdfs 文件
/data/hadoop/bin/hadoop fs -cat /auto_pub.sh | more
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -count /
21 17 218744425 /
文件 文件夹 大小
递归查询,并且显示大小
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -ls -R -h /tmp
创建目录
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -mkdir /abcd
把本地文件move到hdfs上
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -moveFromLocal ~/abc.txt /
把hdfs文件move到本地
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -moveToLocal /abc.txt ~/
把hdfs文件move到hdfs
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -moveFromLocal ~/abc.txt /
把hdfs文件删除
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -rm /abc.txt
把hdfs目录删除
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -rm -r /abcd
查看hdfs 文件最后内容
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -tail -f /megacli
创建hdfs 一个空文件
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -touch /aaaa.txt
添加执行权限
[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -chmod a+x /aaaa.txt
HDFS原理
1个client 需要读取数据,首先要和namenode联系,进行Metadata ops操作,获取元数据信息(metadata),
数据块是依次读取,不能同时读取,读一块,然后拼接。
机架感知: 客户端有选择,在那台机器上读取比较近,有数据就近原则。
数据块的复制,是水平复制。
Metadata 元数据
内存与硬盘都保存一份
NameNode(FileName,replicas,block-ids,id2host......)
/test/a.log, 3,{blk_1,blk_2},[{blk_1:[h0,h1,h3]},{blk_2:[h0,h2,h4]}]
副本复制3此, /test/a.log 分成2块, blk_1 在 h0,h1,h3上, blk_2在h0,h2,h4上
NameNode是整个文件系统的管理节点。
他维护着整个文件系统的文件目录树,
文件/目录的元信息和每个文件对应的
数据块列表,接收用户的操作请求
文件包括
1 fsimage 元数据镜像文件,
2. edits 操作日志文件
3. fstime 保存最后一次checkpoint的时间
NameNode的工作特点
1.NameNode始终在内存中保存metedata,用于处理 读请求。
2.到有“写请求”到来时,namenode会首先写edits到磁盘,即向edits文件中写日志,成功返回后,才会
修改内存,并且向客户端返回。
3. hadoop会维护一个fsimage文件,也就是namenode中的metedata镜像,但是fsimage不会随时与namenode
内存中的metedata保持一样,而是每隔一段时间通过合并edits文件来更新内容。
secondarynamenode 就是用来合并 fsimages和edits文件来更新 namenode的 metedata。
mapreduce 概述
mapreduce 是一种分布式计算模型,由google提出, 主要用于搜索领域,解决海量数据的计算问题
MR由两个阶段组成,map和reduce,用户只需要实现map() 和 reduce() 两个函数, 即可实现分布式计算,非常简单
这两个函数的形参是key、value对,表示函数的输入信息。
1. client 写好的worldcournt jar包提交给HDFS
2.nodemanager每隔一段时间就像RM发送心跳,帮自己的状态汇报给resourcemanager,领取任务。
3.resourcemanager的主要任务,是资源分配。
4.nodemanager从hdfs读取数据,reduce完成后 又把数据写会到hdfs中。
5.client通过RPC协议提交任务到resourcemanager,只提交任务的 描述信息。
6. nodemanager领取 resourcemanager任务的描述信息。
7.nodemanager到HDFS 领取jar包
8. 领到jar包,再启动一个进程,执行程序。