首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

Android开发学习笔记:我的第一个Android程序--HelloWorld

对编程的人来说,HelloWorld是再熟悉不过的了,它是学开发语言入门的第一个程序,我现在使用Eclipse ADT插件,创建我的一个Android的程序,步骤如下: 1.启动Eclipse,选择File--New弹出下面的对话框 2.在弹出的对话框中选择“Android Project”弹出下面的对话框 在Project name中输入Android项目名称,这里我输出的是HelloWorld,输入项目名之后,Build Target下面的Create Activity 相应的生成HelloWorldActivity,在Build Target中选择你使用的Android SDK版本,这里我选择的是 Android2.3.3.在Application name中输入程序的名称,这里我输入HelloWorld。在Package name中输入包名称,我输入的是下面的包名:com.android.helloworld.activity。 3.单击Finish,完成Android项目的创建,HelloWorld项目在Eclipse中的结构图如下: 4.右键单击HelloWorld项目里面的HelloWorldActivity.java,在弹出菜单选择“Run as-> “Android Application”程序在Android模拟器上运行的结果如下: 附加内容:Android应用程序结构(以步骤3的结构图为例) 目录或文件名称 说明 HelloWorld 项目名 src 源文件文件夹 com.android.helloworld.activity 包名称 HelloWorldActivity Activity类 gen 保存自己动生成的R资源文件夹 gen-> com.android.helloworld.activity 包名称 R.java 项目自动生成的资源索引类 Android2.3.3->android.jar Android SDK Jar文件 assets 保存原始资源的文件夹 res 资源文件夹 drawable drawable-icon.png 保存图片等资源文件夹 图标文件 layout 界面布局文件 layout->main.xml 界面布局文件 values 简单值配置文件夹 values->strings.xml 字符串配置文件 AndroidMainfest.xml Android配置清单文件 default.xml 属性文件 本文转自 lingdududu 51CTO博客,原文链接: http://blog.51cto.com/liangruijun/621946

优秀的个人博客,低调大师

Hadoop Hive概念学习系列之Hive的元数据分析(三)

Hive 将元数据存储在 RDBMS 中,一般常用MySQL和 Derby。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持,配置一个独立的元数据库需要增加以下步骤。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5660328.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop MapReduce概念学习系列之MapReduce 作业的生命周期(十)

这个过程分为以下 5 个步骤: 步骤 1 作业提交与初始化。用户提交作业后,首先由 JobClient 实例将作业相关信 息,比如将程序 jar 包、作业配置文件、分片元信息文件等上传到分布式文件系统(一般为HDFS)上,其中,分片元信息文件记录了每个输入分片的逻辑位置信息。然后 JobClient 通过 RPC通知JobTracker。JobTracker收到新作业提交请求后,由作业调度模块对作业进 行初始化 :为作业创建一个JobInProgress对象以跟踪作业运行状况,而 obInProgress 则会 为每个Task创建一个TaskInProgress 对象以跟踪每个任务的运行状态,TaskInProgress 可能需要管理多个“Task 运行尝试”(称为“Task Attempt”)。 步骤 2 任务调度与监控。前面提到,任务调度和监控的功能均由JobTracker 完成。 TaskTracker 周期性地通过Heartbeat向JobTracker汇报本节点的资源使用情况,一旦出现空闲资源,JobTracker会按照一定的策略选择一个合适的任务使用该空闲资源,这由任务调 度器完成。任务调度器是一个可插拔的独立模块,且为双层架构,即首先选择作业,然后从该作业中选择任务,其中,选择任务时需要重点考虑数据本地性。此外,JobTracker跟踪作业的整个运行过程,并为作业的成功运行提供全方位的保障。首先,当TaskTracker或者Task失败时,转移计算任务 ;其次,当某个Task执行进度远落后于同一作业的其他 Task 时, 为之启动一个相同 Task,并选取计算快的Task结果作为最终结果。 步骤 3 任务运行环境准备。运行环境准备包括JVM启动和资源隔离,均由TaskTracker 实现。TaskTracker为每个Task启动一个独立的JVM 以避免不同 Task在运行过程中相互影响;同时,TaskTracker使用了操作系统进程实现资源隔离以防止Task滥用资源。 步骤 4 任务执行。TaskTracker 为 Task 准备好运行环境后,便会启动Task。在运行过 程中,每个 Task 的最新进度首先由 Task 通过 RPC 汇报给 TaskTracker,再由 TaskTracker 汇报给 JobTracker。 步骤 5 作业完成。待所有 Task 执行完毕后,整个作业执行成功。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5065020.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

《从零开始学Swift》学习笔记(Day 55)——使用try?和try!区别

在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try? try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。 示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 //查询所有数据方法 funcfindAll() throws ->[Note]{ guardlistData.count> 0 else { //抛出"没有数据"错误。 throw DAOError.NoData } return listData } letdatas= try ?findAll() print(datas) 上述代码中let datas = try? findAll()语句中使用了try?,datas是一个可选值,本例中输出nil。使用了try?语句没有必要使用do-catch语句将其包裹起来。 2.使用try! 使用try!可以打破错误传播链条。错误抛出后传播给它的调用者,这样就形成了一个传播链条,但有的时候确实不想让错误传播下去,可以使用try!语句。 修改上述代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 //查询所有数据方法 funcfindAll() throws ->[Note]{ guardlistData.count> 0 else { //抛出"没有数据"错误。 throw DAOError.NoData } return listData } funcprintNotes(){ letdatas= try !findAll()① for noteindatas{ print( "date:\(note.date!)-content:\(note.content!)" ) } } printNotes() ② 代码printNotes()函数没有声明抛出错误,在调用它的时候不需要try关键字,错误传播链条在printNotes()函数内被打破了。 代码将try dao.findAll()语句改为try! findAll(),在try后面加了感叹号(!),这样编译器就不会要求printNotes()方法声明抛出错误了,try!打破了错误传播链条,但是如果真的发生错误就出现运行期错误,导致程序的崩溃。 所以使用try!打破错误传播链条时,应该确保程序不会发生错误。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1748320,如需转载请自行联系原作者

优秀的个人博客,低调大师

不同操作系统之间的软件管理理念的分析_学习笔记

时间:2017.11.30 作者:李强 参考:man,info,magedu讲义,神奇的internet 声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。 Linux与Windows 1、名称不同 Linux下的程序我们一般称为软件包,因为它基本上都是以rpm后缀打包起来的,Debian上是以deb为后缀的。 Windows下的程序我们一般就安装包,因为他基本是以exe的后缀,操作方式一般是下一步下一的安装。 2、ABI不同, Linux下的可执行二进制程序不是以后缀来区分的,而是以文件类型ELF 64-bit LSB executable Windows下就比较容易区分一般可执行二进制程序为.exe为后缀的,程序都是根据其文件名去判断是否去编辑这个文件,比如office,当然会与一些文本文件就不会看那么多,即是你没有后缀一些软件也是打开编辑的。 3、重点来了,前端包管理器,一个系统上软件又许多,如何更好的管理这些软件。 Linux上有Redhat的yum 和Fedora的dnf,还有Debian的app-get,SUSE的zyppe等等。 Windows上有360的软件管家,腾讯的软件管家,百度的软件管家,金山的软件管家等等。 但是Linux下调用的是系统的rpm工具,Windows调用的是系统的程序工具,这些包管理器都是一个前置工具。 Android与Apple Android上有什么系统自带的软件管理器,当然有第三方的比如360,百度,豌豆荚等等 Apple上官方的App Store,第三方的一些管理器等。 软件的编译 1、Linux下的编译工具有make, 编译步骤一般为以下几个步骤: 1、获取源代码,工具官网或者第三方托管。github.com code.google.com等 2、解压缩源代码,进入到解压缩后的目录 3、准备编译环境,yum grouplist “development tools”,安装make工具等 3、./configure --help 可以看到一些选项。用来定制功能和选项就好像window下的安装的next setup ,然后就点击安装,也就是下一步。不设置就是默认设置。编译的时候可能会出现错误因为会有一些相关组件的依赖性,我们这里以windows下的sql server 安装为例,需要,net等组件,如果你安装的时候它是会提前检查的,如果没有也是会提醒你去安装的。 4、make 根据目录下的makefile.in 来生成makefile。 make -j 4 多少线程来完成 5、make install 安装。 6、完善工具运行环境,不如添加变量啊,自启动啊,和widnows里装完jdk差不多。每个工具都有自己的编译的教程,可以参考实践。 2、Windows下的编译 这个不太清楚,没编过。 不过Windows下的exe安装过程和以上的很多过程其实是相似的, 比如./configure 就好比next setup ,我们可以设置选项当然也可以默认值,回去检查依赖性,会去检查组件是否有。 比如之后的设置path路径,服务启动啊,服务自启动啊就好比环境变量path的设置,window下的快捷方式,还有自启动的设置啊什么的一样。 本文转自 lajifeiwomoshu 51CTO博客,原文链接:http://blog.51cto.com/lajifeiwomoshu/2045940

优秀的个人博客,低调大师

Storm概念学习系列之Storm与Hadoop的角色和组件比较

