Hadoop集群搭建

1. 首先,准备好hadoop安装包和JDK,hadoop-1.0.3的svn版本库:http://svn.apache.org/repos/asf/hadoop/common/tags/release-1.0.3/, hadoop-1.0.3的安装包地址:http://archive.apache.org/dist/hadoop/core/hadoop-1.0.3/ 

2. 建立后各个机器之间的ssh信任关系,假设现在有A,B两台机器,要建立起两台机器直接的信任关系,执行如下操作:  

  1)A机器免密码登陆到B机器  

        $ ssh-keygen –t rsa

        $ ssh-copy-id –i ~/.ssh/id_rsa.pub  hadoop@B

   2) B机器免密码登陆到A机器

        $ ssh-keygen –t rsa

        $ ssh-copy-id –i ~/.ssh/id_rsa.pub  hadoop@A

3. 修改hadoop配置文件,修改的文件包括,hadoop-env.sh , core-site.xml , hdfs-site.xml, mapred-site.xml,masters和slaves文件

    需要注意的是,masteers文件中,配置的是secondary-namenode的ip地址,不要被master这个单词迷惑了,slaves中配置是需要启动datanode和tasktracker机器的IP地址。

    hadoop-env.sh,必须配置JAVA_HOME的路径

    image

  core-site.xml配置文件,需要在/home/hadoop/目录下,新建hadoop_tmp文件夹,这个文件夹作为hadoop.tmp.dir参数的value。

image

<?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://172.18.147.69:9000</value>

</property>

<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/hadoop/hadoop_tmp/hadoop-${user.name}</value>

</property>


</configuration>

 

hdfs-site.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>3</value>
</property>

</configuration>

 

mapred-site.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>172.18.147.69:9001</value>

</property>



</configuration>

masters文件没有配置任何内容,即没有secondary-namenode,如下:

image

 

slaves文件有一个IP地址,即只有一个datanode,如下:

image

 

 

4. 将hadoop的安装包和JDK拷贝到每一台机器上

5. 在作为namenode的机器上执行格式化namenode命令和启动集群命令:

   1) ./hadoop namenode –format

    image

  2)执行启动集群的命令,./start-all.sh

     image

6. 使用jps命令查看namenode和datanode上的进程:

1)namenode上执行jps命令后的结果:

image

2)datanode上执行jps命令的结果:

image

7. 需要无法启动namenode的情况,在~/hadoop-1.0.3/logs/目录下,查看文件:hadoop-hadoop-namenode-ubuntu.ubuntu.log, 可以发现有异常抛出:

 

2015-01-27 10:20:40,912 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2015-01-27 10:20:40,919 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2015-01-27 10:20:40,920 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2015-01-27 10:20:40,920 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: NameNode metrics system started
2015-01-27 10:20:40,923 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: java.lang.IllegalArgumentException: Illegal character in \
scheme name at index 0:  hdfs://172.18.147.69:9000
        at java.net.URI.create(URI.java:859)
        at org.apache.hadoop.fs.FileSystem.getDefaultUri(FileSystem.java:131)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:228)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:262)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:496)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1279)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)
Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 0:  hdfs://172.18.147.69:9000
        at java.net.URI$Parser.fail(URI.java:2829)
        at java.net.URI$Parser.checkChars(URI.java:3002)
        at java.net.URI$Parser.checkChar(URI.java:3012)
        at java.net.URI$Parser.parse(URI.java:3028)
        at java.net.URI.<init>(URI.java:595)
        at java.net.URI.create(URI.java:857)
        ... 6 more

经排查,原因是在配置core-site.xml中,hadoop.tmp.dir属性的时候,value值中多了空格,把空格去掉后,一切恢复正常:

image

8. Hadoop集群的监控页面,有HDFS是监控页面和Map/Reduce的监控页面

  1)在namenode的50070端口可以看到namenode的运行情况:http://172.18.147.69:50070/dfshealth.jsp 

image

 

    2)在namenode的50030端口是jobtracker的状态页面,上面可以查看任务的运行情况:http://172.18.147.69:50030/jobtracker.jsp

image

9. Demo程序试跑

     在hdfs的/input目录下随便放一个文件,

image

     hadoop-1.0.3/目录下执行:

     bin/hadoop jar hadoop-examples-1.0.3.jar wordcount /input /output 

image   

image

在mapreduce的监控页面上可以看到任务的执行情况:

image

当任务执行完后,就可以在output目录下看到执行的结果,这个例子跑的是wordcount,可以看到结果中统计了所有单词的出现次数:

image

posted @ 2015-01-27 11:37  justinzhang  阅读(6378)  评论(0编辑  收藏  举报