Eclipse版本3.5, Hadoop版本hadoop-0.20.2
1. 安装Hadoop
下载hadoop-0.20.2, http://www.apache.org/dyn/closer.cgi/hadoop/core/
解压Hadoop并配置Hadoop home 环境变量$ gzip -d hadoop-0.20.2.tar.gz. 切换到Hadoop用户(不切换也可)
$ tar xvf hadoop-0.20.2.tar
$ vi .bash_profile
$ export JAVA_HOME=~/software/jdk1.6.0_11
# 添加 HADOOP=~/software/hadoop-0.20.2
# 添加PATH=$HADOOP/bin:$PATH
$ export PATH
$ source .bash_profile
编辑 conf/hadoop-env.sh文件,将JAVA_HOME设置为Java安装根路径。
export JAVA_HOME=~/software/jdk1.6.0_11
修改Hadoop配置文件:[其中ip地址是我的local地址]
conf/ hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.13.171:9000</value>
</property>
</configuration>
conf/mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.13.171:9001</value>
</property>
</configuration>
启动Hadoop:
$ bin/start-all.sh
查看是否成功
http://ubuntu:50030 可以查看JobTracker的运行状态:
http://ubuntu:50070 可以查看NameNode及整个分布式文件系统的状态等:
#如不成功,则配置有问题。我遇见的情况是java远程调试端口占用了9000,所以NameNode启动不起来
2. Eclipse 开发Hadoop
下载hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar
https://issues.apache.org/jira/secure/attachment/12460491/hadoop-eclipse-plugin-0.20.3-SNAPSHOT.jar
注意不要用hadoop-0.20.2下自带的eclise插件,那个是坑爹的。否则会导致run on Hadoop 无反应。这个插件的版本是配合eclipse3.5的。下载后将其重命名为hadoop-0.20.2-eclipse-plugin.jar,并放入到eclipse插件目录中。
启动eclipse:打开windows->open perspective->other->map/reduce 可以看到map/reduce开发视图。设置Hadoop location.
打开windows->show view->other-> map/reduce Locations视图,在点击大象后【new Hadoop location】弹出的对话框(General tab)进行参数的添加:
Location name: 任意
map/reduce master: 与mapred-site.xml里面mapred.job.tracker设置一致。
DFS master:与core-site.xml里fs.default.name设置一致。
User name: 服务器上运行hadoop服务的用户名。
这些已经足够用。当然,如果你需要特殊设置,那么打开Advanced parameters设置面板,查看当前的选项以及修改其值.
创建Map/Reduce Project。运行最简单的WordCount程序。首先准备2个文件
$ bin/hadoop dfs -mkdir /tmp/input
$ bin/hadoop dfs -put file1.txt input
$ bin/hadoop dfs -put file2.txt input
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;
import org.apache.log4j.Logger;
public class WordCount {
public static Logger loger = Logger.getLogger(WordCount.class);
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 {
loger.info("Map <key>" + key + "</key>");
loger.info("Map <value>" + value + "</key>");
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
String wordstr = itr.nextToken();
word.set(wordstr);
loger.info("Map <word>" + wordstr + "</word>");
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 {
loger.info("Reduce <key>" + key + "</key>");
loger.info("Reduce <value>" + values + "</key>");
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
loger.info("Reduce <sum>" + sum + "</sum>");
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)
.getRemainingArgs();
if (otherArgs.length != 2) {
// System.err.println("Usage: wordcount <in> <out>");
// System.exit(2);
}
Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);// ??
job.setMapperClass(TokenizerMapper.class);// mapper
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);// reducer
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);
}
}
点击Run on hadoop, 运行程序。你可以看到在output文件夹中出现文本段.
运行时参数设置为:hdfs://localhost:9000/user/hadoop/in/*.txt /tmp/out [因为eclipse是远程访问的,所以要将其写为远程地址。第二个参数是保存在本地。当然也可以保存在hdfs上,写成和第一个参数类似的格式]
如果参数设置为/in/*.txt /tmp/out,则需要在job中手动指定conf,否则job只会去加载defalut的conf,而不是hadoop/conf下的配置文件,因此程序运行会抛出异常。
Configuration conf = new Configuration();
conf.addResource("conf/core-site.xml");
Job job = new Job(conf);
运行时可能会出现内存溢出的异常:
java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.<init>(MapTask.java:781)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:350)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
11/08/16 10:31:39 INFO mapred.JobClient: map 0% reduce 0%
11/08/16 10:31:39 INFO mapred.JobClient: Job complete: job_local_0001
11/08/16 10:31:39 INFO mapred.JobClient: Counters: 0
Exception in thread "main" java.io.IOException: Job failed!
at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1252)
at mapred.WordCount.main(WordCount.java:110)
原因是客户端程序运行时java虚拟机内存分配不够,修改run configuration(run as >run configurations),选择Arguments选项卡,在VM arguments栏中加入-Xmx1024m,保存后执行没有问题(即将执行时虚拟机内存调大)
3. 多台机器运行Hadoop
由于环境有限,且属于学习性质,所以没太研究。主要是要保证各机器之间无密码ssh
在master节点上生成密钥对:
$ ssh-keygen –t rsa
生成密钥对保存在.ssh/id_rsa文件中。
然后执行命令:
$ ssh ~/.ssh
$ cp id_rsa.pub authorized_keys
$ scp authorized_keys slave1:/home/hadoop/.ssh
$ scp authorized_keys slave2:/home/hadoop/.ssh
分享到:
相关推荐
【构建Windows上的Hadoop+Eclipse开发环境】 在Windows操作系统上搭建Hadoop与Eclipse的集成开发环境是开发Hadoop应用程序的基础步骤。以下是一份详细的指南,涵盖了从安装JDK、Cygwin到配置Hadoop环境以及安装...
毕业设计-基于Hadoop+Spark的大数据金融信贷风险控系统源码.zip毕业设计-基于Hadoop+Spark的大数据金融信贷风险控系统源码.zip毕业设计-基于Hadoop+Spark的大数据金融信贷风险控系统源码.zip毕业设计-基于Hadoop+...
在Windows上搭建Hadoop+Eclipse开发环境是一项重要的工作,它涉及到多个步骤,包括JDK、Cygwin、SSHD服务、Hadoop的安装与配置,以及Eclipse插件的安装。以下是对这些步骤的详细说明: 1. **安装JDK**:首先需要...
总结来说,"cygwin中安装hadoop+eclipse编译源码并调试"是一个涉及多步骤的过程,包括安装Cygwin、配置环境、获取和编译Hadoop源码、导入Eclipse项目以及调试源码。这个过程对理解Hadoop的工作原理以及进行定制化...
由于Eclipse默认不直接支持Ivy,因此需要额外步骤才能在Eclipse中顺利导入和运行Hadoop源码。 1. **安装Ant**: Ant是Java项目的构建工具,用于编译和打包Hadoop源码。通过wget下载Apache Ant的zip包,如示例中的...
①jdk-8u321-linux-x64.tar.gz ②hadoop-eclipse-kepler-plugin-2.6.0.jar ③hadoop-3.2.2.tar.gz ④eclipse-java-2020-03-R-linux-gtk-x86_64.tar.gz
用于存储我的伪分布式集群环境,配置了Java1.8 ,Hadoop3.1.1,hadoop-eclipse-plugin2.7.3 软件架构 软件架构说明 安装教程 xxxx xxxx xxxx 使用说明 xxxx xxxx xxxx 参与贡献 Fork 本仓库 新建 Feat_xxx 分支 ...
HBase是一个分布式的、面向列的开源数据库,运行在Hadoop之上,适合存储半结构化数据。安装HBase时,需要考虑集群的Zookeeper配置,因为Zookeeper用于协调HBase的各个组件。 Oozie是Hadoop的工作流调度器,用于管理...
这个插件允许开发者直接在IDE中对Hadoop集群进行操作,如创建、编辑和运行MapReduce任务,极大地提升了开发效率。本文将详细介绍这两个版本的Hadoop Eclipse Plugin——1.2.1和2.8.0。 首先,Hadoop-Eclipse-Plugin...
hadoop+spark+hive Linux centos大数据集群搭建,简单易懂,从0到1搭建大数据集群
基于SpringBoot+Hadoop+Vue开发的企业级网盘分布式系统+本科毕业设计+源码+数据库 基于SpringBoot+Hadoop+Vue开发的企业级网盘分布式系统+本科毕业设计+源码+数据库 基于SpringBoot+Hadoop+Vue开发的企业级网盘...
Hadoop+Zookeeper+Hbase安装配置使用.pdf
Hadoop+Hbase+Spark+Hive搭建指南 Hadoop是Apache开源的大数据处理框架,它提供了可靠的高效的数据存储和处理能力。Hbase是基于Hadoop的分布式NoSQL数据库,提供了高效的数据存储和检索能力。Spark是基于内存的数据...
总的来说,`winutils.exe`和`hadoop.dll`是Hadoop在Windows运行的基础,而Eclipse插件则为开发者提供了强大的Hadoop开发和调试工具。正确配置这些组件,将使你在Windows上进行Hadoop开发变得更加便捷和高效。
在Windows操作系统中,Eclipse是一款广泛使用的Java集成开发环境(IDE),它对于开发分布式计算框架如Hadoop、Spark以及数据仓库工具Hive来说,是非常有用的。本教程将深入讲解如何在Eclipse中集成这些组件,以创建...
3.集群能正常运行的条件是集群可节点宕机数应保证有超过集群机器总数一半的机器在运行,因此从经济和实用性来说,集群的节点一般是奇数个,本文部署4台机器,其容灾能力与部署3台机器一致,即只能宕机1台
- 在Hadoop集群运行的基础上安装HBase,确保Hadoop的相关环境变量被HBase使用。 - 配置HBase的`hbase-site.xml`以指定Zookeeper地址和集群模式。 - 启动HBase服务,包括Master和RegionServer。 3. **Spark**:...