本帖最后由 oszhang 于 2013-10-21 21:43 编辑
原地址http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00
1.准备工作
1.1 完成linux上的hadoop集群安装,并且能够从windows上ftp远程到linux
http://hi.baidu.com/itapadwyxebcfud/item/dbd889c009e6c413449416d0 使用root权限配置FTP服务器
1.2 在你的本机上也安装好JDK和Eclipse
我本机使用的Java版本是1.6的 Eclipse版本是3.3
注意:你使用的Hadoop版本和你使用的Eclipse版本有关系,最好先百度一下。我初次用的hadoop版本是hadoop-0.20.2
1.3将hadoop安装包hadoop/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin拷贝到eclipse的插件目录plugin下。
需要注意的是插件版本(及后面开发导入的所有jar包)与运行的hadoop一致,否则可能会出现EOFException异常。
2 打开Eclipse进行一些配置
2.2.1 配置好Hadoop文件到Windows上
虽然是从本地远程去操作的,但是还是会用到本身Hadoop的安装文件(这个Hadoop安装文件要和你远程Linux的Hadoop版本要一致。
在Linux下进入hadoop目录可以使用tar -cvf hadopp-0.20.2.tar hadoop-0.20.2打包 然后传递出来,解压到一个目录。比如我的解压在D:/eclipse\hadoop-0.20.2下
如果插件正常工作了,可以看到一下窗口。
将Windows上的Hadoop安装目录进行指定(打开Window-----> Preference) 点击右侧的浏览加入文件
打开Window----->Show view--->other 配置mapReduce
点击OK 这样在下面就会有Map/Reduce的管理窗体。在空白处右键点击Edit Hadoop Location
参数说明如下:
Location name:任意
map/reduce master:与mapred-site.xml里面mapred.job.tracker设置一致。
DFS master:与core-site.xml里fs.default.name设置一致。
User name: 服务器上运行hadoop服务的用户名。
然后是打开“Advanced parameters”设置面板,修改相应参数。上面的参数填写以后,也会反映到这里相应的参数:
主要关注下面几个参数:
fs.defualt.name:与core-site.xml里fs.default.name设置一致。
mapred.job.tracker:与mapred-site.xml里面mapred.job.tracker设置一致。
dfs.replication:与hdfs-site.xml里面的dfs.replication一致。
hadoop.tmp.dir:与core-site.xml里hadoop.tmp.dir设置一致。
hadoop.job.ugi : hadopp,administrator,,。。。
说明:第一次设置的时候可能是没有hadoop.job.ugi和dfs.replication参数的,确认保存。打开Project Explorer中DFSLocations目录,应该可以年看到文件系统中的结构了。但是在/hadoop/mapred/system下却没有查看权限,如下图:
而且删除文件的时候也会报错:
在hdfs-site.xml里面加入
dfs.permissionsfalse
就可以了。如图:
配置节点ip 进入 C:\Windows\System32\drivers\etc\hosts
配置ip如图:与linux hadoop配置一样。http://hi.baidu.com/itapadwyxebcfud/item/506fc0dbc7bf50a86dce3fa1
3.创建工程运行WordCount例子
运行hadoop程序
首先将hadoop安装包下面的所有jar包都导到eclipse工程里。点击project--->properties
点击Add External JARs....到 D:/eclipse\hadoop-0.20.2下的全部jar包和D:/eclipse\hadoop-0.20.2\lib下面的jar包全部添加
注释:jar包一定要添加到工程里面 不然会报错
创建一个JAVA类WordCount并且将以下代码复制进去
package org.apache.hadoop.examples;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
public static class TokenizerMapper
extends Mapper{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
conf.set("mapred.job.tracker", "192.168.1.108:9001");
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount ");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
运行程序
点击WordCount--->Arguments,在Program arguments:输入路径一定要写对;根据自己的实际情况来,没写对和出现各种错误,这个路径我就花了半个小时搞定的。
run on hadoop
出现结果:
下面来说说我用hadoop搭建与eclipse开发环境设置并测试遇到的一些错误:
1 首先遇到我是权限的问题
2 遇到我是导入jar包,我有些需要的包没导入,(若怕报错把jar包全部导入)
3 遇到的路径设置问题,(把以下几个.xml文件复制到工程目录的bin文件下)
路径设置不对报错:Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.1.108:9000/user/root/test, expected: file://、...........
解决办法:写正确的路径。
虽然只是3个错误,但是花费了几个小时的时间,初次配置难免会遇到问题,以后遇到更多我问题我会贴出来供大家参考和一起共同学习。
http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00 非常抱歉,因为图太多了,在这里没填充,效果一点不好,想一起学习的进我的原地址。
原地址http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00
1.准备工作
1.1 完成linux上的hadoop集群安装,并且能够从windows上ftp远程到linux
http://hi.baidu.com/itapadwyxebcfud/item/dbd889c009e6c413449416d0 使用root权限配置FTP服务器
1.2 在你的本机上也安装好JDK和Eclipse
我本机使用的Java版本是1.6的 Eclipse版本是3.3
注意:你使用的Hadoop版本和你使用的Eclipse版本有关系,最好先百度一下。我初次用的hadoop版本是hadoop-0.20.2
1.3将hadoop安装包hadoop/contrib/eclipse-plugin/hadoop-0.20.2-eclipse-plugin拷贝到eclipse的插件目录plugin下。
需要注意的是插件版本(及后面开发导入的所有jar包)与运行的hadoop一致,否则可能会出现EOFException异常。
2 打开Eclipse进行一些配置
2.2.1 配置好Hadoop文件到Windows上
虽然是从本地远程去操作的,但是还是会用到本身Hadoop的安装文件(这个Hadoop安装文件要和你远程Linux的Hadoop版本要一致。
在Linux下进入hadoop目录可以使用tar -cvf hadopp-0.20.2.tar hadoop-0.20.2打包 然后传递出来,解压到一个目录。比如我的解压在D:/eclipse\hadoop-0.20.2下
如果插件正常工作了,可以看到一下窗口。
将Windows上的Hadoop安装目录进行指定(打开Window-----> Preference) 点击右侧的浏览加入文件
打开Window----->Show view--->other 配置mapReduce
点击OK 这样在下面就会有Map/Reduce的管理窗体。在空白处右键点击Edit Hadoop Location
参数说明如下:
Location name:任意
map/reduce master:与mapred-site.xml里面mapred.job.tracker设置一致。
DFS master:与core-site.xml里fs.default.name设置一致。
User name: 服务器上运行hadoop服务的用户名。
然后是打开“Advanced parameters”设置面板,修改相应参数。上面的参数填写以后,也会反映到这里相应的参数:
主要关注下面几个参数:
fs.defualt.name:与core-site.xml里fs.default.name设置一致。
mapred.job.tracker:与mapred-site.xml里面mapred.job.tracker设置一致。
dfs.replication:与hdfs-site.xml里面的dfs.replication一致。
hadoop.tmp.dir:与core-site.xml里hadoop.tmp.dir设置一致。
hadoop.job.ugi : hadopp,administrator,,。。。
说明:第一次设置的时候可能是没有hadoop.job.ugi和dfs.replication参数的,确认保存。打开Project Explorer中DFSLocations目录,应该可以年看到文件系统中的结构了。但是在/hadoop/mapred/system下却没有查看权限,如下图:
而且删除文件的时候也会报错:
在hdfs-site.xml里面加入
dfs.permissionsfalse
就可以了。如图:
配置节点ip 进入 C:\Windows\System32\drivers\etc\hosts
配置ip如图:与linux hadoop配置一样。http://hi.baidu.com/itapadwyxebcfud/item/506fc0dbc7bf50a86dce3fa1
3.创建工程运行WordCount例子
运行hadoop程序
首先将hadoop安装包下面的所有jar包都导到eclipse工程里。点击project--->properties
点击Add External JARs....到 D:/eclipse\hadoop-0.20.2下的全部jar包和D:/eclipse\hadoop-0.20.2\lib下面的jar包全部添加
注释:jar包一定要添加到工程里面 不然会报错
创建一个JAVA类WordCount并且将以下代码复制进去
package org.apache.hadoop.examples;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
public static class TokenizerMapper
extends Mapper{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
conf.set("mapred.job.tracker", "192.168.1.108:9001");
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount ");
System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
运行程序
点击WordCount--->Arguments,在Program arguments:输入路径一定要写对;根据自己的实际情况来,没写对和出现各种错误,这个路径我就花了半个小时搞定的。
run on hadoop
出现结果:
下面来说说我用hadoop搭建与eclipse开发环境设置并测试遇到的一些错误:
1 首先遇到我是权限的问题
2 遇到我是导入jar包,我有些需要的包没导入,(若怕报错把jar包全部导入)
3 遇到的路径设置问题,(把以下几个.xml文件复制到工程目录的bin文件下)
路径设置不对报错:Exception in thread "main" java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.1.108:9000/user/root/test, expected: file://、...........
解决办法:写正确的路径。
虽然只是3个错误,但是花费了几个小时的时间,初次配置难免会遇到问题,以后遇到更多我问题我会贴出来供大家参考和一起共同学习。
http://hi.baidu.com/itapadwyxebcfud/item/f93409341f683967033edc00 非常抱歉,因为图太多了,在这里没填充,效果一点不好,想一起学习的进我的原地址。
编辑回复