分类:
2009-07-19 22:45:53
1. 列出使用的机器 普通PC,要求: 机器名: 将finewine01设为主节点,其它的机器为从节点。 2. 下载和生成 从这里checkout,我选择trunk 3. 部署前的准备工作 start-all.sh这个脚本假定hadoop被安装在所有机器的同一个位置,每一台机器都用同一个路径存放hadoop的数据。 我们需要在每台机器上创建同样的目录结构。 以root登录到所有的机器,创建hadoop用户和目录结构。 start-all.sh脚本要启动所有机器的服务,需要对所有的机器进行ssh无密码的登录的能力。因此我们需要在每台机器上创建一个ssh key。在这个例子中,主节点也需要启动自己的服务,因此主节点同样需要做无密码的ssh登录设置。 用vi编辑/hadoop/hadoop-install/hadoop-0.10.0/conf/hadoop-env.sh,将下面的环境变量设置: export HADOOP_HOME=/hadoop/hadoop-install/hadoop-0.10.0 这个文件还有很多变量,这些变量的设定影响hadoop的运行。比如你以后执行脚本时发生ssh错误,就需要调整其中的HADOOP_SSH_OPTS变量。 在主节点上创建ssh keys,然后复制到各个从节点上。这些操作必须由先前创建的hadoop用户完成。不要su成hadoop用户来做。开启一个新shell,以hadoop用户的身份登录来完成这些操作。 在主节点上,拷贝刚才创建的公共key到一个名为authorized_keys的文件: 只需在主节点上运行ssh-kegen程序。其他节点的目录结构创建后,将刚才在主节点创建的keys通过scp拷贝到从节点的同样的目录上。 一旦成功在所有机器上创建ssh keys后,就可以开始在从节点上部署hadoop。 4. 部署hadoop到一个机器上 首先,我们部署hadoop到一个节点上(主节点)。确保运行正常后,加入其他从节点。下面所有的操作都是由登录后的hadoop用户进行的。 然后确保这些shell脚本文件都是unix格式,并且是可执行的(这些文件分别在/bin和/conf目录中)。 一个hadoop-site.xml的例子: fs.default.name The name of the default file system. Either the literal string mapred.job.tracker The host and port that the MapReduce job tracker runs at. If mapred.map.tasks define mapred.map tasks to be number of slave hosts mapred.reduce.tasks define mapred.reduce tasks to be number of slave hosts dfs.name.dir hadoop包含两个组件,分别是分布式文件系统和mapreduce功能。分布式文件系统允许你在多台普通机器上存储和复制文件。mapreduce可以让你很容易就执行并行程序任务。 分布式文件系统包含名字节点和数据节点。当一个客户想操作一个在文件系统上的文件时,它首先和名字节点联系,名字节点将告诉它在那个数据节点上可以 取得文件。名字节点负责调度和保存那些数据块保存和复制到在那些机器上。数据节点是数据仓库,保存真实的文件数据块。当你在同一台机器上运行名字节点和数 据节点的服务时,它同样会通过sockets来通讯,如同在不同机器上一样。 mapreduce是一种分布式运算,就如分布式文件系统一样,只不过分布的一个运算操作,而不是文件。负责mapreduce调度服务器叫做 mapreduce job tracker。每一个执行运算操作的节点都有一个守护叫task tracker,task tracker运行并且和job tracker通信。 主节点和从节点的通信以连续的heartbeat(5-10秒)的方式进行。如果从节点的heartbeat停止,主节点将假定该从节点失效并不再使用该节点。 mapredu.job.traker // mapreduce的主节点,”local”或者”host:port” mapred.map.tasks和mapred.reduce.tasks用于设定并行任务的数量。 dfs.name.dir // 名字节点用于存储数据节点的跟踪和调度信息 dfs.data.dir // 数据节点用于存储实际的数据块 mapred.system.dir // mapreduce tasker 存储自己的数据,仅仅在tasker所在的机器上,不在mapreduce主机上 mpred.local.dir // mapreduce 在节点上存储自己的本地数据。mapreduce使用巨大的本地空间来执行它的tasks。tasks退出时,mapreduce产生的中间文件并没有被删除。在每个节点上,这个属性是一样的。 dfs.replication // 冗余,单个文件将被拷贝到多少机器上。这个值不能高于的所有的数据节点的数量。否则守护启动时会看见很多错误信息。 在你启动hadoop服务之前,确保格式化名字节点 bin/hadoop namenode -format 现在可以启动hadoop服务了 bin/start-all.sh 停止hadoop服务可以使用下面的命令 bin/stop-all.sh 如果设置正确,会看到正常的输出信息 5. 部署Hadoop到多台机器上 一旦你在一台机器上成功运行hadoop,就可以将配置文件拷贝到其他的机器上。 对每台从节点机器都执行这个操作。然后编辑slaves文件,增加每一个slave到这个文件中,每行一个。编辑hadoop-site.xml的值,修改map和reduce的task的数量。修改replication属性。 6. 分布式搜索 产品系统一般每个索引库存100万条记录。50个服务器每秒处理20多个请求。 7. 同步代码到从节点上 hadoop提供同步代码到从节点的能力。这个功能是可选的,因为它会减慢服务启动的速度,并且有时候你并不想同步改变到从节点上。 虽然从节点可以和主节点同步,但在第一次,你仍然需要基本的安装到从节点上,以至同步的脚本生效。这些工作上面我们在上面已经做了,所以不需要做改变。 同步的启动是由主节点ssh到从节点上,并执行bin/hadoop-daemon.sh脚本。这个脚本调用rsync来同步主节点。这表示你需要能以无密码的方式由从节点登录到主节点。前面,我们设置了从主节点到从节点的无密码登录,现在则设置反向登录。 如果是由于rsync选项引起了问题,查看bin/hadoop-daemon.sh脚本,大约在82行有rsync的选项。 那么,首先第一件事情就是在conf/hadoop-env.sh文件中,设置hadoop主节点变量。如: 然后拷贝到所有从节点上,scp /hadoop/hadoop-installl/hadoop-x.x.x/conf/hadoop-env.sh hadoop@finewine02:/hadoop/hadoop-install/hadoop-x.x.x/hadoop-env.sh 最终,你需要登录到所有的从节点上,为每台机器创建一个ssh key。然后拷贝回到主节点,并追加到文件/hadoop/home/.ssh/authorized_keys文件中。在每个从节点上进行如下操作: ssh -l nutch finewine02 ssh-keygen -t rsa (Use empty responses for each prompt) scp id_rsa.pub hadoop@finewine01:/hadoop/home/finewine02.pub 在每台从节点机器完成上面的操作后,追加所有的文件到主节点的authorized_keys文件。 cd /hadooop/home 当这些操作完成后,每次运行bin/start-all.sh脚本,文件都会从主节点同步的每一个从节点。 8. 查看状况 端口 : 50070 端口:50060 50030 其他端口: |