hadoop学习之二:mac下hadoop+eclipse环境搭建
来源:互联网 发布:cf手游版刷枪软件下载 编辑:程序博客网 时间:2024/05/21 10:11
这篇文章主要讲单机模式下的eclipse集成hadoop配置以及第一个mapreduce程序
在安装好hadoop后肯定是希望能直观地看看它可以干什么,我选择的切入点是MapReduce,之所以先学习MapReduce,是因为经过MRv1到MRv2的变化,hadoop的编程模型和处理引擎是被重用了,从共性的部分入手总是好的。
一些零碎的前置问题
命令行
在安装好hadoop后就可以通过形如以下的代码进行一系列操作了。命令挺多的,参考官网。下面会用到一些命令,但是详细的还是看官方文档。
hadoop [--config confdir] [--loglevel loglevel] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]`
启动模式
hadoop有三种启动模式:
* 单机模式(Standalone): 这是hadoop的默认模式,上一篇文章中我们也将其配置成了默认模式。此时hadoop完全在本地运行,因此不需要与其他节点交互,单机模式不使用HDFS,也不加载任何hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用。
* 伪分布模式(Pseudo-Distributed): 伪分布模式在”单节点集群”上运行hadoop,其中所有的守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况、HDFS输入输出以及其他的守护进程交互。
* 全分布模式(Fully-Distributed): 这个没得说的,单机和伪分布式都是用于开发和调试,实际运行中hadoop是在这种模式下。
由于当前学习重点是mapreduce,配置节点什么的先放在后面,现在就使用单机模式(*-site.xml都没有配置)即可。
MapReduce Tutorial
在官网的指导教程中,给出了第一个MapReduce程序,是一个计算单词数的程序,官网给了源码,可以自行通过命令行编译然后运行,但是觉得有一个集成开发环境更好一点,既然是java,首选eclipse。
eclipse+hadoop环境搭建
现在假设你已经安装好了hadoop和eclipse。
下载hadoop2x-eclipse-plugin
在
hadoop2x-eclipse-plugin/release/
下找选一个*.jar拷贝到eclipse安装目录的plugin目录下。这里说两点:- mac下如果eclipse被拖到了application中,那么辅助点按finder/application下的eclipse图标,选择”显示包内容”即可进入安装目录。
- 我的hadoop版本是
2.7.2
,兼容版本号是2.6.0
的插件。
- 进入eclipse,首先要配置就是library pth,在Preferences(可以通过quick access找到) 中可以看到有一个Hadoop Map/Reduce栏,将自己的hadoop安装路径写下,比如我的是
/usr/local/Cellar/hadoop/2.7.2/libexec
。
现在新建工程,可以看到有一个”Map/Reduce Project”可供选择,没什么好说的,按照创建一般工程的方法创建下去,我在这里创建了一个wordcount工程,里面有一个类WordCount
,然后把MapReduce Tutorial中的实例代码复制过去,这里大概是如下的样子
package wordcount;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;public class WordCount { public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ 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<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> 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 { Configuration conf = new Configuration(); Job job = Job.getInstance(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(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); }}
以上,各种import包没有报错,那么ok,至少说明可以编译通过了。
第一个MapReduce程序
- 将上面的程序打包成jar包导出,这里为了方便我直接放到了跟目录下
- 设置输入目录,这时候我们看源程序的主函数,其中有两行:
FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));
说明之行这个WordCount类需要两个参数,一个输入目录一个输出目录,输出目录实现不能被创建。这里我还是在跟目录中创建了一个输入目录,并随便扔了一个README.md进去。
#这条命令用于在本地文件系统创建目录 hadoop fs -mkdir input
- 启动命令行运行程序
#这个命令是 jar <jar> [class] [args]的形式 #注意: #1.这里之所以是wordcount.jar是因为我把它放到跟目录在,如果不再跟目录,则需要给出路径。 #2.[class]中是全局命名,即写出了包名 hadoop jar wordcount.jar wordcount.WordCount input output
- 最后可以在output中看到
_SUCCESS
和part-r-00000
两个文件,其中打开part-r-00000
可以看到如下结果:
说明这个程序完成了”字数统计”的工作。说明环境搭建完成并且你也运行了第一个mapreduce程序。
一些想法
在深入到MapReduce之前我们直观地通过示例程序看看MapReduce可以为我们干什么,可以看到我们定义了一个继承继承Mapper
的TokenizerMapper
类,一个实现Reducer
的IntSumReducer
类,并且在主函数中通过一个Job
类的实例进行某种顺序执行的过程。通过以上这些,很直观的感受到使用MapReduce进行数据分析,既是通过继承这些类,并按照一个特定的流程提交Job。更多的至于如何处理,就是细节实现部分了。
- hadoop学习之二:mac下hadoop+eclipse环境搭建
- Hadoop学习之二《Hadoop环境伪分布式环境搭建》
- Mac 环境下eclipse 搭建hadoop和hbase环境
- Mac下搭建hadoop伪分布式及eclipse开发环境
- 在Mac OS下搭建Hadoop环境及其利用Eclipse编译Hadoop插件
- hadoop学习笔记:Ubuntu下搭建eclipse调试环境
- Mac环境下搭建Hadoop开发框架
- mac下搭建hadoop伪分布式环境
- mac下配置eclipse的hadoop环境
- hadoop学习系列1之在ubuntu12.04下搭建伪分布式Hadoop-1.1.1环境并安装eclipse
- windows下搭建hadoop开发环境(Eclipse)
- windows下搭建hadoop+eclipse开发环境
- linux下eclipse开发hadoop-环境搭建
- Ubuntu下Eclipse搭建Hadoop开发环境
- windows下搭建hadoop+eclipse开发环境
- Win下hadoop、eclipse开发环境搭建
- eclipse hadoop 环境搭建
- hadoop学习笔记(3)-eclipse下搭建hadoop开发环境各种问题的解决
- JSP及JAVA开发环境的搭建
- IOS学习 Other linker flags和OTHER_LDFLAGS
- AIX 6.1 异步 I/O 的 配置与性能评估
- 自定义viewPager下面的导航按钮
- iOS uinavigationbar的一些属性设置
- hadoop学习之二:mac下hadoop+eclipse环境搭建
- Android L中水波纹点击效果的实现
- C语言表达式和运算符(三)
- pod的SDK报错,Linker command failed with exit code1(use -v to see invocation)
- 二叉搜索树的学习笔记(有解释)
- v$tempfile与v$sort_usage之关系解析
- 推荐的几个AS插件
- YARN环境中应用程序JAR包冲突问题的分析及解决
- Thread and AsyncTask