启动hdfs start-dfs.sh 关闭stop-dfs.shyarn同理。启动顺序start-dfs.sh 和start-yarn.sh关闭顺序stop-dfs.sh和stop-yarn.sh实验一测试hdfs上传文件1.在一台机器上创建一个wsy.txt2.创建一个hdfs的文件夹3.将本地文件上传到hdfs系统Hadoop fs -put本地文件地址和名字 上传到hdfs的地址4.查看文件上传成功hadoop fs -cat文件地址和文件名查看hdfs系统里面的文件内容逻辑地址例如qq邮箱hdfs系统/wuInput/wsy.txthdfs默认存3份 slave1slave2slave3master分配机制只存储了3台其中一台没有怎么去看存在那几台存在了slave3masterslave2在排在第一个的slave3里面执行以下代码最后的地址/usr/local/hadoop/tmp/dfs/data/current/BP-1572212494-172.18.0.2-1774500901217(自己的块id名字)/current/finalized/subdir0/subdir0物理地址(例如c盘里的文件)//// hdfs-site.xml里面记录了实际的物理地址/usr/local/hadoop/tmp/dfs/data实验二测试上传大文件1.在hdfs系统创建一个文件夹存放大文件2.本地大文件上传到hdfs系统3.需要知道大文件在hdfs系统怎么存放的所有的文件都是按照块存储大文件可能会分为多个块进行存储例如上图分了两个块分别进行存放hdfs系统里面的bigFiles/jdk-8u171-linux-x64.tar.gz是逻辑地址物理地址真正存放的路径是/usr/local/hadoop/tmp/dfa/data通过物理地址查看文件去两个块都存在的机器例如master/slave3cd /usr/local/hadoop/tmp/dfs/data/current/BP-1572212494-172.18.0.2-1774500901217(自己的块id名字)/current/finalized/subdir0/subdir0先到这个路径可以看到有两个新的块将两个块文件合并cat blk_1073741826 tmp.tar.gzcat blk_1073741827 tmp.tar.gz解压tar -zxvf tmp.tar.gz再ls查看压缩tar -zcvf tmp.tar.gz测试wordcount1.2.hadoop jar hadoop-mapreduce-example-3.4.0.jar wordcount /wuInput/wsy.txt /wOutput1hadoop jar jar包的位置jar里面的那个方法输入路径 输出路径一定是之前不存在的3.多了一个wuOutput如下图可以看到统计了单词出现的频率第二章面试重点1.常用端口号常用的配置文件hadoop3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers /hadoop/etc/hadoop2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slave3HDFS一、概述1.1HDFS产生背景随着数据量越来越大在一个操作系统存不下的数据那么就分配到更多的操作系统管理的磁盘中但是不方便管理和维护迫切需要一种系统来管理多台机器上的文件这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。1.2HDFS定义HDFSHadoop Distributed File System它是一个文件系统用于存储文件通过目录树来定位文件其次它是分布式的由很多服务器联合起来实现其功能集群中的服务器有各自的角色。HDFS的使用场景适合一次写入多次读出的场景且不支持文件的修改。适合用来做数据分析并不适合用来做网盘应用。1.3 HDFS 优缺点优点1高容错性数据自动保存多个副本。它通过增加副本的形式提高容错性。某个副本丢失后它可以自动恢复。2适合处理大数据数据规模能够处理数据规模到GB、TB甚至PB级别的数据。文件规模能够处理百万规模以上的文件数量数量相当之大。3可构建在廉价机器上通过多副本机制提高可靠性。缺点1不适合低延时数据访问比如毫秒级的存储数据是做不到的。2无法高效的对大量小文件进行存储。存储大量小文件的话他会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的因为NameNode的内存总是有限的理解书包含目录和具体内容小文件存储的寻址时间会超过读取时间他违反了HDFS的设计目标3不支持并发写入文件随机修改。一个文件只能有一个写不允许多个线程同时写仅支持数据append追加不支持文件的随机修改。1.4HDFS的架构NameNode(nn)就是Master老板它是一个主管、管理者。管理HDFS的名称空间配置副本策略管理数据块Block映射信息处理客户请求。DataNode就是Slave奴隶.NameNode下达命令DataNode执行实际操作。存储实际的数据块执行数据块的读/写操作。Client:就是客户端文件切分。文件上传HDFS的时候Client将文件切分成一个一个的Block然后进行上传跟NameNode交互获取文件的位置信息。与DataNode交互读取或者写入数据Client提供一些命令来管理HDFS比如NameNode格式化Client可以通过一些命令来访问HDFS比如对HDFS增删改查操作。Secondary NameNode:并非NameNode的热备当NameNode挂掉的时候它不能马上替换NameNode并提供服务。辅助NameNode分担其工作量比如定期合并Fsimage和Edits,并推送给NameNode在紧急情况下可恢复辅助NameNode。发现namenode多了一个 edits_inprogress_0000000000000000164内存 硬盘Fsimage硬盘为了防止断电数据丢失Edits1.5HDFS文件块大小(面试重点)HDFS中文件在物理上是分块存储(block)块的大小可以通过配合参数(dfs.blocksize)来规定默认大小在hadoop2.x版本中128M老版本是64M例block1 block2 block3 block3 .....block66如果寻址时间约为10ms即查找到目标block的时间约为10ms。寻址时间为传输时间的1%时则为最佳状态。因此传输时间10ms/1%1000ms1s目前磁盘的输出速率普遍为100MB/s 块大小:100M/s*1s100M 所以最后块大小为128M(选与100最接近的2的次方所以为128M)普通机械硬盘80M/s~90M/s 块大小80M~90M 64M或128M固态硬盘200M/s~300M/s 块大小200M~300M 256M思考为什么块的大小不能设置太小也不能设置太大1.HDFS的块设置太小会增加寻址时间程序一直在找块的位置。2.如果块设置太大从磁盘传输数据的时间会明显大于定位这个块开始新的位置所需要的时间寻址时间导致程序处理这块数据时会非常慢。总结HDFS块的大小设置主义取决于磁盘传输速率。1.6HDFS的shell操作10分1.基本语法bin/hadoop fs 具体的命令bin/hdfs dfs 具体的命令2.常用的操作命令1.启动hadoop集群sbin/start-dfs.sh 启动hdfssbin/start-yarn.sh 启动yarn2.-help :输出这个命令参数3.-ls:显示目录信息hadoop fs -ls:显示hadoop的目录信息4.-mkdir在hdfs上创建目录或文件夹5.moveFromLocal:从本地剪切粘贴到HDFStouch创建一个文件再将此文件剪切复制到HDFS剪切后本地没有这个文件了6.-appendToFile追加一个文件到已经存在的文件夹末尾1要有一个本地文件touch文件名创建一个空文件vi文件名编辑这个文件cat文件名查看这个文件2把本地文件追加到已经存在的HDFS系统里面的文件的末尾hadoop fs -appendToFile 本地文件和地址HDFS已经存在的文件路径以及文件名-cat文件名查看文件7.-chgrp -chmod -chown Linux文件系统中的用法一样修改文件所属权限(ch代表change,grp代表group,mod代表modeown代表所有者和组)第一列表示权限第二列表示硬链届数第三列表示文件所有者-chgrp [R]组名 文件或目录名改变文件所属的组别组别变成了wsy。chown 改变文件文件夹所有者的命令hadoop fs -chown文件所有者组别名字hdfs的文件或者文件夹。owner那一列变成了wsy。chmod[用户类别][操作符][权限] 文件/目录1.用户类别u所有者(usr)g所属者组(group)0其他用户(others)a所有用户(all,默认值)2.操作符添加权限-移除权限直接设置权限覆盖原有权限3.权限r读w写x执行原本的权限语句新的权限rw-chmod ux script.shrwxrw-chmod g-w data.txtr--rwxchmod or file.txtr--二数字模式chmod[数字组合] 文件/目录1.权限对应数字r4w2x1-无权限 02.数字组合规则将三类用户所有者组其他用户的权限得到三位数字第一位所有者权限第二位组权限第三位其他用户权限例1rwxr-xr--所有者rwx 4217组r-- 4004其他用户r-- 4004例2rw-r--r--所有者rw- 4206组r-- 4004其他用户r-- 4004Hadoop fs -chmod 666 文件名将这个文件的三类用户都给了读写的权利8. -copyFromLocal:从本地文件系统中拷贝到HDFS路径去hadoop fs -copyFromLocal本地文件HDFS的路径要放的路径9.-copyToLocal从HDFS拷贝到本地10.-cp从HDFS的一个路径拷贝到HDFS的另一个路径11.-mv在HDFS目录中移动文件将ludan从HDFS目录移动到wangzherongyao/fayu中12.-get等同于copyToLocal就是从HDFS下载文件到本地将ludan下载到本地13.-put等同于copyFromLocalhadoop fs -put本地文件上传到HDFS的系统位置14.-tail显示一个文件的末尾15.-rm删除文件或者文件夹删文件hadoop fs -rm HDFS文件路径及名字ls查看少了ludan.txt删文件夹hadoop fs -rm -r HDFS文件夹路径及名字16.-du统计文件夹的大小信息1. -ssummary 汇总• 作用只显示指定路径目录/文件的总大小而不列出目录下每个子文件/子目录的单独大小。• 不加 -s 时会递归列出目录下所有文件/子目录的大小加上 -s 后只输出一行汇总结果代表整个目录的总大小。• 你的命令 hadoop fs -du -s -h /wangzherongyao/ 输出的 113 339 /wangzherongyao就是该目录的汇总大小。2. -hhuman-readable 人类可读• 作用把文件/目录大小从默认的字节bytes单位转换成更易读的格式如 KB、MB、GB 等方便直观查看。• 不加 -h 时显示的是纯数字的字节数加上 -h 后会自动换算并加上单位比如 10、30、34 这些数字实际是经过换算后的大小值。17.-setrep设置文件HDFS文件的副本数量replication从3变成了5。现在四台机器内都有了maKeboluo.txt如果想要在web端可以直接修改文件副本数需要将文件的other给到写的权限