Storm与Hadoop的角色和组件比较 Storm 集群和 Hadoop 集群表面上看很类似。但是Hadoop 上运行的是 MapReduce 作业,而在Storm 上运行的是拓扑 Topology,这两者之间是非常不同的。一个关键的区别是:一个MapReduce 作业最终会结束,而一个 Topology 拓扑会永远运行(除非手动杀掉)。表 1-1 列出了 Hadoop 与 Storm 的不同之处。 如果只用一个短语来描述 Storm,可能会是这样:分布式实时计算系统。按照 Storm作者的说法, Storm对于实时计算的意义类似于 Hadoop 对于批处理的意义。众所周知,根据Google MapReduce 来实现的 Hadoop 提供了 Map 和 Reduce 原语,使批处理程序变得非常简单和优美。那么 Storm 则是在批处理之前,及时处理了数据。 Storm 与其他大数据解决方案的不同之处在处理方式上。Hadoop 在本质上是一个批处理系统。数据被引入 HDFS 并分发到各个节点进行处理。当处理完成时,结果数据返回到HDFS 供始发者使用。Storm 支持创建拓扑结构来转换没有终点的数据流。不同于 Hadoop 作业,这些转换从不停止,它们会持续处理到达的数据。 Hadoop 专注于批处理。这种模型对许多情形(如为网页建立索引)已经足够,但还存在其他一些使用模型,它们需要来自高度动态来源的实时信息。为了解决该问题,就得借助 Twitter 推出的 Storm。 Storm 不处理静态数据,但它处理预计会连续的流数据。考虑到Twitter 用户每天生成 1.4 亿条推文,很容易看到此技术的巨大用途。 Storm 不只是一个传统的大数据分析系统:它是复杂事件处理(CEP)系统的一个示例。CEP 系统通常分为计算和面向检测两类,其中每个系统都可通过用户定义的算法在 Storm 中实现。例如, CEP 可用于识别事件洪流中有意义的事件,然后实时处理这些事件。 Storm 作者 Nathan Marz 提供了在 Twitter 中使用 Storm 的大量示例。一个最有趣的示例是生成趋势信息。 Twitter 从海量的推文中提取所浮现的趋势,并在本地和国家级别维护这些趋势信息。这意味着当一个案例开始浮现时, Twitter 的趋势主题算法就会实时识别该主题。这种实时算法是使用 Storm 实现的基于 Twitter 数据的一种连续分析。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5989252.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)

