重庆是哪个省划分出来的运城seo招聘

news/2025/9/24 11:00:40/文章来源:
重庆是哪个省划分出来的,运城seo招聘,实际讲解做钓鱼网站,简单的ps网页设计教程1、HDFS简介 HDFS#xff08;Hadoop Distributed File System#xff09;是Hadoop项目的核心子项目#xff0c;是分布式计算中数据存储管理的基础#xff0c;是基于流数据模式访问和处理超大文件的需求而开发的#xff0c;可以运行于廉价的商用服务器上。它所具有的高容错… 1、HDFS简介   HDFSHadoop Distributed File System是Hadoop项目的核心子项目是分布式计算中数据存储管理的基础是基于流数据模式访问和处理超大文件的需求而开发的可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储为超大数据集Large Data Set的应用处理带来了很多便利。   Hadoop整合了众多文件系统在其中有一个综合性的文件系统抽象它提供了文件系统实现的各类接口HDFS只是这个抽象文件系统的一个实例。提供了一个高层的文件系统抽象类org.apache.hadoop.fs.FileSystem这个抽象类展示了一个分布式文件系统并有几个具体实现如下表1-1所示。 表1-1 Hadoop的文件系统 文件系统 URI方案 Java实现 org.apache.hadoop 定义 Local file fs.LocalFileSystem 支持有客户端校验和本地文件系统。带有校验和的本地系统文件在fs.RawLocalFileSystem中实现。 HDFS hdfs hdfs.DistributionFileSystem Hadoop的分布式文件系统。 HFTP hftp hdfs.HftpFileSystem 支持通过HTTP方式以只读的方式访问HDFSdistcp经常用在不同的HDFS集群间复制数据。 HSFTP hsftp hdfs.HsftpFileSystem 支持通过HTTPS方式以只读的方式访问HDFS。 HAR har fs.HarFileSystem 构建在Hadoop文件系统之上对文件进行归档。Hadoop归档文件主要用来减少NameNode的内存使用。 KFS kfs fs.kfs.KosmosFileSystem Cloudstore其前身是Kosmos文件系统文件系统是类似于HDFS和Google的GFS文件系统使用C编写。 FTP ftp fs.ftp.FtpFileSystem 由FTP服务器支持的文件系统。 S3本地 s3n fs.s3native.NativeS3FileSystem 基于Amazon S3的文件系统。 S3基于块 s3  fs.s3.NativeS3FileSystem 基于Amazon S3的文件系统以块格式存储解决了S3的5GB文件大小的限制。   Hadoop提供了许多文件系统的接口用户可以使用URI方案选取合适的文件系统来实现交互。 2、HDFS基础概念 2.1 数据块block HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块。 和普通文件系统相同的是HDFS中的文件是被分成64M一块的数据块存储的。 不同于普通文件系统的是HDFS中如果一个文件小于一个数据块的大小并不占用整个数据块存储空间。 2.2 NameNode和DataNode   HDFS体系结构中有两类节点一类是NameNode又叫元数据节点另一类是DataNode又叫数据节点。这两类节点分别承担Master和Worker具体任务的执行节点。   1元数据节点用来管理文件系统的命名空间 其将所有的文件和文件夹的元数据保存在一个文件系统树中。 这些信息也会在硬盘上保存成以下文件命名空间镜像(namespace image)及修改日志(edit log) 其还保存了一个文件包括哪些数据块分布在哪些数据节点上。然而这些信息并不存储在硬盘上而是在系统启动的时候从数据节点收集而成的。   2数据节点是文件系统中真正存储数据的地方。 客户端(client)或者元数据信息(namenode)可以向数据节点请求写入或者读出数据块。 其周期性的向元数据节点回报其存储的数据块信息。   3从元数据节点secondary namenode 从元数据节点并不是元数据节点出现问题时候的备用节点它和元数据节点负责不同的事情。 其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并以防日志文件过大。这点在下面会相信叙述。 合并过后的命名空间镜像文件也在从元数据节点保存了一份以防元数据节点失败的时候可以恢复。 2.3 元数据节点目录结构          VERSION文件是java properties文件保存了HDFS的版本号。 layoutVersion是一个负整数保存了HDFS的持续化在硬盘上的数据结构的格式版本号。 namespaceID是文件系统的唯一标识符是在文件系统初次格式化时生成的。 cTime此处为0 storageType表示此文件夹中保存的是元数据节点的数据结构。   namespaceID1232737062 cTime0 storageTypeNAME_NODE layoutVersion-18   2.4 数据节点的目录结构      数据节点的VERSION文件格式如下   namespaceID1232737062 storageIDDS-1640411682-127.0.1.1-50010-1254997319480 cTime0 storageTypeDATA_NODE layoutVersion-18   blk_id保存的是HDFS的数据块其中保存了具体的二进制数据。 blk_id.meta保存的是数据块的属性信息版本信息类型信息和checksum 当一个目录中的数据块到达一定数量的时候则创建子文件夹来保存数据块及数据块属性信息。 2.5 文件系统命名空间映像文件及修改日志 当文件系统客户端(client)进行写操作时首先把它记录在修改日志中(edit log) 元数据节点在内存中保存了文件系统的元数据信息。在记录了修改日志后元数据节点则修改内存中的数据结构。 每次的写操作成功之前修改日志都会同步(sync)到文件系统。 fsimage文件也即命名空间映像文件是内存中的元数据在硬盘上的checkpoint它是一种序列化的格式并不能够在硬盘上直接修改。 同数据的机制相似当元数据节点失败时则最新checkpoint的元数据信息从fsimage加载到内存中然后逐一重新执行修改日志中的操作。 从元数据节点就是用来帮助元数据节点将内存中的元数据信息checkpoint到硬盘上的 checkpoint的过程如下 从元数据节点通知元数据节点生成新的日志文件以后的日志都写到新的日志文件中。 从元数据节点用http get从元数据节点获得fsimage文件及旧的日志文件。 从元数据节点将fsimage文件加载到内存中并执行日志文件中的操作然后生成新的fsimage文件。 从元数据节点奖新的fsimage文件用http post传回元数据节点 元数据节点可以将旧的fsimage文件及旧的日志文件换为新的fsimage文件和新的日志文件(第一步生成的)然后更新fstime文件写入此次checkpoint的时间。 这样元数据节点中的fsimage文件保存了最新的checkpoint的元数据信息日志文件也重新开始不会变的很大了。     3、HDFS体系结构   HDFS是一个主/从Mater/Slave体系结构从最终用户的角度来看它就像传统的文件系统一样可以通过目录路径对文件执行CRUDCreate、Read、Update和Delete操作。但由于分布式存储的性质HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据DataNode存储实际的数据。客户端通过同NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的元数据而真正的文件I/O操作是直接和DataNode进行交互的。   图3.1 HDFS总体结构示意图     1NameNode、DataNode和Client NameNode可以看作是分布式文件系统中的管理者主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。 DataNode是文件存储的基本单元它将Block存储在本地文件系统中保存了Block的Meta-data同时周期性地将所有存在的Block信息发送给NameNode。 Client就是需要获取分布式文件系统文件的应用程序。   2文件写入 Client向NameNode发起文件写入的请求。 NameNode根据文件大小和文件块配置情况返回给Client它所管理部分DataNode的信息。 Client将文件划分为多个Block根据DataNode的地址信息按顺序写入到每一个DataNode块中。   3文件读取 Client向NameNode发起文件读取的请求。 NameNode返回文件存储的DataNode的信息。 Client读取文件信息。     HDFS典型的部署是在一个专门的机器上运行NameNode集群中的其他机器各运行一个DataNode也可以在运行NameNode的机器上同时运行DataNode或者一台机器上运行多个DataNode。一个集群只有一个NameNode的设计大大简化了系统架构。 4、HDFS的优缺点 4.1 HDFS的优点   1处理超大文件   这里的超大文件通常是指百MB、设置数百TB大小的文件。目前在实际应用中HDFS已经能用来存储管理PB级的数据了。   2流式的访问数据   HDFS的设计建立在更多地响应一次写入、多次读写任务的基础上。这意味着一个数据集一旦由数据源生成就会被复制分发到不同的存储节点中然后响应各种各样的数据分析任务请求。在多数情况下分析任务都会涉及数据集中的大部分数据也就是说对HDFS来说请求读取整个数据集要比读取一条记录更加高效。   3运行于廉价的商用机器集群上   Hadoop设计对硬件需求比较低只须运行在低廉的商用硬件集群上而无需昂贵的高可用性机器上。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高。这就要求设计HDFS时要充分考虑数据的可靠性安全性及高可用性。 4.2 HDFS的缺点   1不适合低延迟数据访问   如果要处理一些用户要求时间比较短的低延迟应用请求则HDFS不适合。HDFS是为了处理大型数据集分析任务的主要是为达到高的数据吞吐量而设计的这就可能要求以高延迟作为代价。   改进策略对于那些有低延时要求的应用程序HBase是一个更好的选择。通过上层数据管理项目来尽可能地弥补这个不足。在性能上有了很大的提升它的口号就是goes real time。使用缓存或多master设计可以降低client的数据请求压力以减少延时。还有就是对HDFS系统内部的修改这就得权衡大吞吐量与低延时了HDFS不是万能的银弹。   2无法高效存储大量小文件   因为Namenode把文件系统的元数据放置在内存中所以文件系统所能容纳的文件数目是由Namenode的内存大小来决定。一般来说每一个文件、文件夹和Block需要占据150字节左右的空间所以如果你有100万个文件每一个占据一个Block你就至少需要300MB内存。当前来说数百万的文件还是可行的当扩展到数十亿时对于当前的硬件水平来说就没法实现了。还有一个问题就是因为Map task的数量是由splits来决定的所以用MR处理大量的小文件时就会产生过多的Maptask线程管理开销将会增加作业时间。举个例子处理10000M的文件若每个split为1M那就会有10000个Maptasks会有很大的线程开销若每个split为100M则只有100个Maptasks每个Maptask将会有更多的事情做而线程的管理开销也将减小很多。   改进策略要想让HDFS能处理好小文件有不少方法。 利用SequenceFile、MapFile、Har等方式归档小文件这个方法的原理就是把小文件归档起来管理HBase就是基于此的。对于这种方法如果想找回原来的小文件内容那就必须得知道与归档文件的映射关系。 横向扩展一个Hadoop集群能管理的小文件有限那就把几个Hadoop集群拖在一个虚拟服务器后面形成一个大的Hadoop集群。google也是这么干过的。 多Master设计这个作用显而易见了。正在研发中的GFS II也要改为分布式多Master设计还支持Master的Failover而且Block大小改为1M有意要调优处理小文件啊。 附带个Alibaba DFS的设计也是多Master设计它把Metadata的映射存储和管理分开了由多个Metadata存储节点和一个查询Master节点组成。   3不支持多用户写入及任意修改文件   在HDFS的一个文件中只有一个写入者而且写操作只能在文件末尾完成即只能执行追加操作。目前HDFS还不支持多个用户对同一文件的写操作以及在文件任意位置进行修改。 5、HDFS常用操作   先说一下hadoop fs 和hadoop dfs的区别看两本Hadoop书上各有用到但效果一样求证与网络发现下面一解释比较中肯。   粗略的讲fs是个比较抽象的层面在分布式环境中fs就是dfs但在本地环境中fs是local file system这个时候dfs就不能用。 5.1 文件操作   1列出HDFS文件   此处为你展示如何通过-ls命令列出HDFS下的文件   hadoop fs -ls     执行结果如图5-1-1所示。在这里需要注意在HDFS中未带参数的-ls命名没有返回任何值它默认返回HDFS的home目录下的内容。在HDFS中没有当前目录这样一个概念也没有cd这个命令。      图5-1-1 列出HDFS文件   2列出HDFS目录下某个文档中的文件   此处为你展示如何通过-ls 文件名命令浏览HDFS下名为input的文档中文件   hadoop fs –ls input     执行结果如图5-1-2所示。      图5-1-2 列出HDFS下名为input的文档下的文件   3上传文件到HDFS   此处为你展示如何通过-put 文件1 文件2命令将Master.Hadoop机器下的/home/hadoop目录下的file文件上传到HDFS上并重命名为test   hadoop fs –put ~/file test     执行结果如图5-1-3所示。在执行-put时只有两种可能即是执行成功和执行失败。在上传文件时文件首先复制到DataNode上。只有所有的DataNode都成功接收完数据文件上传才是成功的。其他情况如文件上传终端等对HDFS来说都是做了无用功。      图5-1-3 成功上传file到HDFS   4将HDFS中文件复制到本地系统中   此处为你展示如何通过-get 文件1 文件2命令将HDFS中的output文件复制到本地系统并命名为getout。   hadoop fs –get output getout     执行结果如图5-1-4所示。      图5-1-4 成功将HDFS中output文件复制到本地系统   备注与-put命令一样-get操作既可以操作文件也可以操作目录。   5删除HDFS下的文档   此处为你展示如何通过-rmr 文件命令删除HDFS下名为newoutput的文档   hadoop fs –rmr newoutput     执行结果如图5-1-5所示。      图5-1-5 成功删除HDFS下的newoutput文档   6查看HDFS下某个文件   此处为你展示如何通过-cat 文件命令查看HDFS下input文件中内容   hadoop fs -cat input/*     执行结果如图5-1-6所示。      图5-1-6 HDFS下input文件的内容   hadoop fs的命令远不止这些本小节介绍的命令已可以在HDFS上完成大多数常规操作。对于其他操作可以通过-help commandName命令所列出的清单来进一步学习与探索。 5.2 管理与更新   1报告HDFS的基本统计情况   此处为你展示通过-report命令如何查看HDFS的基本统计信息   hadoop dfsadmin -report     执行结果如图5-2-1所示。      图5-2-1 HDFS基本统计信息   2退出安全模式   NameNode在启动时会自动进入安全模式。安全模式是NameNode的一种状态在这个阶段文件系统不允许有任何修改。安全模式的目的是在系统启动时检查各个DataNode上数据块的有效性同时根据策略对数据块进行必要的复制或删除当数据块最小百分比数满足的最小副本数条件时会自动退出安全模式。   系统显示Name node is in safe mode说明系统正处于安全模式这时只需要等待17秒即可也可以通过下面的命令退出安全模式   hadoop dfsadmin –safemode enter     成功退出安全模式结果如图5-2-2所示。      图5-2-2 成功退出安全模式   3进入安全模式   在必要情况下可以通过以下命令把HDFS置于安全模式   hadoop dfsadmin –safemode enter     执行结果如图5-2-3所示。      图5-2-3 进入HDFS安全模式   4添加节点   可扩展性是HDFS的一个重要特性向HDFS集群中添加节点是很容易实现的。添加一个新的DataNode节点首先在新加节点上安装好Hadoop要和NameNode使用相同的配置可以直接从NameNode复制修改/usr/hadoop/conf/master文件加入NameNode主机名。然后在NameNode节点上修改/usr/hadoop/conf/slaves文件加入新节点主机名再建立到新加点无密码的SSH连接运行启动命令   start-all.sh     5负载均衡   HDFS的数据在各个DataNode中的分布肯能很不均匀尤其是在DataNode节点出现故障或新增DataNode节点时。新增数据块时NameNode对DataNode节点的选择策略也有可能导致数据块分布的不均匀。用户可以使用命令重新平衡DataNode上的数据块的分布   start-balancer.sh     执行命令前DataNode节点上数据分布情况如图5-2-4所示。          负载均衡完毕后DataNode节点上数据的分布情况如图5-2-5所示。          执行负载均衡命令如图5-2-6所示。        6、HDFS API详解   Hadoop中关于文件操作类基本上全部是在org.apache.hadoop.fs包中这些API能够支持的操作包含打开文件读写文件删除文件等。 Hadoop类库中最终面向用户提供的接口类是FileSystem该类是个抽象类只能通过来类的get方法得到具体类。get方法存在几个重载版本常用的是这个   static FileSystem get(Configuration conf);     该类封装了几乎所有的文件操作例如mkdirdelete等。综上基本上可以得出操作文件的程序库框架   operator() {     得到Configuration对象     得到FileSystem对象     进行文件操作 }   6.1 上传本地文件   通过FileSystem.copyFromLocalFilePath srcPatch dst可将本地文件上传到HDFS的制定位置上其中src和dst均为文件的完整路径。具体事例如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class CopyFile {     public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 //本地文件         Path src new Path(D:\\HebutWinOS);         //HDFS为止         Path dst new Path(/);                 hdfs.copyFromLocalFile(src, dst);         System.out.println(Upload toconf.get(fs.default.name));                 FileStatus files[]hdfs.listStatus(dst);         for(FileStatus file:files){             System.out.println(file.getPath());         }     } }     运行结果可以通过控制台、项目浏览器和SecureCRT查看如图6-1-1、图6-1-2、图6-1-3所示。   1控制台结果      图6-1-1 运行结果1   2项目浏览器      图6-1-2 运行结果2   3SecureCRT结果      图6-1-3 运行结果3 6.2 创建HDFS文件   通过FileSystem.createPath f可在HDFS上创建文件其中f为文件的完整路径。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class CreateFile {       public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 byte[] buffhello hadoop world!\n.getBytes();                 Path dfsnew Path(/test);                 FSDataOutputStream outputStreamhdfs.create(dfs);         outputStream.write(buff,0,buff.length);             } }     运行结果如图6-2-1和图6-2-2所示。   1项目浏览器      图6-2-1 运行结果1   2SecureCRT结果      图6-2-2 运行结果2 6.3 创建HDFS目录   通过FileSystem.mkdirsPath f可在HDFS上创建文件夹其中f为文件夹的完整路径。具体实现如下   package com.hebut.dir;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class CreateDir {       public static void main(String[] args) throws Exception{         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 Path dfsnew Path(/TestDir);                 hdfs.mkdirs(dfs);       } }     运行结果如图6-3-1和图6-3-2所示。   1项目浏览器      图6-3-1 运行结果1   2SecureCRT结果      图6-3-2 运行结果2 6.4 重命名HDFS文件   通过FileSystem.renamePath srcPath dst可为指定的HDFS文件重命名其中src和dst均为文件的完整路径。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class Rename{     public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);               Path frpahtnew Path(/test);    //旧的文件名         Path topathnew Path(/test1);    //新的文件名                 boolean isRenamehdfs.rename(frpaht, topath);                 String resultisRename?成功:失败;         System.out.println(文件重命名结果为result);             } }     运行结果如图6-4-1和图6-4-2所示。   1项目浏览器      图6-4-1 运行结果1     2SecureCRT结果      图6-4-2 运行结果2 6.5 删除HDFS上的文件   通过FileSystem.deletePath fBoolean recursive可删除指定的HDFS文件其中f为需要删除文件的完整路径recuresive用来确定是否进行递归删除。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class DeleteFile {       public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 Path delefnew Path(/test1);                 boolean isDeletedhdfs.delete(delef,false);         //递归删除         //boolean isDeletedhdfs.delete(delef,true);         System.out.println(Delete?isDeleted);     } }     运行结果如图6-5-1和图6-5-2所示。   1控制台结果      图6-5-1 运行结果1     2项目浏览器    图6-5-2 运行结果2 6.6 删除HDFS上的目录   同删除文件代码一样只是换成删除目录路径即可如果目录下有文件要进行递归删除。 6.7 查看某个HDFS文件是否存在   通过FileSystem.existsPath f可查看指定HDFS文件是否存在其中f为文件的完整路径。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class CheckFile {     public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);         Path findfnew Path(/test1);         boolean isExistshdfs.exists(findf);         System.out.println(Exist?isExists);     } }     运行结果如图6-7-1和图6-7-2所示。   1控制台结果      图6-7-1 运行结果1   2项目浏览器      图6-7-2 运行结果2 6.8 查看HDFS文件的最后修改时间   通过FileSystem.getModificationTime()可查看指定HDFS文件的修改时间。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class GetLTime {       public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 Path fpath new Path(/user/hadoop/test/file1.txt);                 FileStatus fileStatushdfs.getFileStatus(fpath);         long modiTimefileStatus.getModificationTime();                 System.out.println(file1.txt的修改时间是modiTime);     } }     运行结果如图6-8-1所示。      图6-8-1 控制台结果 6.9 读取HDFS某个目录下的所有文件   通过FileStatus.getPath可查看指定HDFS中某个目录下所有文件。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class ListAllFile {     public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);                 Path listf new Path(/user/hadoop/test);                 FileStatus stats[]hdfs.listStatus(listf);         for(int i 0; i stats.length; i)      {        System.out.println(stats[i].getPath().toString());      }         hdfs.close();     } }     运行结果如图6-9-1和图6-9-2所示。   1控制台结果      图6-9-1 运行结果1     2项目浏览器      图6-9-2 运行结果2 6.10 查找某个文件在HDFS集群的位置   通过FileSystem.getFileBlockLocationFileStatus filelong startlong len可查找指定文件在HDFS集群上的位置其中file为文件的完整路径start和len来标识查找文件的路径。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;   public class FileLoc {     public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem hdfsFileSystem.get(conf);         Path fpathnew Path(/user/hadoop/cygwin);                 FileStatus filestatus hdfs.getFileStatus(fpath);         BlockLocation[] blkLocations hdfs.getFileBlockLocations(filestatus, 0, filestatus.getLen());           int blockLen blkLocations.length;         for(int i0;iblockLen;i){             String[] hosts blkLocations[i].getHosts();             System.out.println(block_i_location:hosts[0]);         }     } }     运行结果如图6-10-1和6.10.2所示。   1控制台结果      图6-10-1 运行结果1   2项目浏览器      图6-10-2 运行结果2 6.11 获取HDFS集群上所有节点名称信息   通过DatanodeInfo.getHostName可获取HDFS集群上的所有节点名称。具体实现如下   package com.hebut.file;   import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.hdfs.DistributedFileSystem; import org.apache.hadoop.hdfs.protocol.DatanodeInfo;   public class GetList {       public static void main(String[] args) throws Exception {         Configuration confnew Configuration();         FileSystem fsFileSystem.get(conf);                 DistributedFileSystem hdfs (DistributedFileSystem)fs;         DatanodeInfo[] dataNodeStats hdfs.getDataNodeStats();                 for(int i0;idataNodeStats.length;i){             System.out.println(DataNode_i_Name:dataNodeStats[i].getHostName());         }     } }     运行结果如图6-11-1所示。      图6-11-1 控制台结果 7、HDFS的读写数据流 7.1 文件的读取剖析        文件读取的过程如下   1解释一 客户端(client)用FileSystem的open()函数打开文件。 DistributedFileSystem用RPC调用元数据节点得到文件的数据块信息。 对于每一个数据块元数据节点返回保存数据块的数据节点的地址。 DistributedFileSystem返回FSDataInputStream给客户端用来读取数据。 客户端调用stream的read()函数开始读取数据。 DFSInputStream连接保存此文件第一个数据块的最近的数据节点。 Data从数据节点读到客户端(client)。 当此数据块读取完毕时DFSInputStream关闭和此数据节点的连接然后连接此文件下一个数据块的最近的数据节点。 当客户端读取完毕数据的时候调用FSDataInputStream的close函数。 在读取数据的过程中如果客户端在与数据节点通信出现错误则尝试连接包含此数据块的下一个数据节点。 失败的数据节点将被记录以后不再连接。   2解释二 使用HDFS提供的客户端开发库向远程的Namenode发起RPC请求 Namenode会视情况返回文件的部分或者全部block列表对于每个blockNamenode都会返回有该block拷贝的datanode地址 客户端开发库会选取离客户端最接近的datanode来读取block 读取完当前block的数据后关闭与当前的datanode连接并为读取下一个block寻找最佳的datanode 当读完列表的block后且文件读取还没有结束客户端开发库会继续向Namenode获取下一批的block列表。 读取完一个block都会进行checksum验证如果读取datanode时出现错误客户端会通知Namenode然后再从下一个拥有该block拷贝的datanode继续读。 7.2 文件的写入剖析        写入文件的过程比读取较为复杂   1解释一 客户端调用create()来创建文件 DistributedFileSystem用RPC调用元数据节点在文件系统的命名空间中创建一个新的文件。 元数据节点首先确定文件原来不存在并且客户端有创建文件的权限然后创建新文件。 DistributedFileSystem返回DFSOutputStream客户端用于写数据。 客户端开始写入数据DFSOutputStream将数据分成块写入data queue。 Data queue由Data Streamer读取并通知元数据节点分配数据节点用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。 Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。 DFSOutputStream为发出去的数据块保存了ack queue等待pipeline中的数据节点告知数据已经写入成功。 如果数据节点在写入的过程中失败 关闭pipeline将ack queue中的数据块放入data queue的开始。 当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示则错误节点重启后能够察觉其数据块是过时的会被删除。 失败的数据节点从pipeline中移除另外的数据块则写入pipeline中的另外两个数据节点。 元数据节点则被通知此数据块是复制块数不足将来会再创建第三份备份。 当客户端结束写入数据则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点并等待ack queue返回成功。最后通知元数据节点写入完毕。   2解释二 使用HDFS提供的客户端开发库向远程的Namenode发起RPC请求 Namenode会检查要创建的文件是否已经存在创建者是否有权限进行操作成功则会为文件创建一个记录否则会让客户端抛出异常 当客户端开始写入文件的时候开发库会将文件切分成多个packets并在内部以data queue的形式管理这些packets并向Namenode申请新的blocks获取用来存储replicas的合适的datanodes列表列表的大小根据在Namenode中对replication的设置而定。 开始以pipeline管道的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode该datanode把该packet存储之后再将其传递给在此pipeline中的下一个datanode直到最后一个datanode这种写数据的方式呈流水线的形式。 最后一个datanode成功存储之后会返回一个ack packet在pipeline里传递至客户端在客户端的开发库内部维护着ack queue成功收到datanode返回的ack packet后会从ack queue移除相应的packet。 如果传输过程中有某个datanode出现了故障那么当前的pipeline会被关闭出现故障的datanode会从当前的pipeline中移除剩余的block会继续剩下的datanode中继续以pipeline的形式传输同时Namenode会分配一个新的datanode保持replicas设定的数量。     文章下载地址http://files.cnblogs.com/xia520pi/HadoopCluster_Vol.8.rar 转载于:https://www.cnblogs.com/smileallen/p/3391506.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/915601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

