Eclipse3.3(windows7)鏈接遠程hadoop(RedHat.Enterpris...

Eclipse3.3(windows7)鏈接遠程hadoop(RedHat.Enterprise.Linux.5)並測試程序 java

1、hadoop集羣安裝

機器名 node

IP linux

做用 apache

NameNode windows

192.168.1.1 app

NameNode、master、jobTracker eclipse

DataNode1 ssh

192.168.1.2 jsp

DataNode、slave、taskTracker ide

DataNode2

192.168.1.3

DataNode、slave、taskTracker

機器知足1G內存,2G 更好。Linux5安裝後,可不啓動圖形界面,節約內存。

安裝步驟:

一、安裝RedHat.Enterprise.Linux.5

用介質安裝linux,安裝完後修改機器名:$hostname 機器名。

在/etc/hosts中添加機器名和相應的IP:

127.0.0.1                localhost

192.168.1.1           NameNode

192.168.1.2           DataNode1

192.168.1.3           DataNode2

修改/etc/inittab文件:

id:5:initdefault: 改成id:3:initdefault:

從新啓動OS就不會進入圖形界面了

二、開啓ssh服務

#servicesshd start

能夠在windows下用SSH Secure Shell Client來測試一下。

三、關閉防火牆(全部機器)

# chkconfig  --levels  2345  iptables off

注意:這步很是重要。若是不關閉,會出現找不到datanode問題。

四、創建ssh無密碼登陸

(1)在NameNode上實現無密碼登陸本機:

$ ssh-keygen -t rsa

直接回車,完成後會在~/.ssh/生成兩個文件:id_rsa和id_rsa.pub。

$ ssh-keygen -t dsa

直接回車,完成後會在~/.ssh/生成兩個文件:id_dsa和id_dsa.pub。

$cat~/.ssh/id_rsa.pub  >>~/.ssh/authorized_keys  將生成的密鑰串在鑰匙鏈上

$cat~/.ssh/id_dsa.pub  >>~/.ssh/authorized_keys  將生成的密鑰串在鑰匙鏈上

$chmod 600  ~/.ssh/authorized_keys。

(2)實現NameNode無密碼登陸其餘DataNode:

把NameNode上的authorized_keys 文件追加到dataNode的authorized_keys 內(以

192.168.0.2節點爲例):

a.拷貝NameNode 的authorized_keys 文件:

$ scp authorized_keys mark@192.168.0.2:/home/mark/

b.登陸192.168.0.2,執行$ cat authorized_keys >>~/.ssh/authorized_keys

其餘的dataNode執行一樣的操做。

注意:若是配置完畢,若是namenode依然不能訪問datanode,能夠修改datanode的

authorized_keys的讀寫權限(很重要!):

$ chmod 600 ~/.ssh/authorized_keys。

 

五、安裝jdk1.6

下載地址:http://java.sun.com/javase/downloads/widget/jdk6.jsp,下載後,直接安裝。本例的安裝路徑爲/usr/java/jdk1.6.0_31。

安裝後,添加以下語句到/etc/profile中:

exportJAVA_HOME==/usr/java/jdk1.6.0_31

exportJRE_HOME==/usr/java/jdk1.6.0_31 /jre

exportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

exportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

注意:每臺機器的java環境最好一致。安裝過程當中若有中斷,切換爲root 權限來安裝。

 

六、安裝hadoop

下載hadoop-0.20.2.tar.gz

解壓:$tar –zvxf hadoop-0.20.2.tar.gz

把Hadoop的安裝路徑添加到環/etc/profile 中:

exportHADOOP_HOME=/home/mark/hadoop-0.20.2

exportPATH=$HADOOP_HOME/bin:$PATH

 

七、配置hadoop

hadoop的主要配置都在hadoop-0.20.2/conf 下。

(1)在conf/hadoop-env.sh中配置Java 環境(namenode與datanode 的配置相同):

$gedit hadoop-env.sh

$export JAVA_HOME=/usr/java/jdk1.6.0_31

(2)配置conf/masters和conf/slaves 文件:(只在namenode上配置)

masters:192.168.1.1

slaves:

192.168.1.2

192.168.1.3

(3)配置conf/core-site.xml,conf/hdfs-site.xml 及conf/mapred-site.xml(簡單配置,datanode的配置相同)

core-site.xml:

<configuration>

<!---global properties -->

<property>

<name>hadoop.tmp.dir</name>

<value>/home/mark/tmp</value>

<description>Abase for other temporary directories.</description>

</property>

<!--file system properties -->

<property>

<name>fs.default.name</name>

<value>hdfs://192.168.1.1:9000</value>

</property>

</configuration>

hdfs-site.xml:(replication 默認爲3,若是不修改,datanode少於三臺就會報錯)

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

mapred-site.xml:

<configuration>

<property>

<name>mapred.job.tracker</name>

<value>192.168.1.1:9001</value>

</property>

</configuration>

 

八、運行hadoop

進入hadoop-0.20.2/bin,首先格式化文件系統:$hadoop namenode –format

啓動Hadoop:$start-all.sh

$./start-dfs.sh 

$./start-mapred.sh

用jps命令查看進程,NameNode 上的結果以下:

[mark@namenode~]$ jps

8872JobTracker

8650NameNode

15183Jps

8780SecondaryNameNode

[mark@namenode~]$

DataNode上的結果:

[mark@DataNode1~]$ jps

7346DataNode

28263Jps

7444TaskTracker

[mark@DataNode1~]$

查看集羣狀態:$hadoop dfsadmin –report

[mark@namenode~]$  hadoop dfsadmin -report

ConfiguredCapacity: 222387527680 (207.11 GB)

PresentCapacity: 201404645376 (187.57 GB)

DFSRemaining: 201404182528 (187.57 GB)

DFSUsed: 462848 (452 KB)

DFSUsed%: 0%

Underreplicated blocks: 2

Blockswith corrupt replicas: 0

Missingblocks: 0

 

-------------------------------------------------

Datanodesavailable: 3 (3 total, 0 dead)

 

Name:192.168.1.2:50010

DecommissionStatus : Normal

ConfiguredCapacity: 60261593088 (56.12 GB)

DFSUsed: 167936 (164 KB)

NonDFS Used: 6507544576 (6.06 GB)

DFSRemaining: 53753880576(50.06 GB)

DFSUsed%: 0%

DFSRemaining%: 89.2%

Lastcontact: Fri Mar 30 10:18:12 CST 2012

 

 

Name:192.168.1.3:50010

DecommissionStatus : Normal

ConfiguredCapacity: 101864341504 (94.87 GB)

DFSUsed: 143360 (140 KB)

NonDFS Used: 7971401728 (7.42 GB)

DFSRemaining: 93892796416(87.44 GB)

DFSUsed%: 0%

DFSRemaining%: 92.17%

Lastcontact: Fri Mar 30 10:18:12 CST 2012

 

九、運行wordcount.java程序

(1)先在本地磁盤創建兩個輸入文件file01和file02:

$echo 「Hello World Bye World」 > file01

$echo 「Hello Hadoop Goodbye Hadoop」 > file02

(2)在hdfs中創建一個input 目錄:$hadoop fs –mkdir input

(3)將file01和file02 拷貝到hdfs 中:

$hadoop fs –copyFromLocal /home/mark/file0* input

(4)執行wordcount:

$hadoop jar hadoop-0.20.2-examples.jar wordcount input output

(5)完成以後,查看結果:

$hadoop fs -cat output/part-r-00000

Bye1

Goodbye1

Hadoop2

Hello2

World2

 

 

2、windows開發機器鏈接hadoop集羣,並測試程序

1.eclipse安裝hadoop插件

 Eclipse使用3.3版本,安裝文件是eclipse-jee-europa-winter-win32.zip,根據網上的資料,其餘版本 可能會出現問題。在hadoop的安裝包中帶有eclipse的插件,在\contrib\eclipse-plugin\hadoop-0.20.2- eclipse-plugin.jar,將此文件拷貝到eclipse的plugins中。安裝成功以後在projectexplorer中會有一個 DFSlocations的標誌

在windows->preferences裏面會多一個hadoopmap/reduce的選項,選中這個選項,而後在右邊的表單中,把下載的hadoop根目錄選中。

能看到以上兩點,說明插件安裝成功了。

2.hadoop鏈接參數配置

如圖所示,打開Map/ReduceLocations視圖,在右上角有個大象的標誌點擊

 

 

 

在點擊大象後彈出的對話框進行參數的添加,以下圖

locationname :隨便填

 

map/reducemaster這個框裏

host:就是jobtracker的ip

port:就是jobtracker的port,這裏填9001

這兩個參數就是mapred-site.xml裏面的mapred.job.tracker裏面的ip和port

 

DFSmaster這個框裏

host:namenode的IP

port:就是namenode的port,這裏填9000

這兩個參數就是core-site.xml裏fs.default.name裏面的ip和port

 

username:這個是鏈接hadoop的用戶名

下面的不用填,點擊finish按鈕,此時,這個視圖中就有了一條記錄。

 

重啓eclipse,而後從新編輯剛纔創建的那個鏈接記錄,如圖,在上一步裏咱們填寫的Generaltab頁,如今編輯advance parameter tab頁。

 

hadoop.job.ugi:這裏填寫mark,root,Users  mark是hadoop集羣中安裝集羣所使用的用戶名。

而後點擊finish,就連上了。

 

 

 

 

連上的標誌如圖。

 

3.寫個wordcount程序,並在eclipse裏測試。

在eclipse中建一個map/reduce工程,如圖

 

而後在這個工程下面添加java類MyMap.java以下

packageorg;

 

importjava.io.IOException;

importjava.util.StringTokenizer;

 

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Mapper;

 

publicclass MyMap extends Mapper<Object,Text,Text,IntWritable> {

       private final static IntWritable one =new IntWritable(1);

       private Text word;

      

       public void map(Object key,Textvalue,Context context) throws IOException,InterruptedException{

              String line =value.toString();

              StringTokenizer tokenizer = newStringTokenizer(line);

              while(tokenizer.hasMoreTokens()){

                     word = new Text();

                     word.set(tokenizer.nextToken());

                     context.write(word, one);

              }

      }

 

}

添加MyReduce.java類以下

 

package org;

 

import java.io.IOException;

 

importorg.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Reducer;

 

publicclass MyReduce extendsReducer<Text,IntWritable,Text,IntWritable> {

  publicvoid reduce(Text key,Iterable<IntWritable>values,Context context)throws IOException,InterruptedException{

     int sum=0;

     for(IntWritable val:values){

         sum+=val.get();

     }

     context.write(key, new IntWritable(sum));

  }

}

 

添加MyDriver類以下

packageorg;

 

importjava.io.IOException;

 

importorg.apache.hadoop.conf.Configuration;

importorg.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IntWritable;

importorg.apache.hadoop.io.Text;

 

importorg.apache.hadoop.mapred.JobClient;

importorg.apache.hadoop.mapreduce.Job;

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;

importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

importorg.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

 

publicclass MyDriver {

 

       /**

        *@param args

        */

       public static void main(String[] args)throws Exception,InterruptedException{

              Configuration conf = newConfiguration();

              Job job = new Job(conf,"HelloHadoop");

              job.setJarByClass(MyDriver.class);

              job.setMapOutputKeyClass(Text.class);

              job.setMapOutputValueClass(IntWritable.class);

             

              job.setOutputKeyClass(Text.class);

              job.setOutputValueClass(IntWritable.class);

             

              job.setMapperClass(MyMap.class);

              job.setCombinerClass(MyReduce.class);

              job.setReducerClass(MyReduce.class);

              job.setInputFormatClass(TextInputFormat.class);

              job.setOutputFormatClass(TextOutputFormat.class);

              FileInputFormat.setInputPaths(job,new Path(args[0]));

              FileOutputFormat.setOutputPath(job,new Path(args[1]));

              //JobClient.runJob(conf);

              job.waitForCompletion(true);

       }

 

}

 

4. 進入c:\windows\system32\drivers\etc目錄,打開hosts文件加入

192.168.1.1NameNode

ip是master的ip,NameNode是master的機器名

5.而後設置MyDriver類的執行參數,也就是輸入輸出參數,要指定輸入輸出的文件夾

 

input就是輸入文件存放路徑,本例中要保證input目錄中有要進行wordcount的文本文件,output就是mapReduce以後處理的數據結果輸出的路徑

 

6.而後runon hadoop

控制檯打印信息以下:

12/03/30 09:28:08 WARN conf.Configuration: DEPRECATED:hadoop-site.xml found in the classpath. Usage of hadoop-site.xml is deprecated.Instead use core-site.xml, mapred-site.xml and hdfs-site.xml to overrideproperties of core-default.xml, mapred-default.xml and hdfs-default.xmlrespectively

12/03/30 09:28:08 WARN mapred.JobClient: UseGenericOptionsParser for parsing the arguments. Applications should implementTool for the same.

12/03/30 09:28:08 INFO input.FileInputFormat: Total inputpaths to process : 2

12/03/30 09:28:09 INFO mapred.JobClient: Running job:job_201203281633_0006

12/03/30 09:28:10 INFO mapred.JobClient:  map 0% reduce 0%

12/03/30 09:28:19 INFO mapred.JobClient:  map 100% reduce 0%

12/03/30 09:28:31 INFO mapred.JobClient:  map 100% reduce 100%

12/03/30 09:28:33 INFO mapred.JobClient: Job complete:job_201203281633_0006

12/03/30 09:28:33 INFO mapred.JobClient: Counters: 18

12/03/30 09:28:33 INFO mapred.JobClient:   Job Counters

12/03/30 09:28:33 INFO mapred.JobClient:     Launched reduce tasks=1

12/03/30 09:28:33 INFO mapred.JobClient:     Rack-local map tasks=1

12/03/30 09:28:33 INFO mapred.JobClient:     Launched map tasks=2

12/03/30 09:28:33 INFO mapred.JobClient:     Data-local map tasks=1

12/03/30 09:28:33 INFO mapred.JobClient:   FileSystemCounters

12/03/30 09:28:33 INFO mapred.JobClient:     FILE_BYTES_READ=79

12/03/30 09:28:33 INFO mapred.JobClient:     HDFS_BYTES_READ=50

12/03/30 09:28:33 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=228

12/03/30 09:28:33 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=41

12/03/30 09:28:33 INFO mapred.JobClient:   Map-Reduce Framework

12/03/30 09:28:33 INFO mapred.JobClient:     Reduce input groups=5

12/03/30 09:28:33 INFO mapred.JobClient:     Combine output records=6

12/03/30 09:28:33 INFO mapred.JobClient:     Map input records=2

12/03/30 09:28:33 INFO mapred.JobClient:     Reduce shuffle bytes=85

12/03/30 09:28:33 INFO mapred.JobClient:     Reduce output records=5

12/03/30 09:28:33 INFO mapred.JobClient:     Spilled Records=12

12/03/30 09:28:33 INFO mapred.JobClient:     Map output bytes=82

12/03/30 09:28:33 INFO mapred.JobClient:     Combine input records=8

12/03/30 09:28:33 INFO mapred.JobClient:     Map output records=8

12/03/30 09:28:33 INFO mapred.JobClient:     Reduce input records=6

 

7.最後到output裏去看一下程序執行結果。

相關文章
相關標籤/搜索