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

| |
[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 启 |
|
[Spring]反思spring:由Ruby on Rails想到的 软件技术
lhwork 发表于 2006/12/11 18:08:15 |
众所周知,RoR里面的指导原则有:
第一条是较小的软件,这意味着你编写较少的程序行。程序小就能加速开发,错误也较少,使得程序较容易理解、维护和增强。对编写较小程序做出贡献的Ruby的一个特性就是它假设该架构本身能够并应该处理元数据.
第二条是对配置的协定原理,这意味着Rails不用配置文件,而是依靠一些简单的编程协定,让它通过利用应用程序已有的信息和在运行的数据库,解决它需要知道什么这个问题。
Spring一个非常灵活的一个框架,灵活的同时也造成了一定的复杂性。我个人眼中的spring应该从RoR学到的东西应该有:不用写一行xml语句就可以配置好AOP常规的事务管理,约定高于配置。
当前spring支持的事务管理配置,大体有以下两种配置方式,为了方便举例子,所以借用了javaEE技术专家"江南白衣"的两段代码
(1)、spring2.0版本支持的事务管理<be |
|
[算法]堆的应用 软件技术
lhwork 发表于 2006/12/11 11:18:17 |
一个文件中包含了1亿个随机整数,如何快速的找到最大(小)的100万个数
字?这类问题其实就是“优先树”算法,用堆(Heap)很容易解决。首先用含100万个数字的数组组成堆。从文件间读取数字,并插入到Heap中。如果
Heap已经满了,则删除根节点,并重整;直到所有的数字均处理完毕。
堆排序是Heap的副产品,其实它大部分时间是用在“优先决策”上,上面的例子只是其中之一,其他场所比如操作系统的任务调用、优先队列等。
public static Comparable[] findMin |
|
[算法]二叉树 软件技术
lhwork 发表于 2006/12/11 11:17:48 |
和堆类似,二叉树也是一种很奇特的数据结构。它包含了根节点,节点最多只有一个左右节点。
父节点和左右子节点之间有一定的关系:
1. 父节点比左节点大(小)。
2. 父节点比右节点小(大)。
通过这种特性,二叉树的查找定位非常方便,比数组、链表的查找效率要高很多。在我的机器上,从100万个随机整数中查找一个整数平均需要0.00386毫秒。可见效率确实很高。
|
|
[J2SE]JDK5新特性——java.util.concurrent 线程池(2) 软件技术
lhwork 发表于 2006/12/11 11:16:16 |
许多长时间运行的应
用有时候需要定时运行任务完成一些诸如统计、优化等工作,比如在电信行业中处理用户话单时,需要每隔1分钟处理话单;网站每天凌晨统计用户访问量、用户
数;大型超时凌晨3点统计当天销售额、以及最热卖的商品;每周日进行数据库备份;公司每个月的10号计算工资并进行转帐等,这些都是定时任务。通过
java的并发库concurrent可以轻松的完成这些任务,而且非常的简单。
|
|
|