HDFS备忘

HDFS文件系统

 

一、HDFS设计

    HDFS为hadoop的核心组件,为hadoop底层的文件存储系统。它通常运行在商用硬件集群上,用来存储超大文件、大规模文件。

    1、超大文件

    "超大文件"是指具有数百MB、数G甚至数T大小的文件;HDFS设计为了存储大量“超大文件”。

    2、流式数据访问

    HDFS的文件为“一次写入”、“多次读取”,这种高效的文件访问策略是HDFS的设计核心。被创建和写入的文件,将长时间存储在HDFS中,用来做数据分析计算。通常以流式访问整个文件或者文件的一部分。

    3、商用硬件

    Hadoop不需要运行在专业的昂贵的硬件上。它是设计运行在普通的(廉价)的商用机器上,并构架大规模集群。通常这些硬件都有普遍的故障率,HDFS提供了很多方案来提高文件的可用性。

    4、低时间延迟的数据访问

    HDFS不适合“低延迟”要求的数据访问,例如实时在线的数据访问,要求几毫秒访问延迟,这种场景是不适合HDFS的。HDFS以牺牲数据访问延迟性要求,达到“数据高吞吐量”优先的目标。

    5、大量小文件

    由于Namenode将文件系统的metada内存在内存中,因此文件系统所能存储的文件总数受限于namenode的内存总量。每个文件、目录、Block相关的metadata大概有150个字节,因此,一个Namenode

所能支持的文件个数是有上限的。因此HDFS并不适合存储大量小文件(数KB,数M),因为它们虽然不会消耗大量的磁盘空间,但是却潜在的增加了Namenode的负荷比。

    6、多用户写入,任意修改文件

    HDFS中的文件只有一个writer,而且write操作总是将数据append到文件的末尾。它不支持多个writer同时写入,也不支持任意位置的随机写,因为这是低效的,这归因与HDFS文件存储方式和Block的设计原理。

 

二、HDFS概念

    1、Block

    Block即为数据块,对于磁盘而言,也有block的概念,它是磁盘数据读写的最小单位,一般为512B,这是文件系统提升磁盘读取性能的方式。对于HDFS而言,Block有更多的含义,它比磁盘Block大的多,一般为64M甚至更大(128M,后期版本,默认为256M);一个HDFS文件在存储层面,会被分割成多个blocks片段,每个block作为独立的存储单元(replication)。与其他文件系统不同(包括磁盘存储),一个小于block大小的文件不会占用整个块空间。较大的block,对于Namenode管理文件而言是有益的,也可以有效的提高文件数据的读取性能。不过在Mapreduce应用中,此值还不能设置的过大,因为Map任务通常一次处理一个block数据,如果block过大会导致map的任务个数较少(少于集群节点数量),会在一定程度上影响mapreduce数据并行计算能力,拖慢job的整体运行速度。

 

    HDFS通过将一个文件在物理存储上分割成多个block,并分别将它们分布存储在集群的多个节点上,这种特性可以让HDFS保存一个大小超过本地磁盘容量的超大文件。以Block作为文件的物理存储单位,还大大简化了

