摘要: 任何文件系统的一个重要特性都是提供其目录结构浏览和检索它所存文件和目录相关信息的功能。FileStatus对象封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。 FileStatus对象由FileSystem的getFileStatus()方法获得,调用该方法的时候要把文件的Path传进去。 例子:打印输出某个文件的所有信息 1 package com.hdfs; 2 3 import org.apache.hadoop.conf.Configuration; 4 import org.apache.hadoop.fs.FSDataI... 阅读全文
posted @ 2013-06-18 09:25 残剑_ 阅读(9354) 评论(2) 推荐(2) 编辑
摘要: HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中的文件进行操作的过程。 对分HDFS中的文件操作主要涉及一下几个类: Configuration类:该类的对象封转了客户端或者服务器的配置。 FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。FileSystem fs = FileSystem.get(conf);通过FileSystem的静态方法get获得该对象。 FSDataInputStream和FSDataOutputSt... 阅读全文
posted @ 2013-06-17 22:21 残剑_ 阅读(42386) 评论(1) 推荐(2) 编辑
摘要: 今天终于把hadoop集群环境给搭建起来了,能够运行单词统计的示例程序了。集群信息如下:主机名Hadoop角色Hadoop jps命令结果Hadoop用户Hadoop安装目录masterMasterslavesNameNodeDataNodeJobTrackerTaskTrackerSecondaryNameNode创建相同的用户的组名:hadoop。安装hadoop-0.20.2时使用hadoop用户,并且hadoop的文件夹归属也是hadoop:hadoop/opt/hadoopslave1slavesDataNodeTaskTrackerslave2slavesDataNodeTask. 阅读全文
posted @ 2013-06-16 20:59 残剑_ 阅读(57055) 评论(3) 推荐(4) 编辑
摘要: 今天把hadoop环境给搭起来了,在master上面启动hadoop后,jps查看进程,SecondaryNameNodeNameNode JpsDataNodeJobTrackerTaskTracker都没问题。但是去http://master:50070/dfshealth.jsp查看,live nodes为0。所以我到slave1和slave2上面去执行jps查看进程,结果都没有datanode进程,也就是说datanode没有启动成功,所以我就到logs里面去执行less hadoop-hadoop-datanode-slave2.log,发现报错的内容如下:2013-06-11 .. 阅读全文
posted @ 2013-06-11 02:42 残剑_ 阅读(8960) 评论(2) 推荐(1) 编辑
摘要: 今天试着在Linux下面搭建java开发环境,现总结一下具体步骤。1、JDK的安装执行下面命令安装JDK(首先创建/opt/java目录)tar -xvf jdk-7u9-linux-i586.tar.gz -C /opt/javaln -s /opt/java/jdk1.7.0_09 /opt/java/jdk 创建一个链接vi /etc/frofile 设置环境变量export JAVA_HOME=/opt/java/jdkexprot PATH=$JAVA_HOME/bin:$PATH相当于重新设置PATH=JAVA_HOME/bin+PATH配置好之后要用命令source /etc.. 阅读全文
posted @ 2013-06-07 21:59 残剑_ 阅读(16480) 评论(0) 推荐(0) 编辑
摘要: 查看系统是64位还是32位:0>$ uname -m 若是i386 或 i686 则是32位kernel x86_64 则是 64位kernel1、getconf LONG_BIT or getconf WORD_BIT例如:2、file /bin/ls例如:查看linux的版本: 阅读全文
posted @ 2013-06-07 20:22 残剑_ 阅读(433) 评论(1) 推荐(0) 编辑
摘要: java.net.ConnectException: Call to master/192.168.137.101:9001 failed on connection exception: java.net.ConnectException: Connection refusedat org.apache.hadoop.ipc.Client.wrapException(Client.java:1099)at org.apache.hadoop.ipc.Client.call(Client.java:1075)at org.apache.hadoop.ipc.RPC$Invoker.invoke 阅读全文
posted @ 2013-06-06 21:35 残剑_ 阅读(25019) 评论(0) 推荐(0) 编辑
摘要: 一、Linux下常用命令:文件与目录操作basename:从文件名中去掉路径和扩展名cd:切换当前工作目录到指定目录chgrp:改变文件所属组chmod:改变文件的权限chown:改变文件的所有者和组cp:复制文件或目录dd:复制文件并转换文件内容file:确定文件类型find:在指定目录下查找文件并执行指定的操作ln:创建文件链接locate/slocate:快速定位文件的路径ls/dir/vdir:显示目录内容mkdir:创建目录mv:移动或重命名文件pwd:显示当前工作目录rename:重命名文件rm:删除文件或目录rmdir:删除空目录touch:修改文件的时间属性updatedb:创 阅读全文
posted @ 2013-06-05 16:14 残剑_ 阅读(3760) 评论(1) 推荐(1) 编辑
摘要: 最近接触hadoop,需要在在Linux上面开发,所以我装了一个virtualbox虚拟机,在该虚拟机上面安装了一个centOS系统。linux系统是装好了,但是网络配置却另人头疼。我主要是想让宿主机和虚拟机能够互相访问。 然后我就百度了一下,根据百度的结果一步一步的配置。 安装virtualbox之后它会在宿主机上面安装一个虚拟网卡,如图 双击它,查看详情,信息如图所示 在虚拟机上面配置网络我使用的是host-only方式,当然也可以使用桥接的方式,至于他们的区别,网上很多。虚拟机上面主要是使用这块虚拟网卡作为网关。 进入centOS系统后主要有三个文件需要配置: 1、修改ip... 阅读全文
posted @ 2013-06-03 23:06 残剑_ 阅读(35470) 评论(8) 推荐(2) 编辑
摘要: 问题的提出在大部分情况下,需要多重继承往往意味着糟糕的设计。但在处理一些遗留项目的时候,多重继承可能是我们能做出的选择中代价最小的。由于 Java 语言本身不支持多重继承,这常常会给我们带来麻烦,最后的结果可能就是大量的重复代码。本文试图使用 ASM 框架来解决这一问题。在扩展类的功能的同时,不产生任何重复代码。考虑如下的实际情况:有一组类,名为 SubClass1、SubClass2、SubClass3 和 SubClass4,它们共同继承了同一个父类 SuperClass。现在,我们需要这组类中的一部分,例如 SubClass1 和 SubClass2,这两个类还要实现另外两个接口,它们分 阅读全文
posted @ 2013-05-31 21:50 残剑_ 阅读(3396) 评论(1) 推荐(2) 编辑
摘要: 一、什么是ASM ASM是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。 使用ASM框架需要导入asm的jar包,下载链接:asm-3.2.jar。 二、如何使用ASM ASM框架中的核心类有以下几个: ① Cl... 阅读全文
posted @ 2013-05-25 00:19 残剑_ 阅读(87140) 评论(8) 推荐(6) 编辑
摘要: 大家都知道,动态代理能够实现AOP,但是它有一个缺点,就是所有被代理的对象必须实现一个接口,否则就会报异常。那么如果被代理对象没有实现接口那该如何实现AOP呢?当然是能的,使用CGlib就可以实现。 1、什么是CGlib CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行... 阅读全文
posted @ 2013-05-21 23:16 残剑_ 阅读(7685) 评论(3) 推荐(5) 编辑
摘要: 一、动态代理的使用 动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。 动态代理主要包含以下角色: 动态代理类(以下简称为代理类)是一个实现在创建类时在运行时指定的接口列表的类,该类具有下面描述的行为。 代理接口 是代理类实现的一个接口。 代理实例 是代理类的一个实例。 每个代理实例都有一个关联的调用处理程序 对象,它可以实现接口 InvocationHandler。... 阅读全文
posted @ 2013-05-21 15:38 残剑_ 阅读(6885) 评论(0) 推荐(2) 编辑
摘要: 前面写过:synchronize来实现生产者和消费者问题现在用Lock来实现它 1 package com.thread; 2 3 import java.util.LinkedList; 4 import java.util.concurrent.locks.Condition; 5 import java.util.concurrent.locks.Lock; 6 import java.util.concurrent.locks.ReentrantLock; 7 8 9 /** 10 * 使用Lock来实现生产者和消费者问题 11 * 12 * @auth... 阅读全文
posted @ 2013-05-18 17:55 残剑_ 阅读(3121) 评论(0) 推荐(1) 编辑
摘要: JDK6.0推出了动态编译的新功能,能够在程序中动态的写一个类,再对之进行编译。编译成class文件后就可以通过类加载方式把动态编译的类加载到内存中。当然也能通过RunTime类调用javac命令来动态编译。 动态编译类的主要步骤: ①、写一个字符串,这个字符串就是要编译的类的全部内容。 ②、通过输出流,把该字符串的内容写到工程下面指定的包中。 ③、对创建的java文件进行编译。 动态编译涉及的类有JavaCompiler、StandardJavaFileManager,具体如何编译看下面的例子。 ④、把编译后的字节码加载到内存,然后对其进行操作。 1 package co... 阅读全文
posted @ 2013-05-09 22:55 残剑_ 阅读(4878) 评论(1) 推荐(2) 编辑
摘要: Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。 Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。Field类:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)属性或实例属性,简单的理... 阅读全文
posted @ 2013-05-09 12:16 残剑_ 阅读(1711) 评论(0) 推荐(1) 编辑
摘要: 在java程序运行过程中,有许多的对象同时存在,但是程序结束运行或者JVM停止运行时这些对象都会消失。如何将这些对象保存起来以便下一次再将这些对象读入内存呢?或者如何将某些对象通过网络传到另一端的java程序?实施对象的这种操作叫做对象的序列化(或者叫做持久化),重新读入内存叫做反序列化。 基本数据类型的包装类和所有容器类都可以被序列化。用户自定义的类默认是不可以被序列化的。如果想要自己定义的类可以序列化就必须让这个类实现java.io.Serializable接口。下面看一个Demo: 1 package com.serializable; 2 3 import java.io.Fi... 阅读全文
posted @ 2013-05-08 21:26 残剑_ 阅读(861) 评论(0) 推荐(1) 编辑
摘要: java中字符流主要都是继承于Reader和Writer两个抽象类。用于对字符文本的读写操作。一、转换类流 1 package com.iotest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamReader; 8 import java.io.OutputStreamWriter; 9 10 pu... 阅读全文
posted @ 2013-05-08 20:48 残剑_ 阅读(4226) 评论(0) 推荐(0) 编辑
摘要: 在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流。 一、InputStream中的读取数据的方法如下: 1、int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾。 2、int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如果返回-1,则表示读到输入流的末尾。 3、int read(byte[] b, int off... 阅读全文
posted @ 2013-05-07 22:08 残剑_ 阅读(28952) 评论(2) 推荐(1) 编辑
摘要: 1、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量一样被初始化。如下面的例子package com.kkoolerter;import java.io.File;import java.io.FileInputStream; 阅读全文
posted @ 2013-05-05 13:25 残剑_ 阅读(37103) 评论(0) 推荐(3) 编辑