橱柜企业网站模板wordpress搭建文件下载

Mitchell Hashimoto 是一名开源软件工程师。由他托管到 GitHub 上的 开源项目 Vagrant,是一个用于创建和部署虚拟化开发环境的工具。近日,Mitchell撰文讲述了在开发 Vagrant 的过程中学到的有关开源软件开发的一些心得。 以下为原文文章: 把 …

新手项目经理如何选工具?2025年这5款上手快、不复杂的项目管理软件适合你

刚接手项目管理任务?选择一款简单高效的工具能让你快速进入角色。2025年最值得新手项目经理关注的5款软件——禅道、Trello、Asana、ClickUp和Notion,它们以直观界面和核心功能设计脱颖而出:禅道满足全流程管控需求…

用DiskGenius重新分区,检测出U盘虚标容量。

​ U盘虚标容量: 我在PDD买了一个32GB的U盘,我重新分区了一下,发现竟然只有10GB可用,20GB容量虚标。 我把32GB分了6个分区,每个分区5GB,最后只保留下来2个分区。检测U盘是否虚标的方法: 可以用Windows自带的磁盘…

2025低空经济时空信息平台

随着低空经济迈入“基建与产业融合”新阶段,时空信息平台作为低空基础设施的“神经中枢”,正通过架构创新与数据融合技术重塑产业生态。本文将深度解析其核心架构、关键技术及落地路径,为行业提供前瞻性参考。一、战…

