hadoop平台搭建

g假设当前已经安装了java6和ssh等一系列必需软件。所使用的hadoo版本为hadoop-0.20.2。

 

  • 首先配置ssh的自动登录

                1.  必须为每台机子创建相同的用户,以进行hadoop操作。我们这里建立hadoop用户。

# roupadd -g 3000 hadoop # useradd -g 3000 -u 3000 hadoop //为hadoop用户添加登录密码 # passwd hadoop Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully //将/etc/passwd中hadoop的默认启动脚本从/bin/sh修改为/bin/bash,这样当用hadoop用户操作时,会比较方便(比如tab键自动补全等操作)。 # vim /etc/passwd //创建hadoop用户的根目录 # mkdir /home/hadoop //修改hadoop根目录的拥有者 # chown hadoop:hadoop /home/hadoop/

                    这样,每台机子的hadoop用户就建立好了。

 

2.   接下里,要使master的hadoop用户能够直接通过密钥ssh到slaves机子上。方法参见http://blog.csdn.net/wenlei_zhouwl/archive/2010/10/01/5917579.aspx。

       通过以上操作,master用户就可以自动登录到slaves机子上了。

       另外还要让master通过密钥ssh到自己机子上,让slaves通过密钥ssh到master机子上。

 

 

  • 搭建hadoop。

                     假设,现在有3台机子,一台机子master作为NameNode,JobTracker。另两台机子slave1、slave2作为DataNode,TaskTracker。

                    1.  在master主机上,将hadoop压缩包解压到/opt/文件夹下,并设置其拥有者为hadoop。

                    2.  设置{hadoop-install-dir}/conf/hadoop-env.sh内的环境变量JAVA_HOME。

                    3.  配置{hadoop-install-dir}/conf/core-site.xml,该文件中配置的是整个分布式系统的信息。其默认配置及介绍在{hadoop-install-dir}/src/core/core-default.xml中。

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>dfs.name.dir</name> <value>/opt/hadoop-0.20.2/data/hdfs/NameNode</value> </property> <property> <name>dfs.data.dir</name> <value>/opt/hadoop-0.20.2/data/hdfs/DataNode</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop-0.20.2/data/hdfs/tmp</value> </property> </configuration>

                    4.  配置{hadoop-install-dir}/conf/hdfs-site.xml,该文件中配置的是数据存储方面的信息。其默认配置及介绍在{hadoop-install-dir}/src/hdfs/hdfs-default.xml中。

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

                    5.  配置{hadoop-install-dir}/conf/mapred_site.xml,该文件中配置的是mapreduce方面的信息。其默认配置及介绍在{hadoop-install-dir}/src/mapred/mapred_default.xml中。

<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>

                    6.  在master上配置如何联系slaves。因为master作Namenode用,所以需要在hosts文件中加上集群中所有机器的IP地址及其对应的主机名。          

                                1.  修改{hadoop-install-dir}/conf/masters的内容。

master

                                2.  修改{hadoop-install-dir}/conf/slaves的内容。

slave1 slave2  

                                3.  修改/etc/hosts中的内容,添加下列内容。

172.16.8.20 master 172.16.8.21 slave1 172.16.8.22 slave2  

                                这样,master机子配置完成。
                    7.  将master机子上的hadoop安装目录{hadoop-install-dir}整个拷贝到slave机子的相同目录(即/opt/)下,设置其拥有者为hadoop。设置{hadoop-install-dir}/conf/hadoop-env.sh内的环境变量JAVA_HOME。

                    8.  在slave1上配置如何联系master。对于slave,只需要在/etc/hosts文件中加上本机IP地址和Namenode机器的IP地址。

172.16.8.20 master 172.16.8.21 slave1

                    9.  在slave2上配置如何联系master。对于slave,只需要在/etc/hosts文件中加上本机IP地址和Namenode机器的IP地址。

172.16.8.20 master 172.16.8.22 slave2

                    10.  格式化NameNode,在master机子上,进入{hadoop-install-dir},运行指令

$ bin/hadoop namenode -format

                    11.  启动hadoop,进入master的{hadoop-install-dir}。在bin/下面有很多启动脚本,可以根据自己的需要来启动。

//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启动HadoopDFS守护.Namenode和Datanode //stop-dfs.sh停止DFS守护 //比如我要启动所有守护程序,只需要输入 $ bin/start-all.sh //如果要停止,只需要输入 $ bin/stop-all.sh  

 


                    通过上述步骤,hadoop搭建成功,至于更细节的设置,以后再细细研究。

 

                     12.   查看进程情况:

                                jps可以用来查看当前hadoop运行的进程情况。
                                bin/hadoop dfsadmin –report可以用来查看当前hadoop的运行情况。

 

                     13.  问题1:

                               如果删掉了namenode的tmp.dir,那么在重新bin/hadoop namenode –format,并启动时,datanode容易出现类似问题:java.io.IOException: Incompatible namespaceIDs in /home/hadoop/data: namenode namespaceID = 1214734841; datanode namespaceID = 1600742075。
                                解决方法:

删除所有机子上的tmp.dir,并重新bin/hadoop namenode –format。

                     13.  问题2:

                                运行mapreduce时报错:could only be replicated to 0 nodes, instead of 1。

                                解决方法:

删除所有机子上的tmp.dir,并重新bin/hadoop namenode –format。

你可能感兴趣的:(java,mapreduce,hadoop,unix,ssh,平台)