0. 背景: inux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。 1. 硬盘类型 /dev/sda VS/dev/hda /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 而又的安装时硬盘驱动设备名为 /dev/hda /dev/hda1 Q:sda和hda有什么区别那? A: HDA是使用了ide接口的硬盘的名称.SDA是sata接口的硬盘的名称.在最新的2.6.19内核里,所有的硬盘都叫SDA了. 硬盘接口分为: ide (integrated drive electronics) 把盘体和控制器集成在一起 sata (serial ATA(advanced technology attachment)) scsi (small computer system interface) 光纤通道 fibre channel 其中hda、hdb分别代表第一个IDE、第二个IDE。假如你电脑上插有2个IDE硬盘,就会出现hda、hdb吗?不一定,因为貌似IDE硬盘默认有两个部分,Master和Slave,即主分区和扩展分区,而且a、b是根据IDE接口插槽顺序来分的。这样的话,第一IDE插槽主分区为hda,扩展分区为hdb,第二IDE插槽主分区为hdc,扩展分区为hdd。 但是SATA硬盘好像没有扩展分区,而且Linux识别SATA等类型装置的顺序不是按插槽顺序来的,是按照设备被侦测到的顺序来定的,比如SATA的第1、5插槽分别插有硬盘,电脑上还插有一个USB,那么启动Linux的时候,先后侦测到SATA的第1、5插槽的硬盘和USB设备,那么分配的名称就分别是sda,sdb,sdc。 但貌似,Ubuntu自8.04起,所有硬盘都编号为“sdx”,即不管IDE还是SATA,一律认作SCIS硬盘。 2. 分区 (Partition) 计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。 在一个MBR分区表类型的硬盘中最多只能存在4个主分区。如果一个硬盘上需要超过4个以上的磁盘分块的话,那么就需要使用扩展分区了。如果使用扩展分区,那么一个物理硬盘上最多只能3个主分区和1个扩展分区。扩展分区不能直接使用,它必须经过第二次分割成为一个一个的逻辑分区,然后才可以使用。一个扩展分区中的逻辑分区可以任意多个。 磁盘分区后,必须经过格式化才能够正式使用,格式化后常见的磁盘格式有:FAT(FAT16)、FAT32、NTFS、ext2、ext3等。 那么sda1、sda2又分别代表什么呢?代表分区(Partition),比如 P1:/dev/hda1 P2:/dev/hda2 L1:/dev/hda5 L2:/dev/hda6 L3:/dev/hda7 L4:/dev/hda8 L5:/dev/hda9 为什么没有hda3、4呢?因为P1~4保存给了Primary和Extended分区。一个硬盘的结构如下: MBR|主分区1|主分区2|主分区3|主分区4(扩展分区)|,其中扩展分区可以分为:|逻辑分区1|逻辑分区2|……|逻辑分区n| 所以说上面的P1、2指明系统有两个主分区,L1~5代表有5个逻辑分区。主分区(包括扩展分区)的总个数不能超过四个;也不能把扩展分区包围在主分区之间。 参考:http://blog.csdn.net/zollty/article/details/7001950 fdisk 命令 root@dev:/home/s1# fdisk -l Disk /dev/sda: 250.1 GB, 250059350016 bytes//这个硬盘有250.1 GB的容量 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors//255个磁头;63个扇区每磁道,30401个磁柱 Units = sectors of 1 * 512 = 512 bytes//每个 cylinder(磁柱)的容量是512字节 Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000d7bf1 存储容量=磁道(柱面)数×磁头数×每道扇区数×每扇区字节数 =30401 * 255 * 63 * 512 =25396387380 bytes Device Boot Start End Blocks Id System//Start (开始)/End (结束):表示的一个分区从X sector开始/结束 /dev/sda1 * 2048 484298751 242148352 83 Linux//引导(Boot):表示引导分区,在上面的例子中 hda1 是引导分区 /dev/sda2 484300798 488396799 2048001 5 Extended//Blocks:表示的意思的确是容量的意思,其单位是K /dev/sda3 484298752 484300797 1023 83 Linux /dev/sda5 484300800 488396799 2048000 82 Linux swap / Solaris //大小,2048000/1024=2G ? 这里有一个主分区sda1,一个扩展分区sda2,sda2包括两个逻辑分区sda3和sda4. 硬盘总容量=主分区(包括扩展分区)总容量 主分区大小为242148352 /1024 =236473 M = 236 G 扩展分区大小为:2014001 / 1024 = 2000M = 2G 磁盘总容量大小为:236 + 2 = 238G 扩展分区容量=逻辑分区总容量 我们估算一个硬盘是否完全被划分,我们只要看 fdisk -l 输出的内容中的 cylinders(柱体) 上一个分区的End 和 下一个分区的Start是不是一个连续的数字,另外要看一下每个硬盘设备的fdisk -l 的开头部份,看一下他的 cylinders(柱体)的值。可见上图中,扩展分区都分完了。 df -h 命令: 注: df 下没有显示swap分区 改变Linux分区大小 1. 建议在安装Ubuntu的过程中,选择手动方法进行磁盘分区。可参考http://blog.sina.com.cn/s/blog_56a70c0401018dki.html中的具体步骤。 2. linux安装好以后,根分区容量一般是不允许改变的。 LVM can be set up after the system is installed. But putting the root partition on the LVM after the fact is quite difficult and probably would be better done with a reinstallation. Furthermore, it is not possible to just create a LVM on a already mounted partition. LVM可以在系统装好后安装。但是将根分区放进LVM是非常困难的,因此建议重装系统的时候再设置。而且,在已经挂载的分区上创建LVM是不行的。 3.实在要改变,推荐用gparted-LiveCD进行调整 (1)、准备 1、下载最新版本的gparted ISO 镜像文件:http://gparted.sourceforge.net/ 2、将gparted镜像文件刻录成光盘或压制在U盘上制成LiveUSB 3、建议备份重要数据到移动硬盘上 4、在BIOS中,将启动顺序设置为首先光驱启动(如果是用LiveUSB,应设为USB-HDD) (2)、调整分区 1、将光盘放入光驱(如果是用LiveUSB,插上U盘),重启电脑.这时候我遇到一个错误:vesamenu.c32 not a com32r image。 解决办法是到Ubuntu系统中找到这个文件,替换掉USB上的这个文件,它存在于两个文件夹中。 2、进入gparted启动界面,直接选Defalt settings 3、第二个界面继续按回车7 y: O. l3 A" E/ PN0 L: j 4、接下来选语言,输入“26”回车(就是简体中文,尽管汉化不全) 5、接着提示将要进入X-Windows界面,回车 6、进入gparted,就会发现和瘟到死的PQ相似的界面,实际操作也是一样的,而且也支持瘟到死分区的调整 7、点击你要腾出空间的分区,弹出右键菜单选择“Resize/Move”& Z) 8、用鼠标托动或数字精确调整要释放的空间大小,若要释放在分区头部拉左侧的控制条(输入第一行数值),若要释放在分区尾部拉右侧的控制条(输入第三行数值),调整好之后点“更改大小/移动”按钮。 9、点击欲扩大容量的分区,弹出右键菜单选择“Resize/Move” 10、按照第8步的方法操作,只是现在变成扩大分区容量而已 11、点击“Edit”菜单,选择“Apply All Operations”3 12、再次确认要调整分区容量后,gparted开始调整分区,完成后点“Close”按钮 13、点“gparted”菜单,选“Quit”关闭gparted窗口,再双击左上角的“Exit”按钮退出gparted系统 14、在弹出的窗口中选“Reboot”重启电脑,退出时系统会提示你取出光盘 (3)、可能遇到的问题 可能会发生swap分区丢失的情况,可在终端中用“free -m”命令查看swap分区是否激活(是否显示容量),如果未激活,可用“sudo mkswap /dev/sdaX”命令(X为swap分区的编号)进行激活,并将激活所得的UUID码替换掉“/etc/fstab”文件(需要管理员权限)中原来 swap分区的UUID编码,重启后即可自动激活挂载 具体操作方法,请进Ubuntu官方论坛中查找,有教程帖8 z. \0 s8 }- M& c 警告:对swap分区的激活操作及对fstab文件的修改应谨慎,必需仔细核对修改的值 在界面上缩小sda1的大小,并创建新的分区,重启电脑后终于看到一个新的分区了,还有一些未分配空间。接下来就可以用下面的LVM方法来创建LVM啦。。 3. 挂载和挂载点 一个挂载点就是一个文件夹,将分区挂载到一个挂载点,挂载点就成了分区的入口。没有挂载分区的挂载点将使用根目录的空间,没有挂载到挂载点的分区是无法访问的,如上边第四个逻辑分区。 例如,如果分区 /dev/hda5 被 挂载在 /usr 上,这意味着所有在 /usr 之下的文件和目录在物理意义上位于 /dev/hda5 上。因此文件 /usr/share/doc/FAQ/txt/Linux-FAQ 被储存在 /dev/hda5上,而文件 /etc/X11/gdm/Sessions/Gnome 却不是。 继续以上的例子,/usr 之下的一个或多个目录还有可能是其它分区的挂载点。例如,某个分区(假设为,/dev/hda7)可以被挂载到 /usr/local 下,这意味着 /usr/local/man/whatis 将位于 /dev/hda7 上而不是 /dev/hda5 上。 linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。 注意:1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。 挂载前要了解linux是否支持所要挂载的文件系统格式。 挂载时使用mount命令: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有 -t<文件系统类型> 指定设备的文件系统类型,常见的有: minix linux最早使用的文件系统 ext2 linux目前常用的文件系统 msdos MS-DOS的fat,就是fat16 vfat windows98常用的fat32 nfs 网络文件系统 iso9660 CD-ROM光盘标准文件系统 ntfs windows NT 2000的文件系统 hpfs OS/2文件系统 auto 自动检测文件系统 -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有 codepage=XXX 代码页 iocharset=XXX 字符集 ro 以只读方式挂载 rw 以读写方式挂载 nouser 使一般用户无法挂载 user 可以让一般用户挂载设备 提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?) 例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。 # mk /mnt/winc # mk /mnt/floppy # mk /mnt/cdrom # mount -t vfat /dev/hda1 /mnt/winc # mount -t msdos /dev/fd0 /mnt/floppy # mount -t iso9660 /dev/cdrom /mnt/cdrom 现在就可以进入/mnt/winc等目录读写这些文件系统了。 自动挂载: 在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项。添加新行实现自动挂载: /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0 /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0 4. LVM几个基本概念 *物理存储介质(PhysicalStorageMedia):指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是 存储系统最底层的 存储单元。 *物理卷(Physical Volume,PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file),它是LVM的基本存储逻辑块。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。 *物理块(Physical Extent,PE):每一个物理卷PV被划分为称为PE(Physical Extents)的 基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。 *卷组(Volume Group,VG):将一组物理卷收集为一个管理单元,类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷)。 *逻辑卷(Logical Volume,LV):虚拟分区,由物理区域(physical extents)组成,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。 *逻辑块(Logical Extent,LE):逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 LVM抽象模型 优点 比起正常的硬盘分区管理,LVM更富于弹性: 使用卷组(VG),使众多硬盘空间看起来像一个大硬盘。 使用逻辑卷(LV),可以创建跨越众多硬盘空间的分区。 可以创建小的逻辑卷(LV),在空间不足时再动态调整它的大小。 在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。It does not depend on the position of the LV within VG, there is no need to ensure surrounding available space. 可以在线(online)对逻辑卷(LV)和卷组(VG)进行创建、删除、调整大小等操作。LVM上的文件系统也需要重新调整大小,某些文件系统也支持这样的在线操作。 无需重新启动服务,就可以将服务中用到的逻辑卷(LV)在线(online)/动态(live)迁移至别的硬盘上。 允许创建快照,可以保存文件系统的备份,同时使服务的下线时间(downtime)降低到最小。 这些优点使得LVM对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍。 缺点: 只能在Linux上使用。对于其他操作系统(如FreeBSD, Windows等),尚未有官方支持。 在系统设置时需要更复杂的额外步骤。 假如你使用的是btrfs文件系统,那么它所提供的子卷(subvolume)实际上已经时一层可动态调整的存储层,此时再用LVM就显得多余了。 操作: 要创建一个LVM系统,一般需要经过以下步骤: 1、创建分区:使用 分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。 2、创建物理卷:创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。 将整个磁盘创建为物理卷的命令为:#pvcreate /dev/hdb 将单个分区创建为物理卷的命令为:#pvcreate /dev/hda5 3、创建卷组:创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组: #vgcreate web_document /dev/hda5 /dev/hdb vgcreate命令第一个参数是指定该卷组的逻辑名:web_document。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate 在创建卷组web_document以外,还设置使用大小为4MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充 或缩减。由于 内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组 时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数(使用-s指定,具体请参考manvgcreate)。(centos 6.2系统已发现没有这种限制) 4、激活卷组 为了立即使用卷组而不是重新启动系统,可以使用vgchange来激活卷组: #vgchange -ay web_document 5、添加新的物理卷到卷组中 当系统安装了新的磁盘并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令: #vgextend web_document /dev/hdc1 这里/dev/hdc1是新的物理卷。 6、从卷组中删除一个物理卷 要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息: 如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce: #vgreduce web_document /dev/hda1 7、创建逻辑卷 创建逻辑卷的命令为lvcreate: #lvcreate -L1500 -n www1 web_document 该命令就在卷组web_document上创建名字为www1,大小为1500M的逻辑卷,并且设备入口为 /dev/web_document/www1(web_document为卷组名,www1为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需 要首先察看该卷组的PE数,然后在创建逻辑卷时指定: #vgdisplay web_document | grep"TotalPE" TotalPE45230 #lvcreate -l45230 web_document -n www1 8、创建文件系统 笔者推荐使用reiserfs文件系统,来替代ext2和ext3: 创建了文件系统以后,就可以加载并使用它: #mkdir/data/wwwroot #mount /dev/web_document/www1/data/wwwroot 如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容: /dev/web_document/www1/data/wwwrootreiserfsdefaults12 9、删除一个逻辑卷 删除逻辑卷以前首先需要将其 卸载,然后删除: #umount /dev/web_document/www1 #lvremove /dev/web_document/www1 10、扩展逻辑卷大小 LVM提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvextend: lvextend -L12G /dev/web_document/www1 上面的命令就实现将逻辑卷www1的大小扩招为12G。 lvextend -L +1G /dev/web_document/www1 上面的命令就实现将逻辑卷www1的大小增加1G。 增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。笔者推荐使用reiserfs文件系统来替代ext2或者ext3。因此这里仅 仅讨论reiserfs的情况。Reiserfs文件工具提供了文件系统大小调整工具:resize_reiserfs。对于希望调整被加载的文件系统大 小: #resize_reiserfs -f /dev/web_document/www1 一般建议最好将文件系统 卸载,调整大小,然后再加载: #umount /dev/web_document/www1 #resize_reiserfs /dev/web_document/www1 #mount-treiserfs /dev/web_document/www1/data/wwwroot 对于使用ext2或ext3文件系统的用户可以考虑使用工具resize2fs。 11、减少逻辑卷大小 使用 lvreduce 即可实现对逻辑卷的容量,同样需要首先将文件系统 卸载: #umount /data/wwwroot #resize_reiserfs -s -2G /dev/web_document/www1 #lvreduce -L -2G /dev/web_document/www1 #mount-treiserfs /dev/web_document/www1/data/wwwroot lvreduce 可以使用两种类型的size: (1)指定减少的size lvreduce --size -40G /dev/vg0/foo (2)指定减少到的size lvreduce --size 80G /dev/vg0/foo 实际测试(RedHat 6.5 环境,ext3 文件系统): 1. 缩小 lv 的容量 缩小 lv 容量之前,一定要先 umount,然后使用 resize2fs 命令将ext2/ext3文件系统的空间先缩小(不同的文件系统使用不同的命令),然后再使用 lvreduce 命令缩小 lv,然后再 mount。不是这个过程的话,文件系统非常有可能崩溃。 [root@rh65 ~]# umount /home [root@rh65 ~]# e2fsck -f /dev/mapper/vg_rh65-lv_home e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/vg_rh65-lv_home: 38/80543744 files (10.5% non-contiguous), 23715920/322174976 blocks [root@rh65 ~]# resize2fs /dev/mapper/vg_rh65-lv_home 800G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/vg_rh65-lv_home to 209715200 (4k) blocks. The filesystem on /dev/mapper/vg_rh65-lv_home is now 209715200 blocks long. [root@rh65 ~]# lvreduce --size 800G /dev/mapper/vg_rh65-lv_home WARNING: Reducing active logical volume to 800.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv_home? [y/n]: y Reducing logical volume lv_home to 800.00 GiB Logical volume lv_home successfully resized [root@rh65 ~]# fsck /dev/mapper/vg_rh65-lv_home fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) /dev/mapper/vg_rh65-lv_home: clean, 38/52428800 files, 21950847/209715200 blocks [root@rh65 ~]# mount /dev/mapper/vg_rh65-lv_home /home 2. 增加 lv 容量 先使用 lvextend 增加 lv 容量,在使用resize2fs 增加文件系统的容量,使得两者的size一直,否则重启后会出现 fsck 错误。 [root@rh65 ~]# lvextend -L +500G /dev/mapper/vg_rh65-lv_root Extending logical volume lv_root to 1.07 TiB Logical volume lv_root successfully resized [root@rh65 ~]# resize2fs /dev/mapper/vg_rh65-lv_root resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg_rh65-lv_root is mounted on /; on-line resizing required old desc_blocks = 19, new_desc_blocks = 69 Performing an on-line resize of /dev/mapper/vg_rh65-lv_root to 288358400 (4k) blocks. The filesystem on /dev/mapper/vg_rh65-lv_root is now 288358400 blocks long. 命令列表: vgs,pvs,lvs e2fsadm(8), lvchange(8), lvcreate(8), lvdisplay(8), lvextend(8), lvmchange(8), lvmdiskscan(8), lvmcreate_initrd(8), lvmsadc(8), lvmsar(8), lvreduce(8), lvremove(8), lvrename(8), lvscan(8), pvchange(8), pvcreate(8), pvdata(8), pvdisplay(8), pvmove(8), pvscan(8), vgcfgbackup(8), vgcfgrestore(8), vgchange(8), vgck(8), vgcreate(8), vgdisplay(8), vgexport(8), vgextend(8), vgimport(8), vgmerge(8), vgmknodes(8), vgreduce(8), vgremove(8), vgrename(8), vgscan(8), vgsplit(8) 以上文字由网络上搜到的文字加工而成。主要参考材料包括: https://wiki.archlinux.org/index.php/LVM_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) http://blog.csdn.net/zollty/article/details/7001950 本文转自SammyLiu博客园博客,原文链接:http://www.cnblogs.com/sammyliu/p/4157491.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车