linux gcc attribute

//函数前面使用这个扩展,表示该函数会被经常调用到,在编译链接时要对其优化,或说是将它和其他同样热(hot)的函数放到一块,这样有利于缓存的存取。 __attribute__((hot))//函数前面使用这个扩展,表示该函数比较冷门…

那个…以后拍证件照,可能真不用花钱了

以后,证件照不要花钱了。​ 说真的,每次一提到“拍证件照”,我就头大。 不知道你们是不是也一样,要么是临时要用,急急忙忙找不到地方;要么就是特地花了一下午,结果拿到一张丑得自己都想报警的照片,还花了一百来…

网站开发后台需要哪些技术wordpress项目导出

Matlab字符串转换及数值格式转换字符串转换函数abs 字符串到ASCII转换dec2hex 十进制数到十六进制字符串转换fprintf 把格式化的文本写到文件中或显示屏上hex2dec 十六进制字符串转换成十进制数hex2num 十六进制字符串转换成IEEE浮点数int2str 整数转换成字符串lower 字符串转换…

想制作自己的网站吗免费搭建个人服务器

传统新式何月なんがつ何時なんじ何分なんぶん何秒なんびょういち一月いちがつ1時いちじ1分いっぷん1秒いちびょうに二月にがつ2時にじ2分にふん2秒にびょうさん三月さんがつ3時さんじ&#xff1…