存储子系统的设计,简化了存储系统管理;因为一个文件的block大小是固定的(可配置,一旦创建,则不能修改此参数),因此一个节点上能存储多少个block以及某个Block是否可以被放置是显而易见的。

 

    此外,Block这种小尺寸的数据块,可以很方便的replication,从而让HDFS文件的高可用和容错特性的实现更加简单。将每个Block复制到少数几个node上(默认为3),可以确保当某个Block被破坏或者节点软硬件故障时数据不会丢失。如果一个block不可用,系统将会从其他节点读取一个现有的block副本,如果某个Block的副本个数低于配置(3),那么Namenode将会为此block在合适的Node上创建新的副本,以保证Block的个数处于正常水平。

    我们可以通过“hdfs fsck <path>”指令获取有关Block分布的相关细节。

 

    2、Namenode与Datanodes

    HDFS中有两类节点,并以master-slave模式运行,即一个Namenoede和多个Datanodes。其中namenode作为master(角色),主要职责是管理集群的namespace,和协调与namespace变更有关的操作(block复制,rebalance等);它维护着文件系统树以及整棵树内所有的文件和目录。这些信息以两个文件形式持久保存在本地磁盘上:fsimage和Editlog。Namenode也记录着每个文件中所有block所在的数据节点信(blockMapping),blockMapping信息不会持久保存,因为这些信息会在系统启动时(运行时)由Datanodes通过心跳中的blockReport来反馈。

 

    Datanode是文件系统的存储节点,在HDFS架构模型中,它作为slaves存在。它负责存储文件的实际数据--Blocks,并与Namenode注册链接,通过心跳的方式向Namenode发送BlockReport信息(持有的blocks列表);同时Client可以直接与Datanode交互并访问指定名称的block中的数据。

 

    用户Application通过HDFS Client与Namenode和Datanodes交互来访问整个文件系统。HDFS提供了类似于POSIX的文件系统接口,因此用户在使用API接口时无需了解Namenode、Datanode的细节实现。Client在访问文件时,首先与Namenode通信并获取文件所有(或一批)Blocks列表以及它们的位置信息,此后Client与所需要的Block所在的一个Datanode建立链接并读写数据即可。

 

    因为Namenode保存了集群的namespace,是Client与Datanode的调度中心,因此如果Namenode失效,那么整个文件系统将不可用,只有Datanodes是无法重建集群的。Hadoop提供了多种容错方案用来解决Namenode的单点问题:SecondaryNamenode,CheckpointNode,BackupNode,还有更加复杂的HDFS HA架构(Standby Namenode)。它们的核心思想就是将Namenode中的namespace同步的在多个节点上备份,以便在故障时可以通过副本恢复集群状态。

 

 

三、HDFS接口

    1、读取数据

public void read(String path) throws Exception{
	Configuration conf = new Configuration();
	FileSystem fs = FileSystem.get(conf);
	BufferedReader reader = null;
	try{
		FSDataInputStream fsInput = fs.open(new Path(path));
		reader = new BufferedReader(new InputStreamReader(fsInput,"UTF-8"),256);
		String line = null;
		while (true) {
			line = reader.readLine();
			if(line == null) {
				break;
			}
			System.out.println(line);
		}
	}catch (Exception e) {
		e.printStackTrace();
	} finally {
		IOUtils.closeStream(reader);
	}
}

 

    FileSystem#open(path)方法可以用来打开一个文件,此方法返回FSDataInputStream对象,这个类继承了DataInputStream类,同时还实现了Seekable、PositionedReadable接口,它表达了可以从任何位置读取文件。

Seekable接口中seek方法允许跳跃到文件的任何位置作为起点读取数据。不过seek方法相对开销较大,不建议频繁的使用。

 

    2、写入数据

public void create(String path,String file) throws Exception {
	Configuration conf = new Configuration();
	FileSystem fs = FileSystem.get(conf);
	BufferedWriter writer = null;
	try {
		FSDataOutputStream fsOut = fs.create(new Path(path,file),true);
		writer = new BufferedWriter(new OutputStreamWriter(fsOut,"UTF-8"));
		writer.write("Hello,hadoop!");
		writer.newLine();
		writer.write("Hello,HDFS!");
		writer.flush();
	}catch (Exception e) {
		e.printStackTrace();
	} finally {
	   writer.close();
	}
}

 

    通过create方法创建文件,此方法有多个重载版本,可以在创建文件时指定权限、block大小、buffer大小等。创建文件时,如果父路径不存在则会创建,很方便。对于已经创建的文件,可以使用append方法在文件的尾部追加数据(继续写入)。create方法和append方法都会返回FSDataOutputStream对象,它继承自DataOutputStream,并实现了Syncable接口。与FSDataInputStream不同,它不允许通过seek的方式在任意位置写入数据。

 

    此外FileSystem中提供了大量API,可以进行文件的读写、目录操作、文件状态查看等。

 