Zigbee技术目前在物联网领域和RFID一样,受关注度非常高。日前中科院上海微系统与信息技术研究所、无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628、WSNS1_SCBR的两款中国自主知识产权的无线传感网SoC芯片,其中WSNS1_SCBR为中国首款符合IEEE802.15.4g标准的验证型全集成传感网节点SoC芯片。 其实封装好的Zigbee模块,使用起来和操作串口一样,特别是我们把其通信模式设置为透明传输模式,这时候我们已经感觉不到是在用Zigbee模块,而觉得是在用一条串口线。在之前写的《Zigbee在.Net Micro Framework系统中的应用》博文中相对详细的介绍了Zigbee相关模块的应用,感兴趣的网友,可以参考一下。 单个的Zigbee模块非常小,其串口管脚为TTL电平,需要直接和MCU相连,具体接线管脚如下(简便期间,我们只接4根管脚): 序号 Zigbee模块 红牛开发板 1 3(RX0) PA2(USART2_TX) 2 4(TX0) PA3(USART2_RX) 3 6(GND) GND 4 7(VCC) 3.3v 开发板上的控制程序如下(非常简单,就是串口接收和小车控制程序): //打开串口,并设置zigbee模块为透明传输模式 serial =newSerialPort("COM2", 115200,Parity.None, 8,StopBits.One); serial.Open(); serial.DataReceived +=newSerialDataReceivedEventHandler(serial_DataReceived); stringstrCommand ="---2-"; byte[] byteData = System.Text.Encoding.UTF8.GetBytes(strCommand); serial.Write(byteData, 0, byteData.Length); //读取数据 staticvoidserial_DataReceived(objectsender,SerialDataReceivedEventArgse) { if(serial.BytesToRead > 0) { byte[] bytData =newbyte[serial.BytesToRead]; serial.Read(bytData, 0, bytData.Length); serial.Write(bytData, 0, bytData.Length); stringKeyName =""; switch(bytData[0]) { case48://'0' KeyName ="Forward"; MoveForward(); break; case49://'1' KeyName ="Left"; MoveLeft(); break; case50://'2' KeyName ="Right"; MoveRight(); break; case51://'3' KeyName ="Back"; MoveBack(); break; case52://'4' KeyName ="Stop"; MoveStop(); break; } Debug.Print(KeyName); } } 上面的程序进行了简化,关于小车PWM控制部分的代码,请参考我以前写的博文《用PWM驱动智能小车》及《红外遥控智能小车》。 为了便于控制,我们需要在PC上编写一个最简单的串口发送程序,以控制智能小车的运转,相关代码如下: //串口 SerialPortserial =null; publicfrmMain() { InitializeComponent(); serial =newSerialPort("COM1", 115200,Parity.None, 8,StopBits.One); serial.Open(); stringstrCommand ="---1-"; byte[] byteData = System.Text.Encoding.UTF8.GetBytes(strCommand); serial.Write(byteData, 0, byteData.Length); } privatevoidfrmMain_FormClosed(objectsender,FormClosedEventArgse) { serial.Close(); } privatevoidbtnForward_Click(objectsender,EventArgse) { serial.Write("0"); serial.DiscardInBuffer(); } privatevoidbtnLeft_Click(objectsender,EventArgse) { serial.Write("1"); serial.DiscardInBuffer(); } privatevoidbtnRight_Click(objectsender,EventArgse) { serial.Write("2"); serial.DiscardInBuffer(); } privatevoidbtnBack_Click(objectsender,EventArgse) { serial.Write("3"); serial.DiscardInBuffer(); } privatevoidbtnStop_Click(objectsender,EventArgse) { serial.Write("4"); serial.DiscardInBuffer(); } 运行后的界面如下: 单击相关按钮,如果不出意外的话,在Zigbee通信范围的智能小车应该已经动起来了。 相关控制视频如下: http://video.sina.com.cn/v/b/40292033-1804832611.html (1)、小车底盘 http://item.taobao.com/item.htm?id=7218838776 (2)、四路直流电机驱动器 http://item.taobao.com/item.htm?id=7218717808 (3)、.NET Micro Framework开发板 http://item.taobao.com/item.htm?id=7117999726 注:需要红牛开发板固件在V1.0.0以上 本文源码1:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/PCZigbee.rar 本文源码2:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/ZigbeeCar.rar MF快速参考:.NET Micro Framework快速入门 MF中文讨论组:http://space.cnblogs.com/group/MFSoft/ 微软官方论坛:MSDN微软中文技术论坛(.NET Micro Framework) 开发板简明手册:http://blog.sina.com.cn/s/blog_6b938f630100kh0k.html 【低价开发板】http://item.taobao.com/item.htm?id=7117999726 本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/411006,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop HDFS概念学习系列之HDFS升级和回滚机制(十二)

