<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>格物致知</title>
	<atom:link href="http://leeing.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://leeing.org</link>
	<description>keep Thinking</description>
	<lastBuildDate>Wed, 14 Mar 2012 06:47:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>有序数组中数字的出现次数</title>
		<link>http://leeing.org/2011/11/02/%e6%9c%89%e5%ba%8f%e6%95%b0%e7%bb%84%e4%b8%ad%e6%95%b0%e5%ad%97%e7%9a%84%e5%87%ba%e7%8e%b0%e6%ac%a1%e6%95%b0/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/11/02/%e6%9c%89%e5%ba%8f%e6%95%b0%e7%bb%84%e4%b8%ad%e6%95%b0%e5%ad%97%e7%9a%84%e5%87%ba%e7%8e%b0%e6%ac%a1%e6%95%b0/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 12:31:37 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/11/02/%e6%9c%89%e5%ba%8f%e6%95%b0%e7%bb%84%e4%b8%ad%e6%95%b0%e5%ad%97%e7%9a%84%e5%87%ba%e7%8e%b0%e6%ac%a1%e6%95%b0/</guid>
		<description><![CDATA[据说是微软的一道题。 题目：在排序数组中，找出给定数字的出现次数，比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 算法的思想，使用修改后的二分查找法，找到最左边 2 的下标为 1 ，最后边 2 的下标为 3，然后返回3 – 1 + 1 = 3 即可，算法复杂度为 logN。 编码的时候，用一个变量 last 来存储本次查找到的位置，然后根据情况变换查找方向，就可以分别确定 left 和 right 下标的值。 代码实现： package org.leeing.interview; /** * 题目：在排序数组中，找出给定数字的出现次数，比如 [1, 2, 2, 2, 3] * 2 的出现次数是3次。 * * @author leeing * */ public class NumberCounter { [...]


Related posts:<ol><li><a href='http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 对称矩阵'>对称矩阵</a></li>
<li><a href='http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 三角螺旋矩阵'>三角螺旋矩阵</a></li>
<li><a href='http://leeing.org/2011/02/24/java-%e5%a4%9a%e7%ba%bf%e7%a8%8b%ef%bc%9a%e6%8d%95%e6%8d%89%e7%ba%bf%e7%a8%8b%e4%b8%ad%e9%80%83%e9%80%b8%e7%9a%84%e5%bc%82%e5%b8%b8/' rel='bookmark' title='Permanent Link: Java 多线程：捕捉线程中逃逸的异常'>Java 多线程：捕捉线程中逃逸的异常</a></li>
<li><a href='http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/' rel='bookmark' title='Permanent Link: PeerSim 源代码分析之一：程序入口'>PeerSim 源代码分析之一：程序入口</a></li>
<li><a href='http://leeing.org/2010/01/17/java-%e7%9a%84%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92/' rel='bookmark' title='Permanent Link: Java 的引用传递'>Java 的引用传递</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/11/02/%e6%9c%89%e5%ba%8f%e6%95%b0%e7%bb%84%e4%b8%ad%e6%95%b0%e5%ad%97%e7%9a%84%e5%87%ba%e7%8e%b0%e6%ac%a1%e6%95%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>内螺旋矩阵</title>
		<link>http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 13:00:11 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[面试]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/</guid>
		<description><![CDATA[暂且就叫内螺旋矩阵吧。 int i=5; 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 int i=6 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 [...]


Related posts:<ol><li><a href='http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 三角螺旋矩阵'>三角螺旋矩阵</a></li>
<li><a href='http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 对称矩阵'>对称矩阵</a></li>
<li><a href='http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 蛇形矩阵'>蛇形矩阵</a></li>
<li><a href='http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/' rel='bookmark' title='Permanent Link: PeerSim 源代码分析之一：程序入口'>PeerSim 源代码分析之一：程序入口</a></li>
<li><a href='http://leeing.org/2010/01/17/java-%e7%9a%84%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92/' rel='bookmark' title='Permanent Link: Java 的引用传递'>Java 的引用传递</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>三角螺旋矩阵</title>
		<link>http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 02:56:03 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/</guid>
		<description><![CDATA[据说是Yahoo的一道题，题目如下： 打印如下矩阵，如果 n=7 则输出： 1 2 18 3 19 17 4 20 27 16 5 21 28 26 15 6 22 23 24 25 14 7 8 9 10 11 12 13 　 注意观察可知，数字增加的方向及走过的步数是有规律的： &#160; 向下 7 步 向右 6 步 斜上 5 步 向下 4 步 向右 3 步 斜上 2 步 向下 1 [...]


Related posts:<ol><li><a href='http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 内螺旋矩阵'>内螺旋矩阵</a></li>
<li><a href='http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 对称矩阵'>对称矩阵</a></li>
<li><a href='http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 蛇形矩阵'>蛇形矩阵</a></li>
<li><a href='http://leeing.org/2010/01/17/java-%e7%9a%84%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92/' rel='bookmark' title='Permanent Link: Java 的引用传递'>Java 的引用传递</a></li>
<li><a href='http://leeing.org/2010/01/17/java-constructor/' rel='bookmark' title='Permanent Link: Java 的构造方法'>Java 的构造方法</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>对称矩阵</title>
		<link>http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 09:33:21 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[面试]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/</guid>
		<description><![CDATA[有道的面试题。 写一个函数，打印一个如下的 n x n 的矩阵： &#160; n = 5 1 1 1 1 1 1 2 3 2 1 1 3 6 3 1 1 2 3 2 1 1 1 1 1 1 n = 6 1 1 1 1 1 1 1 2 3 3 2 1 1 3 6 6 3 [...]


Related posts:<ol><li><a href='http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 三角螺旋矩阵'>三角螺旋矩阵</a></li>
<li><a href='http://leeing.org/2011/10/31/%e5%86%85%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 内螺旋矩阵'>内螺旋矩阵</a></li>
<li><a href='http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 蛇形矩阵'>蛇形矩阵</a></li>
<li><a href='http://leeing.org/2010/01/17/java-constructor/' rel='bookmark' title='Permanent Link: Java 的构造方法'>Java 的构造方法</a></li>
<li><a href='http://leeing.org/2010/01/17/java-%e7%9a%84%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92/' rel='bookmark' title='Permanent Link: Java 的引用传递'>Java 的引用传递</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>蛇形矩阵</title>
		<link>http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 06:43:54 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[算法]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/</guid>
		<description><![CDATA[经常看到一道笔试题，是关于打印矩阵的，今天抽空写了一个实现。题目如下： 打印如下形式的矩阵： 当 n=5 时： 1 2 9 10 25 4 3 8 11 24 5 6 7 12 23 16 15 14 13 22 17 18 19 20 21 当 n=6 时: 1 2 9 10 25 26 4 3 8 11 24 27 5 6 7 12 23 28 16 15 14 13 [...]


Related posts:<ol><li><a href='http://leeing.org/2010/01/17/java-%e7%9a%84%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92/' rel='bookmark' title='Permanent Link: Java 的引用传递'>Java 的引用传递</a></li>
<li><a href='http://leeing.org/2010/01/17/java-constructor/' rel='bookmark' title='Permanent Link: Java 的构造方法'>Java 的构造方法</a></li>
<li><a href='http://leeing.org/2011/10/17/%e5%af%b9%e7%a7%b0%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 对称矩阵'>对称矩阵</a></li>
<li><a href='http://leeing.org/2011/02/24/java-%e5%a4%9a%e7%ba%bf%e7%a8%8b%ef%bc%9a%e6%8d%95%e6%8d%89%e7%ba%bf%e7%a8%8b%e4%b8%ad%e9%80%83%e9%80%b8%e7%9a%84%e5%bc%82%e5%b8%b8/' rel='bookmark' title='Permanent Link: Java 多线程：捕捉线程中逃逸的异常'>Java 多线程：捕捉线程中逃逸的异常</a></li>
<li><a href='http://leeing.org/2011/10/18/%e4%b8%89%e8%a7%92%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/' rel='bookmark' title='Permanent Link: 三角螺旋矩阵'>三角螺旋矩阵</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/10/17/%e8%9e%ba%e6%97%8b%e7%9f%a9%e9%98%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appfuse 乱码问题</title>
		<link>http://leeing.org/2011/09/09/appfuse-%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/09/09/appfuse-%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 12:22:38 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Appfuse]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/09/09/appfuse-%e5%ad%97%e7%ac%a6%e7%bc%96%e7%a0%81%e9%97%ae%e9%a2%98/</guid>
		<description><![CDATA[Appfuse是一个辅助快速开发的JAVA EE框架，本文主要阐述在Appfuse中出现的字符编码问题。 1.    DisplayTag表格导出Excel乱码问题。 &#160; （项目搭建初期导出的Excel中文会乱码） 解决方法：在项目的根目录中的pom.xml中加入一个依赖： &#60;dependency&#62; &#60;groupId&#62;displaytag&#60;/groupId&#62; &#60;artifactId&#62;displaytag-export-poi&#60;/artifactId&#62; &#60;version&#62;1.2&#60;/version&#62; &#60;/dependency&#62; 同时，修改displaytag.properties ，在此文件中增加一行：export.excel.class=org.displaytag.export.excel.ExcelHssfView。 2.    DisplayTag表格上方出现乱码。&#160; &#160; 在项目搭建的初始阶段，表格上方的&#8221;共找到。。。到。。条&#8221;这些全是乱码。 在Netbeans中打开displayTag.zh_CN.properties，看到的也全是乱码。 解决方法是，用记事本打开这个文件，另存为UTF-8格式；注意Netbeans对这种编辑方式支持并不好，所以直接使用记事本更简单快捷。 3.    在jsp文件中，输入中文时，提示保存为ISO-8859-1的格式，在部署页面中出现乱码。&#160; &#160; &#160; &#160; 在Netbeans中如果直接保存会产生乱码。 解决方法：用记事本或其它文本编辑器，直接在此jsp文件中输入中文并保存为UTF-8格式即可。 但是请注意，由于JSTL已经提供了良好的i18N功能，在默认情况下，最好使用&#60;fmt:message value=&#8221;"&#62;的形式，而不是直接在页面中使用中文。 4.    NamedQuery的字符编码问题 queryParams.put(&#8220;runningStatus&#8221;, &#8220;作为备件&#8221;) // 这种写法无法查询出结果 解决方案： String temp = new String(&#8220;作为备件&#8221;.getBytes(), &#8220;UTF-8&#8243;); // 必须用这种方式 queryParams.put(&#8220;runningStatus&#8221;, temp); NameQuery 主要出现在 model包下，具体请查看相应的源代码。 5.    Appfuse提供了文件上传功能，但没有提供文件下载功能。在自己写了个文件下载功能以后，文件下载时文件名，中文名会乱码 解决方案： response.setHeader(&#8220;Content-Disposition&#8221;, &#8220;attachment;fileName=&#8221;+java.net.URLEncoder.encode(name, &#8220;UTF-8&#8243;)); 其中，name为保存文件名的变量。 6.    MySQL中文问题 重新运行并配置MySQL，将默认的字符编码设置为UTF-8格式，并确保导入的数据也是UTF-8格式。 PS:本文是用 Word [...]


No related posts.]]></description>
		<wfw:commentRss>http://leeing.org/2011/09/09/appfuse-%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一道面试题：List 中的 Remove 方法</title>
		<link>http://leeing.org/2011/06/16/adobe-%e7%9a%84%e4%b8%80%e9%81%93%e9%9d%a2%e8%af%95%e9%a2%98/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/06/16/adobe-%e7%9a%84%e4%b8%80%e9%81%93%e9%9d%a2%e8%af%95%e9%a2%98/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 12:07:36 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/06/16/adobe-%e7%9a%84%e4%b8%80%e9%81%93%e9%9d%a2%e8%af%95%e9%a2%98/</guid>
		<description><![CDATA[有一道题，是关于 List.remove( int ) 和 List.remove (Object ) 两个方法的，在 List 的元素类型为 Integer 的时候，究竟调用的哪个 API，即：删除对应的整数，或者是删除对应下标的元素 ? 下边来看 List 接口出现的 API: remove E remove(int index) 移除列表中指定位置的元素（可选操作）。将所有的后续元素向左移动（将其索引减 1）。返回从列表中移除的元素。 参数： index &#8211; 要移除的元素的索引 返回： 以前在指定位置的元素 抛出： UnsupportedOperationException &#8211; 如果列表不支持 remove 操作 IndexOutOfBoundsException &#8211; 如果索引超出范围 (index &#60; 0 &#124;&#124; index &#62;= size()) &#160; remove boolean remove(Object o) 从此列表中移除第一次出现的指定元素（如果存在）（可选操作）。如果列表不包含元素，则不更改列表。更确切地讲，移除满足 (o==null ? [...]


Related posts:<ol><li><a href='http://leeing.org/2010/04/19/scala-collection-list/' rel='bookmark' title='Permanent Link: Scala 集合框架：List'>Scala 集合框架：List</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/06/16/adobe-%e7%9a%84%e4%b8%80%e9%81%93%e9%9d%a2%e8%af%95%e9%a2%98/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hadoop平台优化综述 (2)</title>
		<link>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-2/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-2/#comments</comments>
		<pubDate>Thu, 12 May 2011 02:45:03 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[hadoop]]></category>
		<category><![CDATA[Hadoop]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-2/</guid>
		<description><![CDATA[4.&#160;&#160;&#160;&#160; 从系统实现角度进行优化 4.1&#160;&#160;&#160; 在可移植性和性能之间进行权衡 论文[16]主要针对HDFS进行了优化，它分析了HDFS性能低下的两个原因：调度延迟和可移植性假设。 （1） 调度延迟 Hadoop采用的是动态调度算法，即：当某个tasktracker上出现空slot时，它会通过HEARBEAT（默认时间间隔为3s，当集群变大时，会适当调大）告诉jobtracker，之后jobtracker采用某种调度策略从待选task中选择一个，再通过HEARBEAT告诉tasktracker。从整个过程看，HDFS在获取下一个task之前，一直处于等待状态，这造成了资源利用率不高。此外，由于tasktracker获取新task后，其数据读取过程是完全串行化的，即：tasktracker获取task后，依次连接namenode，连接datanode并读取数据，处理数据。在此过程中，当tasktracker连接namenode和datanode时，HDFS仍在处于等待状态。 为了解决调度延迟问题，可以考虑的解决方案有：重叠I/O和CPU阶段（pipelining），task预取（task prefetching），数据预取（data prefetching）等 （2）可移植性假设 为了增加Hadoop的可移植性，它采用java语言编写，这实际上也潜在的造成了HDFS低效。Java尽管可以让Hadoop的可移植性增强，但是它屏蔽了底层文件系统，这使它没法利用一些底层的API对数据存储和读写进行优化。首先，在共享集群环境下，大量并发读写会增加随机寻道，这大大降低读写效率；另外，并发写会增加磁盘碎片，这将增加读取代价（HDFS适合文件顺序读取）。 为了解决该问题，可以考虑的解决方案有：修改tasktracker上的线程模型，现在Hadoop上的采用的模型是one thread per client，即每个client连接由一个线程处理（包括接受请求，处理请求，返回结果）；修改之后，可将线程分成两组，一组用于处理client通信（Client Thread），一组用于存取数据（Disk Threads，可采用one thread per disk）。 4.2&#160;&#160;&#160; Prefetching与preshuffling 论文[7]提出了两种优化策略，分别为Prefetching和preshuffling。 (1) PreFetching preFetching包括Block-intra prefetching和Block-inter prefetching： Block-intra Prefetching对block内部数据处理方式进行优化。采用的策略是以双向处理（bi-directional processing）方式提升效率，即一端进行计算，一端预取将要用到的数据（同步机制）。 需解决两个问题，一是计算和预取同步。借用进度条（processing bar）的概念，进度条监控两端的进度，当同步将被打破时，调用一个信号。二是确定合适的预取率。通过实验发现，预取数据量并不是越多越好。采用重复实验的方法确定预取数据率。 Block-inter Prefetching在block层面预取数据。当某个task正在处理数据块A1时，预测器预测它接下来要处理的数据块，假设是A2，A3，A4,则将这几个数据块读到task所在的rack上，这样加快了task接下来数据读取速度。 (2) PreShuffling 数据被map task处理之前，由预测器判断每条记录将要被哪个reduce task处理，将这些数据交由靠近该reduce task的节点上的map task处理。 主页：http://incubator.apache.org/projects/hama.html 4.3&#160;&#160;&#160; Five Factors 论文[8]分析了5个影响Hadoop性能的因素，分别为计算模型，I/O模型，数据解析，索引和调度，同时针对这5个因素提高了相应的提高性能的方法，最后实验证明，通过这些方法可以将Hadoop性能提高2.5到3.5倍。 （1） 计算模型 在Hadoop中，map task产生的中间结果经过sort-merge策略处理后交给reduce task。而这种处理策略（指sort-merge）不能够定制，这对于有些应用而言（有些应用程序可能不需要排序处理），性能不佳。此外，即使是需要排序归并处理的，sort-merge也并不是最好的策略。 本文实现了Fingerprinting [...]


Related posts:<ol><li><a href='http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-1/' rel='bookmark' title='Permanent Link: Hadoop平台优化综述 (1)'>Hadoop平台优化综述 (1)</a></li>
<li><a href='http://leeing.org/2011/02/24/java-%e5%a4%9a%e7%ba%bf%e7%a8%8b%ef%bc%9a%e6%8d%95%e6%8d%89%e7%ba%bf%e7%a8%8b%e4%b8%ad%e9%80%83%e9%80%b8%e7%9a%84%e5%bc%82%e5%b8%b8/' rel='bookmark' title='Permanent Link: Java 多线程：捕捉线程中逃逸的异常'>Java 多线程：捕捉线程中逃逸的异常</a></li>
<li><a href='http://leeing.org/2011/02/25/ubuntu-10-10-%e5%ae%89%e8%a3%85-hadoop-cdh-beta4/' rel='bookmark' title='Permanent Link: Ubuntu 10.10 安装 Hadoop (CDH beta4)'>Ubuntu 10.10 安装 Hadoop (CDH beta4)</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hadoop平台优化综述 (1)</title>
		<link>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-1/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-1/#comments</comments>
		<pubDate>Thu, 12 May 2011 02:35:43 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[hadoop]]></category>
		<category><![CDATA[Hadoop]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-1/</guid>
		<description><![CDATA[1.&#160;&#160;&#160;&#160; 概述 随着企业要处理的数据量越来越大，MapReduce思想越来越受到重视。Hadoop是MapReduce的一个开源实现，由于其良好的扩展性和容错性，已得到越来越广泛的应用。Hadoop作为一个基础数据处理平台，虽然其应用价值已得到大家认可，但仍存在很多问题，以下是主要几个： （1）&#160;&#160;&#160;&#160; Namenode/jobtracker单点故障。 Hadoop采用的是master/slaves架构，该架构管理起来比较简单，但存在致命的单点故障和空间容量不足等缺点，这已经严重影响了Hadoop的可扩展性。 （2）&#160;&#160;&#160;&#160; HDFS小文件问题。在HDFS中，任何block，文件或者目录在内存中均以对象的形式存储，每个对象约占150byte，如果有1000 0000个小文件，每个文件占用一个block，则namenode需要2G空间。如果存储1亿个文件，则namenode需要20G空间。这样namenode内存容量严重制约了集群的扩展。 （3）&#160;&#160;&#160;&#160; jobtracker同时进行监控和调度，负载过大。为了解决该问题，yahoo已经开始着手设计下一代Hadoop MapReduce（见参考资料1）。他们的主要思路是将监控和调度分离，独立出一个专门的组件进行监控，而jobtracker只负责总体调度，至于局部调度，交给作业所在的client。 （4）&#160;&#160;&#160;&#160; 数据处理性能。 很多实验表明，其处理性能有很大的提升空间。Hadoop类似于数据库，可能需要专门的优化工程师根据实际的应用需要对Hadoop进行调优，有人称之为“Hadoop Performance Optimization” (HPO)。 为了提高其数据性能，很多人开始优化Hadoop。总结看来，对于Hadoop，当前主要有几个优化思路： （1）&#160; 从应用程序角度进行优化。由于mapreduce是迭代逐行解析数据文件的，怎样在迭代的情况下，编写高效率的应用程序，是一种优化思路。 （2）&#160; 对Hadoop参数进行调优。当前hadoop系统有190多个配置参数，怎样调整这些参数，使hadoop作业运行尽可能的快，也是一种优化思路。 （3） 从系统实现角度进行优化。这种优化难度是最大的，它是从hadoop实现机制角度，发现当前Hadoop设计和实现上的缺点，然后进行源码级地修改。该方法虽难度大，但往往效果明显。 以上三种思路出发点均是提高hadoop应用程序的效率。实际上，随着社会的发展，绿色环保观念也越来越多地融入了企业，因而很多人开始研究Green Hadoop，即怎样让Hadoop完成相应数据处理任务的同时，使用最少的能源（见参考资料[14][15]）。 本文主要介绍了当前学术界的一些优化思路，有人试图从Hadoop自动配置角度对Hadoop进行优化，但更多的是从系统实现角度进行优化，概括其优化点和实验效果如下： （1）&#160;&#160; 论文[6]试图从参数自动调优角度对Hadoop进行优化，论文只给出了可能的解决方案，并未给出实现，因而效果不可知。但它给出了一种Hadoop优化的新思路，即怎样对其190多个配置参数进行自动调整，使应用程序执行效率最高。 （2）&#160; 论文[7]提出prefetching和preshuffling机制，在不同负载不同规模集群下测试，效率提升了约73%。 （3）&#160; 论文[8]研究了影响Hadoop效率的五个因素，并通过提出相应的解决方案，使Hadoop效率提高了2.5~3.5倍。 （4）&#160; 论文[9]为Hadoop提供了一种索引机制– Trojan Index，同时提出了一种高效的join算法– Trojan Join，实验表明，效率比Hadoop和HadoopDB高很多。 除了学术界的优化，工业界也在不断进行优化以适应自己公司的产品需要，主要有： （1）Baidu公司。baidu对Hadoop中关键组件使用C++进行了重写（包括map, shuffler和reducer等），经他们内部测试（5 nodes，40GB data），效率提升了约20%（见参考资料[4]）。 （2）淘宝。淘宝针对自己集群特点（作业小，slot多，作业之间有依赖，集群共享，有些作业有时效性），对jobtracker和namenode进行了优化，据其官方博客称，其jobtracker有较大性能提升，且namenode吞吐量提升了8+倍（见参考资料[5]）。但其具体优化方法，未公开。 2.&#160;&#160;&#160;&#160; 从应用程序角度进行优化 （1） 避免不必要的reduce任务 如果要处理的数据是排序且已经分区的，或者对于一份数据, 需要多次处理, 可以先排序分区；然后自定义InputSplit, 将单个分区作为单个mapred的输入；在map中处理数据, Reducer设置为空。 [...]


Related posts:<ol><li><a href='http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-2/' rel='bookmark' title='Permanent Link: Hadoop平台优化综述 (2)'>Hadoop平台优化综述 (2)</a></li>
<li><a href='http://leeing.org/2011/02/25/ubuntu-10-10-%e5%ae%89%e8%a3%85-hadoop-cdh-beta4/' rel='bookmark' title='Permanent Link: Ubuntu 10.10 安装 Hadoop (CDH beta4)'>Ubuntu 10.10 安装 Hadoop (CDH beta4)</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/05/12/hadoop%e5%b9%b3%e5%8f%b0%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PeerSim 源代码分析之一：程序入口</title>
		<link>http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 03:17:58 +0000</pubDate>
		<dc:creator>leeing</dc:creator>
				<category><![CDATA[PeerSim]]></category>

		<guid isPermaLink="false">http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/</guid>
		<description><![CDATA[PeerSim 的文档资料很少，有很多地方看上去概念很模糊，去年曾经翻译过官方的几篇文档，按顺序汇总如下： PeerSim 中文教程：解析 Cycle-based 模式仿真 PeerSim 中文教程：编写一个新协议 PeerSim 中文教程：拓扑生成器 PeerSim 中文教程：Event-driven 模型&#160; 当时翻译的时候，并没有深入地去学习，最近由于仿真的需要，又静下心来研究了几天，有些东西发现在文档中是无法得到一个很清晰的解释，看了一下PeerSim的源代码规模也并不是很大，所以决定 RTFSC (Read the F *** ing Source Code : –) ，源代码本身就是最好的学习资料，当然，这需要足够的耐心。 不过不得不说的是 PeerSim 的源代码的缩进真是有点混乱。 首先，是程序的入口 peersim.Simulator.java： package peersim; import java.io.*; import peersim.cdsim.*; import peersim.config.*; import peersim.core.*; import peersim.edsim.*; /** * peersim.Simulator.java * * 程序的入口，主要作用就是读取配置文件，并根据仿真类型来调用仿真引擎。 */ public class Simulator { // 某些静态变量，一看就懂。 [...]


Related posts:<ol><li><a href='http://leeing.org/2010/07/02/peersim-turtorial-how-to-write-a-new-protocol/' rel='bookmark' title='Permanent Link: PeerSim 中文教程：编写一个新协议'>PeerSim 中文教程：编写一个新协议</a></li>
<li><a href='http://leeing.org/2010/07/04/peersim-tutorial-example-of-event-driven-model/' rel='bookmark' title='Permanent Link: PeerSim 中文教程：Event-driven 模型'>PeerSim 中文教程：Event-driven 模型</a></li>
<li><a href='http://leeing.org/2010/07/02/peersim-turtorial-topology-generator/' rel='bookmark' title='Permanent Link: PeerSim 中文教程：拓扑生成器'>PeerSim 中文教程：拓扑生成器</a></li>
<li><a href='http://leeing.org/2011/02/24/java-%e5%a4%9a%e7%ba%bf%e7%a8%8b%ef%bc%9a%e6%8d%95%e6%8d%89%e7%ba%bf%e7%a8%8b%e4%b8%ad%e9%80%83%e9%80%b8%e7%9a%84%e5%bc%82%e5%b8%b8/' rel='bookmark' title='Permanent Link: Java 多线程：捕捉线程中逃逸的异常'>Java 多线程：捕捉线程中逃逸的异常</a></li>
<li><a href='http://leeing.org/2010/06/30/peersim-turtorial-analyse-of-cycle-based-model/' rel='bookmark' title='Permanent Link: PeerSim 中文教程：解析 Cycle-based 模式仿真'>PeerSim 中文教程：解析 Cycle-based 模式仿真</a></li>
</ol>]]></description>
		<wfw:commentRss>http://leeing.org/2011/03/17/peersim-%e6%ba%90%e4%bb%a3%e7%a0%81%e5%88%86%e6%9e%90%e4%b9%8b%e4%b8%80%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%85%a5%e5%8f%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