三、Hadoop IO

    1、数据完整性

    HDFS中的数据都会被可靠的存储,庞大的Hadoop集群中因为磁盘、网络IO的故障或者系统的bug,可能会因此错误而导致文件损坏,hadoop中通过使用Checksum来检测文件数据的完整性。当数据第一次引入系统时计算Checksum,并在数据通过一个不可靠的通道进行传输时再次计算校验和,通过比较Checksum值即可知道数据在传输中是否损坏。如果校验和值不同,我们认为数据已损坏。常用的CheckSUM算法是CRC-32(循环冗余码校验)。

 

    HDFS会在写入数据时计算校验和,并在读取数据时验证校验和。校验和所占的开支很小。

    Datanode负责在验证收到的数据后存储数据极其校验和值,比如从Client接受数据以及在replication期间。正在写数据的Client将数据及其校验和发送到由一系列Datanodes组成的pipeline中,管线中最后一个datanode负责验证校验和。如果Datanode检测到错误,客户端会收到一个ChecksumException,操作将会被重试。

 

    客户端读取数据时,也会验证校验和,将它们与datanode中存储的校验和进行比较。每个Datanode均持久保存了一个用户验证的校验和日志,所以它知道每个数据块的最后一次验证的时间。客户端成功验证一个数据块后,会告诉这个Datanode,datanode由此更新日志,保存这个统计信息对于检测损坏的磁盘很有价值。每个Datanode也会在后台运行一个DataBlockScanner,定期验证此节点上所有的数据,该措施是解决物理存储魅力上损坏的有力措施。

 

    因为HDFS存储着每个block的replica,因此可以通过复制完好的数据block来修复损坏的快,从而得到一个新的、完好的复本。在Client在读操作时,如果检测到错误,则会向Namenode报告已损坏的block以及所在的Datanode,最后才抛出ChecksumException异常。Namenode将这个block标记为“损坏”(metada中),所以并不需要直接与Datanode联系,此后,Namenode会调度block的replication机制,将完好的Block重新再集群中复制(那个损坏的block将会被删除),从而保证了block的replication factor处于期望水平。

 

    可以在读取文件之间,通过FileSystem#setVerifyChecksum(boolean)方法来设定是否启用Checksum校验。

 

    2、压缩

    文件压缩可以减少存储文件所需要的磁盘空间;可以加速数据在网络和磁盘上的传输;当需要处理大量数据时,压缩特性将显得非常重要。Hadoop支持多种压缩算法:DEFLATE、Gzip,bizp2、LZO等。其中前三者Hadoop中已经有JAVA实现,包含在hadoop发布包中。LZO库需要单独下载。其中只有bzip2支持切分。在默认情况下,Hadoop会从运行平台中搜索原生代码库,如果找到就会自动加载并使用。我们可以通过将“hadoop.native.lib”配置项设定为false,来禁用本地库,此时将会使用内置的JAVA代码库(如果有的话)。

 

    所谓切分,就是压缩后的文件可以拆分为多个子文件片段存储,可以将任何子文件片段独立解压。目前只有bzip2算法支持拆分。那么在Mapreduce处理数据时,压缩文件是否支持拆分将是很重要的。例如一个压缩前1G的文件,block大小为64M,那么次文件将会被存储在16个block中;那么每个block将会有一个mapper任务读取。现在经过压缩后大小为1G的文件,存储在16个block中(数据流压缩后,存储HDFS,仍为64M一个Block)。那么一个压缩后的文件将由16个block文件片段组成,如果压缩算法不支持切分,那么将不能对任何一个block单独解压。Mapreduce不会尝试切分那些由不支持切分的压缩文件,那么任何一个mapper都需要额外的解压相应的block之前的所有blocks,才能够解压并读取当前block的数据,这就牺牲了block的本地性。

 

    对于巨大的、没有边界的文件,比如日志文件,可以考虑:

    1) 存储未经压缩的文件。

    2) 使用支持切分的压缩格式,比如bzip2。

    3) 使用SequeueFile,它支持压缩和切分。

    对于大文件而言,不应该使用不支持切分整个文件的压缩格式,否则将会失去数据的本地特性,导致mapreduce应用效率低下。不过对于mapper产生的临时数据以及reducer产生的结果数据,仍然推荐使用压缩,这可以提高数据在mapper与reducer之间的传输性能(mapper结果数据为保存在本地文件,而非HDFS中)。

