Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7624410 建立时间:2006年5月29日 |

| |
[Apache(jakarta)]Hadoop系列-fs包之代码实现 软件技术
lhwork 发表于 2006/12/13 15:33:06 |
在此包中,最重要的是FileSystem抽象类。它定义了文件系统中涉及的一些基本操作,如:create,rename,delete...另外包括
一些分布式文件系统具有的操作:copyFromLocalFile, copyToLocalFile,...类似于Ftp中put和get操作。
LocalFileSystem和DistributedFileSystem,继承于此类,分别实现了本地文件系统和分布式文件系统。
了解了最重要的类之后,看一看它的一系列stream类:
* FSOutputStream
在原有OutputStream基础之上添加了获得文件指针偏移量的getPos方法。可以通过FileSystem的
createRaw获得它的实例。这里存在一个疑问,这个扩展的getPos方法在fs包中没有被使用。如果在其余包中同样没有被使用,那么扩展就显得多
余。
* FSInputStream在原有InputStream基础之上同样添加了getPos方法,同时可 |
|
[Apache(jakarta)]Hadoop系列-IPC之代码实现 软件技术
lhwork 发表于 2006/12/13 15:32:41 |
* 整体结构:在IPC包中,最重要的3个类是Server,Client和RPC,它们具有层次化的结构。
1. RPC
类是对Server、Client的具体化。在RPC类中规定,客户程序发出请求调用时,参数类型必须是Invocation;从服务器返回的值类型必须
是ObjectWritable。为了加强理解,可以查看测试类TestIPC。在那里,规定的参数类型与返回值类型都是LongWritable。
2. RPC
类是对Server、Client的包装,简化用户的使用。如果一个类需充当服务器,只需通过RPC类的静态方法getServer获得Server实
例,然后start。同时此类提供协议接口的实现。如果一个类充当客户端,可以通过getProxy或者waitForProxy获得一个实现了协议接口
的proxy object,与服务器端交互。为了加强理解,可以查看测试类TestRPC,在那里,实现的协议接口为TestProtocol。
|
|
[Apache(jakarta)]Hadoop Inside (3) 软件技术
lhwork 发表于 2006/12/13 15:30:23 |
之前的MapReduce Demo只能在一台机器上运行,现在是时候让它分布式运行了。在对MapReduce的运行流程和FileSystem进行了简单研究之后,现在尝试从配置着手,看看怎样让Hadoop在两台机器上面同时运行MapReduce。
首先看回这里
String tracker = conf.get("mapred.job.tracker", "local");
if ("local".equals(tracker)) {
this.jobSubmitClient = new LocalJobRunner(conf);
} else {
this.jobSubmitClient = (JobSubmission |
|
[Apache(jakarta)]Hadoop Inside (2) 软件技术
lhwork 发表于 2006/12/13 15:29:50 |
Hadoop 的文件系统,最重要是 FileSystem 类,以及它的两个子类 LocalFileSystem 和 DistributedFileSystem。 这里先分析 FileSystem。
抽象类 FileSystem,提高了一系列对文件/目录操作的接口,还有一些辅助方法。分别说明一下:
1. open,create,delete,rename等,非abstract,部分返回 FSDataOutputStream,作为流进行处理。
2. openRaw,createRaw,renameRaw,deleteRaw等,abstract,部分返回 FSInputStream,可以随机访问。
3. lock,release,copyFromLocalFile,moveFromLocalFile,copyToLocalFile 等abstract method,提供便利作用,从方法命名可以看出作用。
特别说明,Hadoop的文件系统,每个文件都有一个checksum,一个crc文件。因此FileSystem里面的部分代码对此进行了 |
|
[Apache(jakarta)]Distributed Hadoop Execution 软件技术
lhwork 发表于 2006/12/13 15:29:08 |
Hadoop 带有一个ant的build脚本,修改target
compile-examples中的include路径,设为自己的demo路径。然后运行 ant
examples,会在build脚本目录下面生成一个build目录,里面已经包含了构建好的jar包等。
建一个JobServerMain,内容为
public static void main(String[] args) throws IOException, InterruptedException
{
JobTracker.main(new String[]{});
}
用于启动JobTracker。再建一个TaskServerMain,内容
public static void main(String[] args) throws IOException< |
|
[Apache(jakarta)](转载)Hadoop笔记--不需要分布式编程经验地分布式编程 软件技术
lhwork 发表于 2006/12/13 15:27:56 |
Hadoop 是 Google labs 的MapReduce的一个实现,Nutch项目的全部数据处理都构建在其之上。MapReduce是一种简化的分布式编程模式,让程序可以自动在普通机器组成的集群中以并行方式分布执行。
就如同java程序员可以不考虑内存泄露一样,MapReduce程序员也不许要关心海量数据如何被分配到多台机器上,不需要考虑机器失效的处理,不需要考虑这些机器间如何协作共同完成工作,程序员不需要什么并发处理或者分布式系统的经验,就可以进行分布式的编程。
MapReduce来源于函数式编程的Map,Reduce概念,Map是映射,Reduce是规约。说了非常简单,就真的是非常简单的,先看
Hadoop自带的sample-WordCount ,再看Nutch里的Indexer,Fetcher两个实战的例子,最后阅读Hadoop
wiki 上的HadoopMapReduce,很快就可以上手:
MapReduce过程简记:
1.根据输入路径,先用FileSplit把输入的文件剁碎,根据Inp |
|
[Apache(jakarta)]Hadoop Learning (3) 软件技术
lhwork 发表于 2006/12/13 15:27:02 |
上面的例子还不完整,统计数据没有排序,而且输出的output文件是二进制格式的。现在修改一下
Statistic.java:
public static void main(String[] args) throws IOException
{
Configuration defaults = new Configuration();
new JobClient(defaults).getFs().delete(new File("tmp/output/"));
File tempDir = new File("tmp/stat-temp-"+Intege |
|
[Apache(jakarta)]Hadoop Learning (2) 软件技术
lhwork 发表于 2006/12/13 15:26:37 |
之前做的Demo太无聊了,决心改造一下~~
1. 输入格式。
之前的程序,StatMapper莫名其妙被输入了一堆key,value,应该是一种默认的输入格式,找了一下,原来是这个: org.apache.hadoop.mapred.InputFormatBase, 继承了InputFormat接口。接口里面有一个
FileSplit[] getSplits(FileSystem fs, JobConf job, int numSplits)
throws IOException;
看来所有输入输出都必须以文件为单位存放了,就像Lucene一样。一般输入数据都是按照行来分隔的,看来一般用这个InputFormatBase就可以了。
2. 输入数据。
这东东本来就是用来高效处理海量数据的,于是我想到了那iHome的ActionLog....,加起来好几百个M的,符合要求吧。这里统计一下这几天,指令被调用的次数。
|
|
[Apache(jakarta)]Hadoop Learning (1) 软件技术
lhwork 发表于 2006/12/13 15:26:12 |
My Demo
Statistic.java
1. 初始化配置文件,临时文件存放目录,还有具体的Job。
Configuration defaults = new Configuration();
File tempDir = new File("tmp/stat-temp-"+Integer.toString(
new Random().nextInt(Integer.MAX_VALUE)));
JobConf statJob = new JobConf(defaults, Statis |
|
[Apache(jakarta)]开始Hadoop 软件技术
lhwork 发表于 2006/12/13 15:12:08 |
+ 下载和安装 设置环境变量 $HADOOP_INSTALL 作为Hadoop的安装目录。 各个版本的hadoop都是安装在$HADOOP_INSTALL这个目录下。 然
后在$HADOOP_INSTALL创建一个软连接hadoop连接到指定版本的hadoop。这样运行hadoop的所有工具都是在$
HADOOP_INSTALL/hadoop/bin下,所有的配置文件都是放置在$HADOOP_INSTALL/hadoop/conf下。 + 启动脚本 $HADOOP_INSTALL/hadoop/bin目录下包含运行Hadoop DFS 和 Map/Reduce守护的脚本: * start-all.sh 启 |
|
|