网站做推广需要到工信部备案吗软件项目管理项目计划书

mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一: mysql CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 回到上一篇文章的问题:假设有两个借款…

CF2147G

CF2147G 困难数论题好窝心。 本文参考了官方题解。 假设 \(\gcd(a,m)=1\) 且 \(a\not=1\) 的情况。 序列 \(b\) 的形式是 \(a^{a^N}\),要使得后面的 \(b_n=1 \bmod m\),\(ord_{m}(a)|a^N\),\(N\) 是一个极大的数。 那…

全栈开发者效率工具图谱:从IDE到云服务的最优组合 - 指南

全栈开发者效率工具图谱:从IDE到云服务的最优组合 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

皇牌空战7豪华版DLC补丁

皇牌空战7豪华版DLC补丁,有人给我的。说要花钱买,买什么。开源,共享。 皇牌空战7豪华版DLC补丁.zip

三亚做网站多少钱阿里巴巴国际站怎么做网站模版

【README】 本文记录了flink读取不同数据源的编码方式&#xff0c;数据源包括&#xff1b; 集合&#xff08;元素列表&#xff09;&#xff1b;文件kafka&#xff1b;自定义数据源&#xff1b; 本文使用的flink为 1.14.4 版本&#xff1b;maven依赖如下&#xff1a; <dep…

