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的路徑
core-site.xml配置文件,需要在/home/hadoop/目錄下,新建hadoop_tmp文件夾,這個文件夾作為hadoop.tmp.dir參數的value。
<?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,如下:
slaves文件有一個IP地址,即只有一個datanode,如下:
4. 將hadoop的安裝包和JDK拷貝到每一台機器上
5. 在作為namenode的機器上執行格式化namenode命令和啟動集群命令:
1) ./hadoop namenode –format
2)執行啟動集群的命令,./start-all.sh
6. 使用jps命令查看namenode和datanode上的進程:
1)namenode上執行jps命令后的結果:
2)datanode上執行jps命令的結果:
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值中多了空格,把空格去掉后,一切恢復正常:
8. Hadoop集群的監控頁面,有HDFS是監控頁面和Map/Reduce的監控頁面
1)在namenode的50070端口可以看到namenode的運行情況:http://172.18.147.69:50070/dfshealth.jsp
2)在namenode的50030端口是jobtracker的狀態頁面,上面可以查看任務的運行情況:http://172.18.147.69:50030/jobtracker.jsp
9. Demo程序試跑
在hdfs的/input目錄下隨便放一個文件,
hadoop-1.0.3/目錄下執行:
bin/hadoop jar hadoop-examples-1.0.3.jar wordcount /input /output
在mapreduce的監控頁面上可以看到任務的執行情況:
當任務執行完后,就可以在output目錄下看到執行的結果,這個例子跑的是wordcount,可以看到結果中統計了所有單詞的出現次數: