<?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>ZhongZiChang&#039;s Dao &#187; 分布式系统与并行运算</title>
	<atom:link href="http://www.zhongzichang.com/archives/category/%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e4%b8%8e%e5%b9%b6%e8%a1%8c%e8%bf%90%e7%ae%97/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zhongzichang.com</link>
	<description></description>
	<lastBuildDate>Fri, 16 Sep 2011 17:36:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Map 和 Reduce 操作是如何完成的</title>
		<link>http://www.zhongzichang.com/archives/128</link>
		<comments>http://www.zhongzichang.com/archives/128#comments</comments>
		<pubDate>Wed, 06 Aug 2008 14:30:05 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[分布式系统与并行运算]]></category>
		<category><![CDATA[hadoop mapreduce]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=128</guid>
		<description><![CDATA[简介 这篇文章是描述Hadoop中的 Map和Reduce操作是如何完成的。如果你不了解map/reduce，可以先阅读Google的MapReduce编程模型文档。 Map 出于Map操作是并行性，输入的文件集将被分割成多块，这里叫 Filesplit 。如果某个文件过大而影响查找速度，那么它也会被分割成多块。分割操作是不会关心文件的内部逻辑结构的，例如面向文本的的分割是以任意字节数作为分割边界。对应每一个文件分割块，生成一个map任务。 当一个独立的map任务启动，它将对每个已配置的reduce任务打开一个相应的 output writer 。然后，从指定的 InputFormat 中获得 RecordReader 来读取它所有的 FileSplit 。InputFormat 分析输入，生成键值对(key-value pairs)。有些记录在FileSplit的边界处分割，InputFormat 必须能处理这些特殊的记录。例如，使用 TextInputFormat 读取到 FileSplit 的最后一行时会越过 FileSplit边界，同时，如果不是第一个FileSplit ，TextInputFormat 会忽略到新的第一行的内容。 没有必要一定让 InputFormat 同时生成有意义的 keys 和 valus 。例如 TextInputFormat 缺省的输出是由 文本行 为值 ，行开始的文件偏移量为键－大多数的应用仅使用文本行，而忽略掉偏移值。 键值对从 &#8230; <a href="http://www.zhongzichang.com/archives/128">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>简介</strong></p>
<p>这篇文章是描述Hadoop中的 Map和Reduce操作是如何完成的。如果你不了解map/reduce，可以先阅读Google的<a href="http://labs.google.com/papers/mapreduce.html " target="_blank">MapReduce</a>编程模型文档。</p>
<p><strong>Map</strong></p>
<p>出于Map操作是并行性，输入的文件集将被分割成多块，这里叫 Filesplit 。如果某个文件过大而影响查找速度，那么它也会被分割成多块。分割操作是不会关心文件的内部逻辑结构的，例如面向文本的的分割是以任意字节数作为分割边界。对应每一个文件分割块，生成一个map任务。</p>
<p>当一个独立的map任务启动，它将对每个已配置的reduce任务打开一个相应的 output writer 。然后，从指定的 InputFormat 中获得 RecordReader 来读取它所有的 FileSplit 。InputFormat 分析输入，生成键值对(key-value pairs)。有些记录在FileSplit的边界处分割，InputFormat 必须能处理这些特殊的记录。例如，使用 TextInputFormat 读取到 FileSplit 的最后一行时会越过 FileSplit边界，同时，如果不是第一个FileSplit ，TextInputFormat 会忽略到新的第一行的内容。</p>
<p>没有必要一定让 InputFormat 同时生成有意义的 keys 和 valus 。例如 TextInputFormat 缺省的输出是由 文本行 为值 ，行开始的文件偏移量为键－大多数的应用仅使用文本行，而忽略掉偏移值。</p>
<p>键值对从 Recordreader 中读取，然后被传递到 已配置好的 Mapper。用户使用键值对在自己提供的Mapper中做要做的事情，并调用 OutputCollector.collect。生成的输出必须使用一个key 类和一个 value 类。这是因为 Map 输出 将会被写到一个 SequenceFile(所有的记录必须是同一类型，如果你要保存不同的数据结构，可以用类继承)中。Map的输入和输出的键值对可以是没有具体的依据或者相关性的。</p>
<p>Mapper 输出同时也被分区，这表示它被写入到 Partitioner 指定的 output 。缺省的 HashPartitioner 对 key 的类 使用 hashcode 方法。这样 reduce 任务能达到一个平均的负载。</p>
<p>N 输入文件将生成 M map任务来运行，每个 map 任务生出的 output的数量等于系统已经配置好的 reduce 任务的数量。每一个输出文件将被面向一个指定好的reduce任务，并且map输出的同一键的键值对将被分配到同一个reduce 任务。</p>
<p><strong>Combine</strong></p>
<p>当map操作输出时，它的键值对保存在内存空间里。出于效率的理由，有时需要提供一个 combiner 类 来执行一个 reduce-type 方法。 如果 combiner 被用上了，map 输出的 key-value pairs 不是马上就被写到 output 。而是改为先收集到到列表中， 每一个键 对应 一个列表。 当一定数量的 key-value pairs 被写入后，这个缓存区被清空，其中每一个键对应的所有值都被传送到 combiner 的 reduce 方法，然后  combiner 再输出 key-valus pairs （如 原始的 map 操作输出一样）。</p>
<p><strong>Reduce</strong></p>
<p>当一个 reduce 任务启动， 它的输入 是分散在map任务运行的各个节点上的多个文件中。如果在分布模式下运行，这需要先拷贝到本地文件系统(copy 过程)。</p>
<p>一旦本地的所有数据有效，(append 过程) 将执行，所有的数据被追加到一个文件中。 这个文件是排序后合并的(sort 过程)，保证同一个键的所有记录是连续的。这使得 reduce 操作非常简单：文件被连续的读取，而同一个键的所有值将以迭代器的形式传递到 reduce 方法，直到碰到下一个key。</p>
<p>最后，每一个执行的 reduce 任务将生成一个 output 文件。文件的格式 由 JobConf.setOutputFormat 这个方法指定。 如果使用 SequentialOutputFormat ，key类和value 类也必须指定。</p>
<p>ps: 产品在进行第二轮内测和意见收集，我把思维搞的发散一点，想点其他的事情。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/128/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ibm发布支持mapreduce开发框架的eclipse插件</title>
		<link>http://www.zhongzichang.com/archives/88</link>
		<comments>http://www.zhongzichang.com/archives/88#comments</comments>
		<pubDate>Tue, 17 Apr 2007 14:59:22 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[分布式系统与并行运算]]></category>
		<category><![CDATA[开发工具]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/archives/88</guid>
		<description><![CDATA[IBM MapReduce Tools for Eclipse 是一个插件，支持在Eclipse内创建MapReduce应用。 它使用 Hadoop 开源 MapReduce框架， 可以在普通机器组成的大型集群上，运行数据密集型应用程序。 这个Eclipse插件支持一下的特征： • 以 Jar 文件的方式打包和部署Java项目到一个Hadoop服务器（本地或者远程）； • 辅助开发过程的cheat sheets； • 独立的视角，观看 Hadoop服务器，Hadoop分布式文件系统和当前job状态； • 提供向导，促进基于MapReduce框架的类的开发。 他如何工作？ 插件自动创建包含支持开发和测试Hadoop库的项目。同时提供MapReduce驱动的模板。项目完成后，插件使用SCP（安全拷贝）来发布代码到一个Hadoop服务器，然后通过SSH（安全Shell）远程执行。执行期间，插件通过HTTP协议与Hadoop任务跟踪器通信来显示job状态。 IBM MapReduce Tools for Eclipse 是一个插件，支持在Eclipse内创建MapReduce应用。 它使用 Hadoop 开源 MapReduce框架， 可以在普通机器组成的大型集群上，运行数据密集型应用程序。 这个Eclipse插件支持一下的特征： • 以 &#8230; <a href="http://www.zhongzichang.com/archives/88">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">IBM MapReduce Tools for Eclipse 是一个插件，支持在Eclipse内创建MapReduce应用。 它使用 Hadoop 开源 MapReduce框架， 可以在普通机器组成的大型集群上，运行数据密集型应用程序。</div>
<div id="_mcePaste">这个Eclipse插件支持一下的特征：</div>
<div id="_mcePaste">• 以 Jar 文件的方式打包和部署Java项目到一个Hadoop服务器（本地或者远程）；</div>
<div id="_mcePaste">• 辅助开发过程的cheat sheets；</div>
<div id="_mcePaste">• 独立的视角，观看 Hadoop服务器，Hadoop分布式文件系统和当前job状态；</div>
<div id="_mcePaste">• 提供向导，促进基于MapReduce框架的类的开发。</div>
<div id="_mcePaste">他如何工作？</div>
<div id="_mcePaste">插件自动创建包含支持开发和测试Hadoop库的项目。同时提供MapReduce驱动的模板。项目完成后，插件使用SCP（安全拷贝）来发布代码到一个Hadoop服务器，然后通过SSH（安全Shell）远程执行。执行期间，插件通过HTTP协议与Hadoop任务跟踪器通信来显示job状态。</div>
<p>IBM MapReduce Tools for Eclipse 是一个插件，支持在Eclipse内创建MapReduce应用。 它使用 Hadoop 开源 MapReduce框架， 可以在普通机器组成的大型集群上，运行数据密集型应用程序。<br />
这个Eclipse插件支持一下的特征：<br />
• 以 Jar 文件的方式打包和部署Java项目到一个Hadoop服务器（本地或者远程）；<br />
• 辅助开发过程的cheat sheets；<br />
• 独立的视角，观看 Hadoop服务器，Hadoop分布式文件系统和当前job状态；<br />
• 提供向导，促进基于MapReduce框架的类的开发。<br />
他如何工作？<br />
插件自动创建包含支持开发和测试Hadoop库的项目。同时提供MapReduce驱动的模板。项目完成后，插件使用SCP（安全拷贝）来发布代码到一个Hadoop服务器，然后通过SSH（安全Shell）远程执行。执行期间，插件通过HTTP协议与Hadoop任务跟踪器通信来显示job状态。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/88/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Hadoop搭建分布式存储和分布式运算集群</title>
		<link>http://www.zhongzichang.com/archives/83</link>
		<comments>http://www.zhongzichang.com/archives/83#comments</comments>
		<pubDate>Mon, 09 Apr 2007 11:59:03 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[分布式系统与并行运算]]></category>
		<category><![CDATA[应用平台和系统管理]]></category>
		<category><![CDATA[开发工具]]></category>
		<category><![CDATA[搜索引擎]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/archives/83</guid>
		<description><![CDATA[1.硬件和软件环境 普通PC，要求： cpu: 750M-1G mem: &#62;128M disk: &#62;10G 不需要太昂贵的机器。 机器名： finewine01 finewine02 finewine03 将finewine01设为主节点，其它的机器为从节点。 linux java 1.6.0 ssh , sshd 运行，用于Hadoop脚本来管理远程守护 rsync 软件同步 ntp 时间同步 2. 下载和生成 从这里checkout，我选择trunk http://svn.apache.org/repos/asf/lucene/hadoop/ 使用ant进行生成 3. 部署前的准备工作 在主节点的start-all.sh脚本执行后，主节点和从节点的所有服务运行。即这个脚本将启动主节点的服务，并ssh到从所有的节点，继而启动从节点的服务。 start-all.sh这个脚本假定hadoop被安装在所有机器的同一个位置，每一台机器都用同一个路径存放hadoop的数据。 我们需要在每台机器上创建同样的目录结构。 /hadoop /hadoop-install/hadoop-0.10.0 hadoop的0.10.0版的安装位置 /filesystem hadoop文件系统的根 &#8230; <a href="http://www.zhongzichang.com/archives/83">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1.硬件和软件环境</p>
<p>普通PC，要求：<br />
cpu: 750M-1G<br />
mem: &gt;128M<br />
disk: &gt;10G<br />
不需要太昂贵的机器。</p>
<p>机器名：<br />
finewine01<br />
finewine02<br />
finewine03</p>
<p>将finewine01设为主节点，其它的机器为从节点。</p>
<p>linux</p>
<p>java 1.6.0</p>
<p>ssh , sshd 运行，用于Hadoop脚本来管理远程守护</p>
<p>rsync 软件同步</p>
<p>ntp 时间同步</p>
<p>2. 下载和生成</p>
<p>从这里checkout，我选择trunk</p>
<p>http://svn.apache.org/repos/asf/lucene/hadoop/</p>
<p>使用ant进行生成</p>
<p>3. 部署前的准备工作<br />
在主节点的start-all.sh脚本执行后，主节点和从节点的所有服务运行。即这个脚本将启动主节点的服务，并ssh到从所有的节点，继而启动从节点的服务。</p>
<p>start-all.sh这个脚本假定hadoop被安装在所有机器的同一个位置，每一台机器都用同一个路径存放hadoop的数据。</p>
<p>我们需要在每台机器上创建同样的目录结构。<br />
/hadoop<br />
/hadoop-install/hadoop-0.10.0 hadoop的0.10.0版的安装位置<br />
/filesystem	hadoop文件系统的根<br />
/home	用户hadoop的主目录</p>
<p>以root登录到所有的机器，创建hadoop用户和目录结构。<br />
ssh -l root finewine01<br />
mkdir /hadoop<br />
mkdir /hadoop/hadoop-install<br />
mkdir /hadoop/filesystem<br />
mkdir /hadoop/home<br />
groupadd hadoop<br />
useradd -d /hadoop/home -g hadoop hadoop<br />
chown -R hadoop:hadoop /hadoop<br />
passwd hadoop hadooppassword</p>
<p>start-all.sh脚本要启动所有机器的服务，需要对所有的机器进行ssh无密码的登录的能力。因此我们需要在每台机器上创建一个ssh key。在这个例子中，主节点也需要启动自己的服务，因此主节点同样需要做无密码的ssh登录设置。</p>
<p>用vi编辑/hadoop/hadoop-install/hadoop-0.10.0/conf/hadoop-env.sh，将下面的环境变量设置：</p>
<p>export HADOOP_HOME=/hadoop/hadoop-install/hadoop-0.10.0<br />
export JAVA_HOME=/usr/java/jdk1.5.0_06<br />
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs<br />
export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves</p>
<p>这个文件还有很多变量，这些变量的设定影响hadoop的运行。比如你以后执行脚本时发生ssh错误，就需要调整其中的HADOOP_SSH_OPTS变量。<br />
同时需要注意的是，在初始的拷贝操作后，需要在设置hadoop-env.sh文件中的HADOOP_MASTER变量，这样程序才能通过rsync同步主节点的改变到所有的从节点上。</p>
<p>在主节点上创建ssh keys，然后复制到各个从节点上。这些操作必须由先前创建的hadoop用户完成。不要su成hadoop用户来做。开启一个新shell，以hadoop用户的身份登录来完成这些操作。<br />
cd /hadoop/home<br />
ssh-keygen -t rsa (Use empty responses for each prompt)<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /hadoop/home/.ssh/id_rsa.<br />
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost</p>
<p>在主节点上，拷贝刚才创建的公共key到一个名为authorized_keys的文件：<br />
cd /hadoop/home/.ssh<br />
cp id_rsa.pub authorized_keys</p>
<p>只需在主节点上运行ssh-kegen程序。其他节点的目录结构创建后，将刚才在主节点创建的keys通过scp拷贝到从节点的同样的目录上。<br />
scp /hadoop/home/.ssh/authorized_keys hadoop@finewine02:/hadoop/home/.ssh/authorized_keys<br />
第一次，你需要输入hadoop用户的密码。第一次登录到其他的机器上，ssh提示你是否选择将机器加入到已知的机器列表中，选择yes。这个keys文件拷贝后，以hadoop的身份从主节点到从节点的登录就不需要密码了。<br />
可以从主节点上以hadoop的身份测试:<br />
ssh finewine02<br />
接下来一个命令提示符将直接出现，不需要密码的。</p>
<p>一旦成功在所有机器上创建ssh keys后，就可以开始在从节点上部署hadoop。</p>
<p>4. 部署hadoop到一个机器上</p>
<p>首先，我们部署hadoop到一个节点上(主节点)。确保运行正常后，加入其他从节点。下面所有的操作都是由登录后的hadoop用户进行的。<br />
cp -R /path/to/build/* /hadoop/hadoop-install/hadoop-x.x.x</p>
<p>然后确保这些shell脚本文件都是unix格式，并且是可执行的(这些文件分别在/bin和/conf目录中)。</p>
<p>一个hadoop-site.xml的例子:</p>
<p>&lt;?xml version=&#8221;1.0&#8243;?&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;fs.default.name&lt;/name&gt;</p>
<p>&lt;value&gt;finewine01:9000&lt;/value&gt;</p>
<p>&lt;description&gt;The name of the default file system. Either the literal string<br />
&#8220;local&#8221; or a host:port for NDFS.&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;mapred.job.tracker&lt;/name&gt;</p>
<p>&lt;value&gt;finewine01:9001&lt;/value&gt;</p>
<p>&lt;description&gt;The host and port that the MapReduce job tracker runs at. If<br />
&#8220;local&#8221;, then jobs are run in-process as a single map and<br />
reduce task.&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;mapred.map.tasks&lt;/name&gt;</p>
<p>&lt;value&gt;2&lt;/value&gt;</p>
<p>&lt;description&gt;define mapred.map tasks to be number of slave hosts&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;mapred.reduce.tasks&lt;/name&gt;</p>
<p>&lt;value&gt;2&lt;/value&gt;</p>
<p>&lt;description&gt;define mapred.reduce tasks to be number of slave hosts&lt;/description&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;dfs.name.dir&lt;/name&gt;</p>
<p>&lt;value&gt;/hadoop/filesystem/name&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;dfs.data.dir&lt;/name&gt;</p>
<p>&lt;value&gt;/hadoop/filesystem/data&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;mapred.system.dir&lt;/name&gt;</p>
<p>&lt;value&gt;/hadoop/filesystem/mapreduce/system&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;mapred.local.dir&lt;/name&gt;</p>
<p>&lt;value&gt;/hadoop/filesystem/mapreduce/local&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;name&gt;dfs.replication&lt;/name&gt;</p>
<p>&lt;value&gt;1&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/configuration&gt;</p>
<p><strong>说明</strong><br />
fs.default.name // 缺省的文件系统 &#8220;local&#8221;或者&#8221;host:port&#8221;</p>
<p>hadoop包含两个组件，分别是分布式文件系统和mapreduce功能。分布式文件系统允许你在多台普通机器上存储和复制文件。mapreduce可以让你很容易就执行并行程序任务。</p>
<p>分布式文件系统包含名字节点和数据节点。当一个客户想操作一个在文件系统上的文件时，它首先和名字节点联系，名字节点将告诉它在那个数据节点上可以取得文件。名字节点负责调度和保存那些数据块保存和复制到在那些机器上。数据节点是数据仓库，保存真实的文件数据块。当你在同一台机器上运行名字节点和数据节点的服务时，它同样会通过sockets来通讯，如同在不同机器上一样。</p>
<p>mapreduce是一种分布式运算，就如分布式文件系统一样，只不过分布的一个运算操作，而不是文件。负责mapreduce调度服务器叫做mapreduce job tracker。每一个执行运算操作的节点都有一个守护叫task tracker，task tracker运行并且和job tracker通信。</p>
<p>主节点和从节点的通信以连续的heartbeat(5-10秒)的方式进行。如果从节点的heartbeat停止，主节点将假定该从节点失效并不再使用该节点。</p>
<p>mapredu.job.traker // mapreduce的主节点,&#8221;local&#8221;或者&#8221;host:port&#8221;</p>
<p>mapred.map.tasks和mapred.reduce.tasks用于设定并行任务的数量。</p>
<p>dfs.name.dir // 名字节点用于存储数据节点的跟踪和调度信息</p>
<p>dfs.data.dir // 数据节点用于存储实际的数据块</p>
<p>mapred.system.dir // mapreduce tasker 存储自己的数据，仅仅在tasker所在的机器上，不在mapreduce主机上</p>
<p>mpred.local.dir // mapreduce 在节点上存储自己的本地数据。mapreduce使用巨大的本地空间来执行它的tasks。tasks退出时，mapreduce产生的中间文件并没有被删除。在每个节点上，这个属性是一样的。</p>
<p>dfs.replication // 冗余，单个文件将被拷贝到多少机器上。这个值不能高于的所有的数据节点的数量。否则守护启动时会看见很多错误信息。</p>
<p>在你启动hadoop服务之前，确保格式化名字节点</p>
<p>bin/hadoop namenode -format</p>
<p>现在可以启动hadoop服务了</p>
<p>bin/start-all.sh</p>
<p>停止hadoop服务可以使用下面的命令</p>
<p>bin/stop-all.sh</p>
<p>如果设置正确，会看到正常的输出信息</p>
<p>5. 部署Hadoop到多台机器上</p>
<p>一旦你在一台机器上成功运行hadoop，就可以将配置文件拷贝到其他的机器上。<br />
如：<br />
scp -r /hadoop/hadoop-install/hadoop-x.x.x hadoop@finewine02:/hadoop/hadoop-install/</p>
<p>对每台从节点机器都执行这个操作。然后编辑slaves文件，增加每一个slave到这个文件中，每行一个。编辑hadoop-site.xml的值，修改map和reduce的task的数量。修改replication属性。</p>
<p>6. 分布式搜索</p>
<p>产品系统一般每个索引库存100万条记录。50个服务器每秒处理20多个请求。<br />
多处理器、多磁盘的系统，每个服务使用一个独立的磁盘和索引，这样机器的费用可以降低50%，电力解约到75%。一个多磁盘的机器并不能像单磁盘机器一样每秒处理那么多查询，但是它能处理更大的索引数量，因此平均起来效率更高一些。</p>
<p>7. 同步代码到从节点上</p>
<p>hadoop提供同步代码到从节点的能力。这个功能是可选的，因为它会减慢服务启动的速度，并且有时候你并不想同步改变到从节点上。</p>
<p>虽然从节点可以和主节点同步，但在第一次，你仍然需要基本的安装到从节点上，以至同步的脚本生效。这些工作上面我们在上面已经做了，所以不需要做改变。</p>
<p>同步的启动是由主节点ssh到从节点上，并执行bin/hadoop-daemon.sh脚本。这个脚本调用rsync来同步主节点。这表示你需要能以无密码的方式由从节点登录到主节点。前面，我们设置了从主节点到从节点的无密码登录，现在则设置反向登录。</p>
<p>如果是由于rsync选项引起了问题，查看bin/hadoop-daemon.sh脚本，大约在82行有rsync的选项。</p>
<p>那么，首先第一件事情就是在conf/hadoop-env.sh文件中，设置hadoop主节点变量。如:<br />
export HADOOP_MASTER=finewine01:/hadoop/hadoop-install/hadoop-x.x.x</p>
<p>然后拷贝到所有从节点上，scp /hadoop/hadoop-installl/hadoop-x.x.x/conf/hadoop-env.sh hadoop@finewine02:/hadoop/hadoop-install/hadoop-x.x.x/hadoop-env.sh</p>
<p>最终，你需要登录到所有的从节点上，为每台机器创建一个ssh key。然后拷贝回到主节点，并追加到文件/hadoop/home/.ssh/authorized_keys文件中。在每个从节点上进行如下操作：</p>
<p>ssh -l nutch finewine02<br />
cd /hadoop/home/.ssh</p>
<p>ssh-keygen -t rsa (Use empty responses for each prompt)<br />
Enter passphrase (empty for no passphrase):<br />
Enter same passphrase again:<br />
Your identification has been saved in /hadoop/home/.ssh/id_rsa.<br />
Your public key has been saved in /hadoop/home/.ssh/id_rsa.pub.<br />
The key fingerprint is:<br />
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc nutch@localhost</p>
<p>scp id_rsa.pub hadoop@finewine01:/hadoop/home/finewine02.pub</p>
<p>在每台从节点机器完成上面的操作后，追加所有的文件到主节点的authorized_keys文件。</p>
<p>cd /hadooop/home<br />
cat finewine*.pub &gt;&gt; .ssh/authorized_keys</p>
<p>当这些操作完成后，每次运行bin/start-all.sh脚本，文件都会从主节点同步的每一个从节点。</p>
<p>8. 查看状况</p>
<p>端口 : 50070<br />
dfs的状态</p>
<p>端口：50060<br />
tracker状态</p>
<p>50030<br />
map/reduce管理</p>
<p>其他端口：<br />
dfs.secondary.info.port 50090<br />
dfs.datanode.port 50010<br />
dfs.info.port 50070<br />
mapred.job.tracker.info.port 50030<br />
mapred.task.tracker.report.port 50050<br />
tasktracker.http.port 50060</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开始Hadoop</title>
		<link>http://www.zhongzichang.com/archives/64</link>
		<comments>http://www.zhongzichang.com/archives/64#comments</comments>
		<pubDate>Tue, 07 Nov 2006 16:22:02 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[分布式系统与并行运算]]></category>

		<guid isPermaLink="false">http://zhongzichang.com/archives/64</guid>
		<description><![CDATA[+ 下载和安装 设置环境变量 $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 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack * stop-all.sh 停止所有的Hadoop。 * start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack。 * stop-mapred.sh 停止Map/Reduce守护 * start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode * stop-dfs.sh 停止DFS守护 + 配置文件 $HADOOP_INSTALL/hadoop/conf 目录下包含Hadoop的配置文件. * &#8230; <a href="http://www.zhongzichang.com/archives/64">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>+ 下载和安装</p>
<p>设置环境变量 $HADOOP_INSTALL 作为Hadoop的安装目录。</p>
<p>各个版本的hadoop都是安装在$HADOOP_INSTALL这个目录下。</p>
<p>然后在$HADOOP_INSTALL创建一个软连接hadoop连接到指定版本的hadoop。这样运行hadoop的所有工具都是在$HADOOP_INSTALL/hadoop/bin下，所有的配置文件都是放置在$HADOOP_INSTALL/hadoop/conf下。</p>
<p>+ 启动脚本</p>
<p>$HADOOP_INSTALL/hadoop/bin目录下包含运行Hadoop DFS 和 Map/Reduce守护的脚本:</p>
<p>* start-all.sh 启动所有的Hadoop守护。包括namenode, datanode, jobtracker, tasktrack<br />
* stop-all.sh 停止所有的Hadoop。<br />
* start-mapred.sh 启动Map/Reduce守护。包括Jobtracker和Tasktrack。<br />
* stop-mapred.sh 停止Map/Reduce守护<br />
* start-dfs.sh 启动Hadoop DFS守护.Namenode和Datanode<br />
* stop-dfs.sh 停止DFS守护</p>
<p>+ 配置文件<br />
$HADOOP_INSTALL/hadoop/conf 目录下包含Hadoop的配置文件.</p>
<p>* hadoop-env.sh 包含hadoop使用的环境变量集.设置这些变量可以影响Hadoop守护进程的行为。<br />
* slaves 这个文件列出slave守护所在的主机(datanode和tasktracker)，一行一个。缺省情况下，只包含一个条目&#8221;localhost&#8221;<br />
* hadoop-default.xml 这个文件包含一些一般性的缺省设置.关系hadoop守护和map/reduce jobs，不要修改这个文件。<br />
* mapred-default.xml 这个文件包含站点特定的设置，关系Map/Reduce守护和jobs.缺省情况下这个文件是空的。在这个文件中设置的属性将会覆盖hadoop-default.xml中的Map/Reduce设置，用这个文件来整理你的站点的map/reduce的行为。<br />
* hadoop-site.xml 这个文件包含关系到所有hadoop守护和Map/Reduce jobs的特定设置。缺省情况下，这个文件是空的.这个文件中的设置将会覆盖hadoop-default.xml和mapred-default.xml中的设置。这个文件包含的设置关系到Hadoop安装过程中的所有服务器和客户端，对于实例讲，就是namnode和jobtracker的位置。</p>
<p>+ 在单一节点上设置Hadoop</p>
<p>一个HDFS实例(包含一个namenode和一个单一的datanode)和<br />
一个Map/Reduce集群(包含一个jobtracker和单一的tasktracker)</p>
<p>下面的“基本配置”的过程仅适用于大型集群。</p>
<p>+ 基本配置</p>
<p>下面的配置一些是必需，一些是推荐。</p>
<p>* hadoop环境设置<br />
确保在hadoop-env.sh中设置JAVA_HOME变量，指向想要使用的java安装目录。可以根据你的需要在hadoop-env.sh中设置其他的环境变量。HADOOP_HOME变量是根据启动脚本自动推断的.</p>
<p>*Jobtracker和Namenode的设置<br />
指出在哪里运行你的namenode和jobtracker。<br />
fs.default.name // 设置namenodes(host:port)<br />
mapred.job.tracker // 设置jobtrackers(host:port)<br />
这些设置在hadoop-site.xml文件中，你可能需要设置下面的端口:<br />
dfs.datannode.port<br />
dfs.info.port<br />
mapred.job.tracker.info.port<br />
mapred.task.tracker.output.port<br />
mapred.task.tracker.report.port</p>
<p>* 数据的路径设置<br />
指出数据的走向。<br />
包括namenode将namespace checkpoint和编辑记录存储在哪里，datanode将在哪里存储文件系统块，Map/Reduce中间输出的存储位置和HDFS的临时存储。这些路径的缺省值是指到/tmp下的各个位置。这些设置必须都是在文件hadoop-site.xml文件中。hadoop-site.xml中的这些设置是很重要的，否则它们会被Map/Reduce jobs的客户配置所覆盖。给下面的变量设定相应的值:<br />
dfs.name.dir<br />
dfs.data.dir<br />
dfs.client.buffer.dir<br />
mapred.local.dir</p>
<p>+ 格式化namenode</p>
<p>开始安装Hadoop的第一步就是格式化Hadoop文件系统，在集群的本地文件系统上实现。    不要格式化一个正在运行的Hadoop文件系统，这会引起所有的数据都会被擦除。要格式化文件系统(初始化dfs.name.dir变量指定的目录)，执行下面的命令：% $HADOOP_INSTALL/hadoop/bin/hadoop namenode -format</p>
<p>+ 启动一个单节点集群</p>
<p>运行命令：<br />
% $HADOOP_INSTALL/hadoop/bin/start-all.sh<br />
将会在你的机器上启动一个Namenode,Datanode,Jobtracker和一个Tasktracker。</p>
<p>+ 在安装中分离配置<br />
在上面的例子中，Hadoop集群用到的配置文件都在Hadoop安装过程中列出。在升级到新的版本时，这将时非常麻烦的，因为所有的自定义配置必须重新创建。从安装中分离配置时可以的。要做到这样，选择一个放置Hadoop配置文件的目录(如：/foo/bar/hadoop-config)，拷贝hadoop-site.xml, slaves和Hadoop-env.sh到这个目录。你可以设置环境变量HADOOP_CONFIG_DIR指到这个目录，或者将其以选项的形式传递一个Hadoop脚本 &#8211;config .在这里例子中，集群将以以下的命令启动和停止：<br />
% $HADOOP_INSTALL/hadoop/bin/start-all.sh &#8211;config /foo/bar/hadoop-config<br />
% $HADOOP_INSTALL/hadoop/bin/stop-all.sh &#8211;config /foo/bar/hadoop-config<br />
传递一个脚本的配置目录的路径必须是绝对路径。</p>
<p>+ 启动一个大型集群<br />
* 确保集群内所有的节点上相同路径的Hadoop包都是可访问的。如果你在安装时使用分开配置，确保配置目录也是可访问。<br />
* 集群中的slaves文件必须是一行表示一个节点<br />
* 然后按照上面的“基本配置”这一段来进行<br />
* 格式化Namenode<br />
* 在要运行Namenode的节点上执行<br />
% $HADOOP_INSTALL/hadoop/bin/start-dfs.sh<br />
这将会启动HDFS(Namnode和Datanode)。Namenode就是你执行这条命令的机器，Datanode在上面所提到的slaves文件列出。<br />
* 在要运行Jobtracker的机器上执行<br />
% $HADOOP_INSTALL/hadoop/bin/start-mapred.sh<br />
这将启动Map/Reduce集群(Jobtracker和Tasktracker)。Jobtracker在你执行这条命令的机器上执行，而Tasktracker在slaves文件中列出的机器上运行。<br />
* 上面两个命令同样可以带一个 &#8211;config选项执行。</p>
<p>+ 停止集群<br />
分别在Jobtracker和Namenode 上执行<br />
% $HADOOP_INSTALL/hadoop/bin/stop-mapred.sh<br />
% $HADOOP_INSTALL/hadoop/bin/stop-dfs.sh<br />
这些命令同样接受&#8211;config选项。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/64/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