Hadoop HDFS bug备忘:DN的删除队列与block report的协调引起的数据丢失 现象描述:线上任务出现失败,日志中显示查找计算用的block失败。 现象分析:NN记录了block的所在的DN,但是DN上却没有了这个block;通常,删除过程是先删除NN\DN上的数据,然后再删除磁盘上的数据。 肯定是某种条件,使得NN恢复了block信息,而DN上的确删除了block。经过分析发现,是两个线程的协调,引入这个问题。 问题原因:NN下发删除block命令到DN,DN先删除自 阅读详情

相关推荐

使用C++编程实现Hadoop备忘录功能

在本文中,我们将使用C++编程语言来实现一个简单的Hadoop备忘录功能。用户可以将备忘录内容保存到HDFS中,并通过关键字搜索备忘录。最后,它在备忘录中搜索关键字,并将匹配的备忘录内容输出到控制台。Hadoop备忘录应用的基本思路如下:用户可以通过命令行界面输入备忘录的内容,并将其保存到HDFS中的一个文本文件中。然后,我们将创建两个C++源文件:一个用于将备忘录写入HDFS,另一个用于从HDFS中搜索备忘录。接下来,它创建一个新的备忘录文件,并将备忘录内容写入该文件。最后,关闭文件和HDFS连接。

2301_79326510的博客 221

浅析hadoop写入数据api

对于一般文件,都有满足随机读写的api。而hadoop中的读api很简单用FSDataInputStream类就可以满足一般要求,而hadoop中的写操作却是和普通java操作不一样。 hadoop对于写操作提供了一个类:FSDataOutputStream,这个类重载了很多write方法,用于写入很多类型的数据:比如字节数组,long,int,char等等。像FSDataInputSt

qiuchenl的专栏 8787

MATLAB编程实战:通过SCPI命令高效读取普源示波器数据

本文详细介绍了如何利用MATLAB通过SCPI命令高效读取普源示波器数据,实现自动化测试与数据分析。文章从硬件连接到软件配置,再到核心代码编写与数据解析,提供了完整的实战指南,帮助工程师和科研人员摆脱手动操作,直接从示波器内存中精准读取数据,并利用MATLAB进行FFT频谱分析,大幅提升工作效率。

weixin_29176179的博客 546

OutputStream

IO流的分类\n" + " 如果从类型上分,可以分成字节流和字符流\n" + " \n" + " 字节流\n" + " 字节输出流: OutputStream\n" + " 字节输入流: InputStream\n" + "...

我不是大王强的博客 2万+

Rk3568 百兆以太网RMII模式DTS配置详解

本文详细解析了RK3568芯片在百兆以太网RMII模式下的DTS配置方法,包括时钟树配置、PHY接口模式定义及实际工程中的进阶设置。通过实战案例和调试技巧,帮助开发者快速解决RMII模式下的常见问题,提升工业控制设备的网络稳定性。

weixin_29189377的博客 420

01-SA8155P 冷启动强制进入EDL模式

冷启动EDL模式

静虚待令,有物混成 3089

DataOutputStream 类 和DatainputStream类 的主要方法简单介绍,及代码演示。

DataOutputStream数据输出流 将java基本数据类型写入数据输出流中。并可以通过数据输入流DataInputStream将数据读入。 DataOutputStream类 构造函数: DataOutputStream(OutputStream out);//创建一个将数据写入指定输出流out的数据输出流。 字段摘要: int written;//到目前为止写入数据流的

liuhenghui5201的专栏 4万+

别再手动调波形了!用STM32G474的HRTIM+DAC生成精密锯齿波,附完整CubeMX配置

本文详细介绍了如何利用STM32G474的高分辨率定时器(HRTIM)和数模转换器(DAC)协同工作,实现高精度锯齿波生成。通过CubeMX配置指南、关键寄存器计算和实践技巧,帮助开发者快速掌握全硬件实现的波形生成方案,显著提升嵌入式系统的波形控制精度和响应速度。