遥感影像处理利器:PCL Geomatica 2018 功能与安装指南

软件介绍 PCL Geomatica 2018(通常指PCI Geomatica 2018)是一款功能强大的地球观测数据分析专业软件,集成了遥感影像处理、专业雷达数据分析、GIS空间分析、制图及桌面数字摄影测量系统。它支持最新的卫星和航空传感…

EaseUS Partition Master 13.8 技术员版功能介绍与安装教程

软件介绍 EaseUS Partition Master 易我分区大师 13.8 技术员版是一款专业的磁盘分区管理软件,适用于Windows系统及服务器环境。该版本支持机械硬盘、固态硬盘、U盘、RAID阵列等多种存储设备,提供无损调整分区大小、…

使用 Ansible 批量完成 CentOS 7 操作系统基础配置

使用 Ansible 批量完成 CentOS 7 操作系统基础配置1. 服务器列表IP 内存(GB) CPU核数 磁盘 操作系统 CPU 架构 角色10.0.0.13 8 1 500GB CentOS 7.9.2009 x86_64 Ansible 管理机+受控机10.0.0.14 8 1 500GB CentOS 7…

BeanUtils中的copyProperties方法使用和分析

BeanUtils.copyProperties 这个方法常用来对象映射,以减去繁琐的get set过程 copyProperties(源对象,目标对象, 可编辑的类,可以忽略的属性) 第三个我们需要看一下,他的源码是这样写的 Class<?> actualEdi…

VUE + Nginx + Traefik 项目的发布与反向代理

VUE + Nginx + Traefik 项目的发布与反向代理end.