HDFS升级和回滚机制 作为一个大型的分布式系统,Hadoop内部实现了一套升级机制,当在一个集群上升级Hadoop时,像其他的软件升级一样,可能会有新的bug或一些会影响现有应用的非兼容性变更出现。在任何有实际意义的HDFS系统中,丢失数据是不允许的,更不用说重新搭建启动HDFS了。当然,升级可能成功,也可能失败。如果失败了,那就用rollback进行回滚;如果过了一段时间,系统运行正常,那就可以通过finalize正式提交这次升级。 相关升级和回滚命令如下: bin/hadoop namenode一upgrade //升级 bin/hadoop namenode一rollback //回滚 bin/hadoop namenode一finalize //提交 bin/hadoop namenode一importCheckpoint //从Checkpoint恢复 上述命令的importCheckpoint参数用于NameNode发生故障后,从某个检查点恢复。HDFS允许管理员退回到之前的Hadoop版木,将集群的状态回滚到升级之前。 在升级之前,管理员需要用以下命令删除已存在的备份文件: bin/hadoop dfsadmin-finalizeUpgrade //升级终结操作 下面简单介绍一下一般的升级过程。 在升级Hadoop软件之前,检查是否已经存在一个备份,如果备份存在,可执行升级终结操作删除这个备份。通过以下命令能够知道是否需要对一个集群执行升级终结操作: dfsadmin -upgradeProgress status 1) 停止集群并部署Hadoop的新版本。 2) 使用upgrade选项运行新的版本(bin/start-dfs.sh -upgrade) 在大多数情况下,集群都能够正常运行。一旦我们认为新的HDFS运行正常(也许经过几天的操作之后),就可以对其执行升级终结操作。需要注意的是,在对一个集群执行升级终结操作之前,删除那些升级前就已经存在的文件并不会真正地释放DataNode上的磁盘空间。 如果需要退回到老版本,执行步骤如下: 1) 停止集群并部署Hadoop的老版本。 2) 用回滚选项启动集群,命令如下: bin/start-dfs.h -rolback 上面介绍了HDFS的升级和回滚的基本机制,其实可以从状态转移的角度来理解理解HDFS的升级和回滚机制。整个HDFS的状态有:Normal, Upgraded, Rollbacking, Upgrading,Finalizing五种,HDFS集群的状态转移示意图,如下图所示。 从上图可以看出,升级、回滚、提交都不可能一下完成,这也就是说,在HDFS系统出现故障时,集群可能处于上图右侧图中某一个状态中,特别是在分布式的各个节点上,甚至可能出现有些节点已经升级成功,但有些节点可能处干中间状态的情况,所以Hadoop采用类似于数据库事务的升级机制也就很容易理解了。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/5081721.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册