weixin_28716769的博客 246

FSDataOutputStream实现追加写

在用Hadoopapi时,会遇见一个情况,每次都会覆盖原来的内容 FileSystem fs=getFs(); FSDataOutputStream fSDataOutputStream= fs.create(new Path("/user/lf_by_pro/zba_dwa.db/zhanggf/a.txt")); fSDataOutputS...

zhanggf的博客 4402

手把手教你用Isaac Sim 8打造逼真光影效果:参数设置与场景应用

本文详细介绍了如何使用Isaac Sim 8打造逼真光影效果,涵盖基础参数设置、高级材质交互、专业级灯光造型技法以及复杂场景的灯光布局策略。通过实战案例和参数调优技巧,帮助用户提升虚拟场景的视觉表现,适用于数字孪生、虚拟仿真和影视特效等领域。

weixin_30836759的博客 80

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。

sinat_33909696的博客 2465

hdfs oiv 转换备忘

hdfs -oiv -i xxx -o xxx -p XML 如果转换成XML文件,一定要加上 -p XML且 XML需要大写。 ( hdfs oev不需要)

金戈铁马 275

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

HDFS常用命令[备忘]

【HDFS常用命令】 一、appendToFile:将一个或多个目标文件append到hdfs文件中,目标文件可以为本地文件或者stdin。     使用方式:hdfs dfs -appendToFile &lt;localFile or -&gt; &lt;hdfs-path or hdfs URL&gt;     1) ./hdfs dfs -appendToFile /data.t...

深入一点 1223

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 6954

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HDFS常用代码片段备忘

FileSystem fs; DistributedFileSystem dfs;   得到FileSystem:    fs = new Path("/").getFileSystem(conf); RPC调用Namenode方法:    fs.getClient().namenode.XXXXX(); 得到某个文件corrupt的数据块:       LocatedBlocks l...

itm的专栏 225

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

关于HDFS数据流的一点备忘

以前工作的时候曾经有个想法,就是将集群中存储的文件做一次遍历,把没有压缩的压缩掉!可一直没有时间实现,今天闲来无事,研究了一下,以下代码应该是核心了,也与大家一起分享一下: 从这个例子扩展,可以遍历HDFS将需要压缩的文件用指定的压缩格式进行压缩。 import java.io.BufferedInputStream; import java.net.URI;

1411

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Elasticsearch和HDFS 容错机制 备忘

1、Elasticsearch 横向扩容以及容错机制http://www.bubuko.com/infodetail-2499254.html 2、HDFS容错机制详解https://www.cnblogs.com/zhangyinhua/p/7681146.html?utm_source=debugrun&amp;utm_medium=referral...

weixin_34195546的博客 207

Hadoop相关备忘

hadoop 相关备忘http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

老胡的那点破事 349

hdfs安装和配置过程以及hadfs的工作原理(备忘)

在老师的帮助下,折腾了大半天终于把hdfs部署到ubuntu上去了。在这里记录一下各步骤备忘: 在讲步骤之前,先总结一下自己对hadoop的工作你原理的理解: 1.这个分布式系统是通过一个namenode(运行在master上的一个进程)来作为master来统筹管理多个作为slavers的datanode(运行在slavers上的一个进程); 2.master将各slavers的实际

SprintfWater的专栏 1万+

Navi大数据处理终极指南:如何快速掌握Hadoop、Spark等命令行工具

在当今数据驱动的时代,大数据处理工具如Hadoop、Spark、Hive等已成为数据工程师和分析师的必备技能。然而,这些工具复杂的命令行参数常常让人头疼。今天,我将为您介绍一个革命性的命令行交互式备忘单工具——Navi,它能帮助您快速掌握大数据处理工具的命令行操作,让您的工作效率提升数倍! Navi是一个强大的交互式命令行备忘单工具,专为简化复杂命令的记忆和执行而设计。无论您是刚接触大数据处理的

gitblog_00866的博客 486
上一篇: YARN指令[官网整理]
下一篇: ServiceLoader加载基于配置的类服务
iteye_19607
博客等级 码龄8年 34粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值