第5周 Map-Reduce编程实战,eclipse与Hadoop集群连接
2014-01-11 00:09
399 查看
Eclipse的Hadoop插件
参考:/article/9854246.html/article/4874022.html
win7下安装hadoop完成后,接下来就是eclipse hadoop开发环境配置了。具体的操作如下:
一、在eclipse下安装开发hadoop程序的插件
安装这个插件很简单,haoop-0.20.2自带一个eclipse的插件,在hadoop目录下的 contrib\eclipse-plugin\hadoop-0.20.2-eclipse-plugin.jar,把这个文件copy到eclipse的eclipse\plugins
目录下,然后启动eclipse就算完成安装了。
这里说明一下,haoop-0.20.2自带的eclipse的插件只能安装在eclipse 3.3上才有反应,而在eclipse 3.7上运行hadoop程序是没有反应的,所以要针对eclipse 3.7重新编译插件。
另外简单的解决办法是下载第三方编译的eclipse插件,下载地址为:
http://code.google.com/p/hadoop-eclipse-plugin/downloads/list
由于我用的是Hadoop-0.20.2,所以下载hadoop-0.20.3-dev-eclipse-plugin.jar.
然后将hadoop-0.20.3-dev-eclipse-plugin.jar重命名为hadoop-0.20.2-eclipse-plugin.jar,把它copy到eclipse的eclipse\plugins目录下,然后启动eclipse完成安装。
1、在左边的 project explorer 上头会有一个 DFS locations的标志
2、在 windows -> preferences里面会多一个hadoop map/reduce的选项,选中这个选项,然后右边,把下载的hadoop根目录选中(windows上的hadoop只是为了调用里面的jar包)
如果能看到以上两点说明安装成功了。
二、在windows的“C:\Windows\System32\drivers\etc\hosts”路径下加入以下内容:
192.168.136.128 hadoop1
192.168.136.129 hadoop2
192.168.136.130 hadoop3
三、插件安装后,配置连接参数
插件装完了,启动hadoop,然后就可以建一个hadoop连接了,就相当于eclipse里配置一个 weblogic的连接。
第一步,打开Map/Reduce Locations 视图,在右上角有个大象的标志点击
第二步,在点击大象后弹出的对话框进行进行参数的添加:
location name: 这个随便填写,我填写的是:hadoop
Map/Reduce Master 这个框里
Host:就是jobtracker 所在的集群机器,这里写hadoop1(这里可以写主机名,因为前面已经加了主机映射。)
Hort:就是jobtracker 的port,这里写的是9001
这两个参数就是mapred-site.xml里面mapred.job.tracker里面的ip和port
DFS Master 这个框里
Host:就是namenode所在的集群机器,这里写hadoop1
Port:就是namenode的port,这里写9000
这两个参数就是core-site.xml里面fs.default.name里面的ip和port
(Use M/R master host,这个复选框如果选上,就默认和Map/Reduce Master这个框里的host一样,如果不选择,就可以自己定义输入,这里jobtracker 和namenode在一个机器上,所以是一样的,就勾选上)
user name:这个是连接hadoop的用户名,因为我是用root用户安装的hadoop,而且没建立其他的用户,所以就用root。
下面的不用填写。然后点击finish按钮,此时,这个视图中就有多了一条记录。
第三步,重启eclipse并重新编辑刚才建立的那个连接记录,如图现在我们编辑advance parameters tab页
(重启编辑advance parameters tab页原因:在新建连接的时候,这个advance paramters tab页面的一些属性会显示不出来,显示不出来也就没法设置,所以必须重启一下eclipse再进来编辑才能看到)
这里大部分的属性都已经自动填写上了,其实就是把core-defaulte.xml、hdfs-defaulte.xml、mapred-defaulte.xml里面的一些配置属性展示出来。因为在安装hadoop的时候,其site系列配置文件里有改动,所以这里也要弄成一样的设置。主要关注的有以下属性:
fs.defualt.name:这个在General tab页已经设置了
mapred.job.tracker:这个在General tab页也设置了
dfs.replication:这个这里默认是3,因为我在hdfs-site.xml里面设置成了2,所以这里也要设置成2
hadoop.job.ugi:刚才说看不见的那个,就是这个属性,这里要填写:root,Tardis,逗号前面的是连接的hadoop的用户,逗号后面就写死Tardis
dfs.data.dir 改为 /nosql/hadoop/data
hadoop.tmp.dri 改为 /tmp/hadoop-root
然后点击finish,DFS Locations下面会有一只大象,下面会有一个文件夹,即 hdfs的根目录,这里就是展示的分布式文件系统的目录结构了。
第四步 查看HDFS文件系统,并尝试建立文件夹和上传文件
点击Eclipse软件左侧的"DFS Locations"下面的"hadoop",就会展示出HDFS上的文件结构。
右击"hadoopàuseràroot"可以尝试建立一个"文件夹--test",然后右击刷新就能查看我们刚才建立的文件夹。
用SecureCRT远程登录"192.168.136.128"服务器,用下面命令查看是否已经建立一个"test"的文件夹。
[root@hadoop1 bin]# ./hadoop dfs -ls
Found 3 items
drwxr-xr-x - root supergroup 0 2014-01-09 07:57 /user/root/in
drwxr-xr-x - root supergroup 0 2014-01-09 07:58 /user/root/out
drwxr-xr-x - root supergroup 0 2014-01-10 07:54 /user/root/test
到此为止,我们的Hadoop Eclipse开发环境已经配置完毕,不尽兴的同学可以上传点本地文件到HDFS分布式文件上,可以互相对比意见文件是否已经上传成功。
[root@hadoop1 bin]# ./hadoop dfs -ls ./test
Found 1 items
-rw-r--r-- 2 root supergroup 3965 2014-01-10 07:56 /user/root/test/m.sql
倒排索引
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; 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.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; /* * 倒排索引 * 现有一批电话通信清单,记录了用户A拨打用户B的记录 * 需要做一个倒排索引,记录拨打给用户B的所有用户A * 13599999999 10086 * 13599999999 120 * 13999999999 13800138000 * 13722222222 13800138000 * 18800000000 120 * 13722222222 10086 * 18966666666 10086 * 18966666666|110 * 任务输出必须如下所示,主叫以‘|’分割 * hdfs://192.168.136.128:9000/user/root/test * hdfs://192.168.136.128:9000/user/root/out */ public class Test extends Configured implements Tool { /* 计数器 Counter 是一个计数器 可以记录这个程序一些数据用于统计 */ enum Counter { LINESKIP, // 出错的行 } public static class Map extends Mapper<LongWritable, Text, Text, Text> { public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { // 读取源文件,line得到的就是输入文件的一行数据 String line = value.toString(); try { // 数据处理 String[] lineSplit = line.split(" "); // 对源数据进行分割重组 String anum = lineSplit[0]; // 主叫 String bnum = lineSplit[1]; // 被叫 context.write(new Text(bnum), new Text(anum)); // 输出 } catch (ArrayIndexOutOfBoundsException e) { context.getCounter(Counter.LINESKIP).increment(1); // 出错令计数器加1 } } } public static class Reduce extends Reducer<Text, Text, Text, Text> { public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { String valueString; String out = ""; // 每个value代表Map函数发送的一个value // 在这里代表拨打了这个被叫号码的一个主叫 for (Text value : values) { valueString = value.toString(); out += valueString + "|"; } context.write(key, new Text(out)); } } public int run(String[] args) throws Exception { Configuration conf = getConf(); Job job = new Job(conf, "test_job"); // 任务名 job.setJarByClass(Test.class); // 执行class FileInputFormat.addInputPath(job, new Path(args[0])); // 输入路径 FileOutputFormat.setOutputPath(job, new Path(args[1])); // 输出路径 job.setMapperClass(Map.class); // 指定上面Map类作为MAP任务代码 job.setReducerClass(Reduce.class); // 指定上面Reduce类作为REDUCE任务代码 job.setOutputFormatClass(TextOutputFormat.class); job.setOutputKeyClass(Text.class); // 指定输出KEY的格式 job.setOutputValueClass(Text.class); // 指定输出VALUE的格式等哈 job.waitForCompletion(true); return job.isSuccessful() ? 0 : 1; } public static void main(String[] args) throws Exception { int res = ToolRunner.run(new Configuration(), new Test(), args ); System.exit(res); } }
相关文章推荐
- 第6周 Map-Reduce编程实战,eclipse与Hadoop集群连接
- Hadoop之——Eclipse连接Hadoop / An internal error occurred during: "Map/Reduce location status updater"
- eclipse连接远程hadoop集群开发时0700问题解决方案
- hadoop下map-reduce模型编程的一些理解
- Windows环境下采用eclipse连接虚拟机中的Hadoop伪分布式集群
- win7使用eclipse连接hadoop集群,运行mapreduce报错之:org.apache.hadoop.security.AccessControlException
- hadoop学习之HDFS(2.5):windows下eclipse远程连接linux下的hadoop集群并测试wordcount例子
- eclipse连接远程hadoop集群开发时权限不足问题解决方案
- eclipse连接远程hadoop集群开发时权限不足问题解决方案
- win7下eclipse插件连接linux下hdfs单机伪集群 hadoop 2.6
- eclipse与Hadoop集群连接
- hadoop+hbase+zookeeper 分布式集群搭建 + eclipse远程连接hdfs 完美运行
- eclipse 连接 hadoop集群
- Hadoop---在HDFS集群基础上搭建Map/Reduce集群
- windows下的eclipse连接hadoop集群中遇到的问题
- hadoop编程中,给map或者reduce传递参数
- hadoop集群调优分两个方面,map和reduce
- myeclipse连接hadoop集群编程及问题解决
- eclipse 连接 hadoop集群
- eclipse连接远程hadoop集群开发时0700问题解决方案