基于 Eclipse 的 MapReduce 开发环境搭建
文 / vincentzh
原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html
上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起来有问题的呢,拖到周一才将问题解决掉。刚好这周也将之前看的内容复习了下,边复习边码代码理解,印象倒是很深刻,对看过的东西理解也更深入了。
目录
1、概述
Hadoop提供了Java的API用于处理程序的开发及,同样的,通过在本地搭建熟悉的 eclipse 开发环境也能够方便大型程序的开发与调试,完成的代码无需部署,通过eclipse就能执行并输出结果,通过抽样数据的处理结果查看方便调试与验证数据处理逻辑。代码处理逻辑验证无误后,即可将所有程序打包上传至集群,进行全集数据的处理工作。
在搭建开发环境之前,需要部署好自己的Hadoop环境,这样做起来才会比较真实,并且集群的调度及参数配置也是与大型集群的配置维护几乎没什么差别(Hadoop环境的搭建详见:Hadoop单机/伪分布部署、Hadoop集群/分布式部署)。
一般通过单机单机和伪分布环境来开发和调试程序,在单机环境下使用的是本地的文件系统,能够利用 linux 命令方便获取和查看代码的执行结果,相反,在伪分布和集群环境上,代码直接从HDFS读取并输出数据,相较于本地环境需要将数据在本地和HDFS之间 put/get ,麻烦不少,开发调试程序过程都使用的是数据的抽样,否则代码执行一次的时间过长,在单机和伪分布环境验证无误后才会将代码部署上集群进行全集数据的处理。LZ在虚拟上部署了两套环境,一个是伪分布环境、另一个是一个小的集群,当然单机/伪分布/集群之间可以互相切换,但自己部署的环境,为了互相切换麻烦,就干脆两套环境都搭了起来,需要再那个环境执行,直接通过开发环境进行连接切换即可。
2、环境准备
1)配置集群并启动所有守护进程,集群搭建见:Hadoop单机/伪分布部署、Hadoop集群/分布式部署。
2)安装eclipse,本地安装与集群上同一版本的 JDK 和 HADOOP。
3、配置插件
下载 Hadoop2.x-eclipse-plugin.jar,将其放入 eclipse 的 \plugins 目录,并重启 eclipse,在 Windows—>Show View—>Other 将会看到有 Map/Reduce 视图,同时左侧工程空间出现 DFS Locations 类似文件夹的东西。
4、配置文件系统连接
切换至 Map/Reduce 视图,进行配置。
在这里的配置需要注意,要与自己集群上的 core-site.xml 配置文件中的配置一致。附上LZ配置文件的配置。当然有人在 Host 中直接写的主机名,但要主义主机名与IP的映射关系是直接写在HADOOP环境中的,这里的本地环境根本无法解析你写进去的‘master’或者‘hadoop’之类的主机名称,最简单直接的就是用IP去配置,core-site.xml 配置文件中也使用 IP 进行配置。
aaarticlea/png;base64,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" alt="" />
5、测试连接
配置完成测试连接,需要确认所有守护进程启动无误。
aaarticlea/png;base64,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" alt="" />
6、代码编写与执行
测试代码可以自己尝试去写,如果只是过过环境搭建成功的瘾,就去官网直接拿吧。链接在这里。
当你需要编写代码或 copy 代码时又会遇到这样的问题,工程工作区为何没有 MapReduce 开发相关的包呢,MapReduce 开发的包要去哪里找呢,就在这里。
代码测试之前,新建的工程中并没有 MapReduce 开发需要使用到的相关 jar 包,这就是前面提到的需要在 Windows 本地安装同样版本 Hadoop 的原因了,这里会用到其安装目录中开发编译 MapReduce 程序时需要的 jar 包。在 Windows—>Preferences—>Hadoop Map/Reduce 中设置 Windows 本地安装的Hadoop路径(如:E:\ProgramPrivate\hadoop-2.6.0),设置完成再去创建 Hadoop 工程时会自动导入 Hadoop 相关的 jar 包。
我就贴个通过 API 提供的一些常用的基本实现类去实现的 WordCount 代码吧,具体的参数配置可以参考。
package com.cnblogs.vincentzh.hadooptest; import java.io.IOException; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.lib.LongSumReducer;
import org.apache.hadoop.mapred.lib.TokenCountMapper; // 通过 Hadoop API 提供的基本实现类实现 WordCount
public class WordCount2
{
public static void main(String[] args)
{
//JobClient client = new JobClient();
Configuration conf = new Configuration();
JobConf jobConf = new JobConf(conf); jobConf.setJobName("WordCount2");
Path in = new Path("hdfs://192.168.1.110:9000/user/hadoop/input");
Path out = new Path("hdfs://192.168.1.110:9000/user/hadoop/output");
FileInputFormat.addInputPath(jobConf, in);
FileOutputFormat.setOutputPath(jobConf, out);
jobConf.setMapperClass(TokenCountMapper.class);
jobConf.setCombinerClass(LongSumReducer.class);
jobConf.setReducerClass(LongSumReducer.class);
jobConf.setOutputKeyClass(Text.class);
jobConf.setOutputValueClass(LongWritable.class); //client.setConf(jobConf);
try
{
JobClient.runJob(jobConf);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
执行完成,会有相应的作业执行统计信息输出,Refresh 文件夹后会在左侧 DFS 文件系统中看到输出的文件。
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA6gAAAILCAIAAABq3CaLAAAgAElEQVR4nOy9e3QU153v2//M/17rzFpzstbJSibxTBJ73SHDyfgMdeZkuOfeiZMMNw+fOLaT2JDYqYEZx8FyEimOHcvGgGycURkbI7+ESECWbWQLDGWwIbyxbMAIECBoQOKp1guEBK1Wv/b9o7qr9t61dz36Wd39/ay9tKp31961a3er9dGvf1U7RIpGPB6vr6+fPXt2fX19NBo1txOJhEOrJUs677rr+F13/eZb33pyzpznf/KTnvvvj/30p9fvv3/65z9PP/BAcu7cqw88kLzv3vALy9eJOtDVUCikaOHsZkjVCSEkrCnGlq5mniVEV80qejfj6bCmZnYjupp92trKPMh0RW3a9hfVhzUlZPXE9AqACwf9MD4+bu9h80eXLgycGLx4anx0wF4uDJwQHjdWcsZtzMtif8rA1+QAAEBZkH2C1RSun+e+8PhnhRASKupf6EQiYfjunDlzvFgvIWTPno/Uny86cuTI1NRUc/O6++4b+slPBn/2s8mf/nTy/vun582buOeekz/7WfS++w6tWfO+qANKbMXb9Iapp+ZuYU2xTNXw05Cpz/SOwi6pdqour7c2uHoA3PH78WrvwVl8L57rEx63qI4rJIdPySL9lQIAgAJSENWrAgrovh7/rJBiiy+h3NeL9W7cuPHVV1/93/972ZUr44SQF1/cfv/90//fnC2//vXzzz33wQ9/2Hn33ce/853377tvaP78TYlEUtSHq/hm3JaSTZH4hjUlRDXwLb6KFpbXQ3xBHvj9eLX3gIgvAACUkfw9rwqozoivQSKRWL16dTwe97Lz1FTsm9984caN6LVr137ykx333Rf5/vf3LFy4LZ1Ov/SSfuedH3372+vnzbv25JPCcC/xIr4krCmKqirC3QTOGtYUUaoDrca2lAaXeqpL7gEAbvj9eLX3ULni6/pZWaS/UgAAUEAKonoVTWGtdzxo4uuLvr6B//iPVkLIpUuX77xz75137vrd7zbed9+lTz893ta29cc/PvvTn7bcf/9UR8efJR14EF+5kHJBWQNFVRUmHzdTrWl8l0xehFN9WFNCqqqK9gfABb8fr/YeKlp8nT8xi/RXCgAACkihbK9CKbj1jleu+K5bt/0HP1je3X2YEJJOp+fOffeOOzbv3fvJvfde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" alt="" />
7、问题梳理
运行时可能会出现不少问题,在这里只罗列下LZ遇到过的问题和解决的方法,没遇到的自然也谈不上和路人分享了。
7.1 console 无日志输出问题
在 eclipse 执行 MapReduce 程序时会出现程序控制台无任何输出信息的问题,没有日志信息,没有执行信息,无法知道程序执行的结果如何。
原因:console无日志输出是因为在 project 中没有进行 log 配置。
解决方案:直接将 hadoop 配置文件目录($HADOOP_HOME/etc/hadoop/)下的 log4j.properties 文件 copy 进工程中即可。
7.2 权限问题
在 eclipse 执行 MapReduce 程序报错,错误信息类似:org.apache.hadoop.security.AccessControlException:org.apache.hadoop.security.AccessControlException: Permission denied:user=john, access=WRITE, inode="input":hadoop:supergroup:rwxr-xr-x...
原因:Hadoop 上的 HDFS 只有部署环境时的用户才有读写权限,大多数人应该都使用的是 ‘hadoop’ 吧,而我们的开发环境是在 Windows 本地进行搭建的,执行程序的时候是直接用本地的用户进行作业的提交和执行,Hadoop 在提交作业和执行作业时需要对提交的用户进行权限认证,自然 Windows 上的用户并没有读写 HDFS 文件和提交并执行作业的权利了。
解决方案:在 mapred-site.xml 配置文件中设置属性 dfs.permission 为 false 即可。
aaarticlea/png;base64,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" alt="" />
基于 Eclipse 的 MapReduce 开发环境搭建的更多相关文章
- 基于Eclipse的Android开发环境搭建
1. Java开发环境搭建 1.1 JDK下载安装 JDK(Java Development Kit )是针对Java开发人员发布的软件开发工具包.JDK 是整个Java的核心,包括了Java运行 ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- mac10.9下eclipse的storm开发环境搭建
--------------------------------------- 博文作者:迦壹 博客地址:http://idoall.org/home.php?mod=space&uid=1& ...
- 基于IDEA的JavaWeb开发环境搭建
基于IDEA的JavaWeb开发环境搭建 基于IDEA的JavaWeb开发环境搭建 jdk下载安装配置环境变量 下载 安装 配置环境变量 下载安装激活使用IntelliJ IDEA 下载 安装 激活 ...
- 【SpringBoot】(1)-- 基于eclipse配置springboot开发环境
基于eclipse配置springboot开发环境 1. 下载并配置eclipse ① 前往eclipse官网 https://www.eclipse.org/downloads/packages/ ...
- MapReduce 开发环境搭建(Eclipse\MyEclipse + Maven)
写在前面的话 可详细参考,一定得去看 HBase 开发环境搭建(Eclipse\MyEclipse + Maven) Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Mav ...
- 【游戏开发】基于VS2017的OpenGL开发环境搭建
一.简介 最近,马三买了两本有关于“计算机图形学”的书籍,准备在工作之余鼓捣鼓捣图形学和OpenGL编程,提升自己的价值(奔着学完能涨一波工资去的).俗话说得好,“工欲善其事,必先利其器”.想学习图形 ...
- 【转】最新基于adt-bundle-windows-x86的android开发环境搭建
http://blog.csdn.net/wangqiuyun/article/details/8731240 某系统要配套做一个android客户端,来一次android开发环境快速搭建,系统Win ...
- Eclipse 下 opennms 开发环境搭建
1.eclipse3.5或更高版本,并且使用纯净的java版.下载地址:Eclipse for Java Developers. 2.安装需要的插件.通过Help/Install New Softwa ...
随机推荐
- SqlServer2008安装时提示重启计算机失败 解决办法
问题描述: 在安装Sql Server 2008时提示重启计算机,重启之后不行,仍需要重启计算机. 如下图所示: 解决方法: 1.运行(或按键盘Win+R 组合键),输入regedit,调出注册表管理 ...
- 自定义view(二)
1.View 的绘制 通过继承View 并重写它的onDraw()来完成绘制. onDraw()有一个参数,就是Canvas对象.使用这个Canvas就可以绘制图像了,Canvas canvas = ...
- 导入一些常用命令比如(rz),关闭防火墙外面可以访问
yum -y install lrzsz-----------导入常用命令 我在虚拟机上面启动了一个项目 这个原因是防火墙造成的,关闭防火墙 iptables -L 查看下 service ipt ...
- WCF学习之旅—WCF第二个示例(六)
第五步,创建数据服务 在“解决方案资源管理器”中,使用鼠标左键选中“SCF.WcfService”项目,然后在菜单栏上,依次选择“项目”.“添加新项”. 在“添加新项”对话框中,选择“Web”节点,然 ...
- jquery插件编写模版
jquery插件是什么??这里以讨论实力方法为主,比如 $("div").pluginname({}); 他的最简单形势应该是 $.prototype.plugin = funct ...
- 模拟ajax的 script请求
/** * 模拟ajax的 script请求 * @param {[type]} options [description] * @return {[type]} [description] */ f ...
- Qt with OpenCascade
Qt with OpenCascade 摘要Abstract:详细介绍了如何在Qt中使用OpenCascade. 关键字Key Words:Qt.OpenCascade 一.引言 Introducti ...
- 【转】SQL删除重复数据方法,留着备用
感谢孙潇楠前辈的总结,地址http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html 例如: id name ...
- 创建第一个 local network(I) - 每天5分钟玩转 OpenStack(80)
在 ML2 配置文件中 enable local network 后,本节将开始创建第一个 local network. 我们将通过 Web GUI 创建第一个 local network. 首先确保 ...
- MySQL utf8mb4 字符集:支持 emoji 表情符号
转载地址:http://www.linuxidc.com/Linux/2013-05/84360.htm 我用他的方法解决了问题,亲测可用,不要用Nnvicat for Mysql去查询编码,在服务器 ...