Linux(Ubuntu)上使用Eclipse配置Hadoop开发环境详细步骤+WordCount示例-2

本文详细介绍了如何在单节点上部署Hadoop伪分布式环境,包括配置过程及解决常见问题的方法。同时,文章还讲解了如何在Linux环境下安装Eclipse并配置Hadoop插件,以便进行HDFS文件管理和MapReduce程序开发。

步骤8

Hadoop伪分布式部署配置

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

NameNode:namenode

  1. 一是管理文件系统文件的元数据信息(包括文件名称、大小、位置、属性、创建时间、修改时间等等),
  2. 二是维护文件到块的对应关系和块到节点的对应关系,
  3. 三是维护用户对文件的操作信息(文件的增删改查)与任务调度

DataNode:存放数据 Hadoop 的配置文件位于 $HADOOP_HOME/etc/hadoop/ 中,伪分布式需要修改2个配置文件 core-site.xml 和 hdfs-site.xml 。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。

7527b8c782eddbbaf4634ffb95bde133.png

53e598156dc647e3fb715890487e4ee4.png

1ef7f26f4ac451f1623026290a0cdbf3.png

3905b8921af63729472c99741115e2fa.png

8940dae353ff7af4a57d400faaf0538e.png

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。

此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错

格式化dfs:指令:bin/hadoop namenode -format

3da7f8e47d30662effd8899d074f5924.png

de4106fae2eabaf418b0548bf817939d.png

格式化成功,并且状态码为0,说明配置成功

注意:一这个bin/hadoop namenode -format

只能执行一次,不能执行多次,如果多次,出错,就是namedode产生的id和datanote的id不能匹配了

Hadoop伪分布式部署配置

启动hadoop:./sbin/start-dfs.sh

可以在服务器的本地访问hadoop内容,也可以在外部访问。

访问:localhost:50070

f16594e73252c2990ef2fed078439304.png

步骤9

利用正则表达式匹配示例(grep)测试

cc594f178ece593d6074091efe1713e6.png

问题:如果出现以下问题:

33baf0ccea693dcc26340c3a01ab27e0.png

怎么办呢?别着急执行如下指令:

export HADOOP_ROOT_LOGGER=DEBUG,console

d215323ff09a322d181087c6328e7552.png

好了,又又可以执行了。

OK,如果你没有DEBUG的内容,不要着急,这是因为你的Hadoop的DEBUG模式没有打开。

已经说明你的hadoop基本配置好了,接下来就是使用Eclipse来进行显示,开发。

步骤10

安装Eclipse

由于在Windows中利用Eclipse插件管理HDFS文件会出现很多难以控制的问题(包括Hadoop的本地库替换等),因此我们可以在Linux中安装Eclipse和对应插件。 需要先按照以前课程的内容安装JDK。

0a0c72254f01b3a19b2beeb5d13b613a.png

建议使用eclipse版本:neon版本

eclipse-jee-neon-3-linux-gtk-x86_64.tar.gz

下载地址:到eclipse官网自己选择,(这个地址,我稍后补上)

995a24b0db3986306d5f9af59c583679.png

将eclipse需要的插件就是开篇讲的这个:hadoop-eclipse-plugin-2.6.0.jar,放入plugins中

e95ffe94713ee90fc48387340d97bf3a.png

配置插件

设置Hadoop插件

c34c6668831ef02bbe14a217d2d6ff50.png

在插件中确定Hadoop的安装位置,即系统的$HADOOP_HOME

2aeaa72657b848d120c3034604aca121.png

打开MapReduce视图

Windows->Show View->Other…

8d240115c4a1750639ff23bdfc45b22d.png

配置HDFS和MapReduce服务器地址

3b41610ae1c14147914a55ee32098af3.png

右键选择新建:新建VH,如果能有弹出框,证明插件没有问题,如果出不来,那就说明插件有问题。

e8ebdbd6e1cb3d8e5a7708ce68582cc9.png

管理远程HDFS文件

步骤11

配置远程MapReduce路径后即可通过Eclipse方便的查看、管理Hadoop HDFS文件

45c5562e31a477487ec4355a00d07fd7.png

  1. MapReduce程序运行两种方式 Eclipse端直接运行,
  2. 远程访问MapReduce 打包为jar文件,拷贝到Hadoop服务器执行

715b0fb0f158190e3f808bde61194bc1.png

直接在Eclipse运行WordCount远程访问MapReduce

运行时需要为程序提供参数,代表程序的

输入和输出 输入和输出不能以文件路径的方式存在,否则将会访问本地资源,应该使用’hdfs://主机:端口/路径’的方式提供

途中的案例是:

hdfs://localhost:9000/user/hadoop/input/README.txt hdfs://localhost:9000/output/ide

注意其中的空格

62a0e1d766224a702393588347d628e3.png

添加jar包,一定要把jar包放全:jar包的位置是在于这个位置

48ab883b37c447e0033da1f60786659f.png

ca3a14228e9b509b385275ae3e16d6ff.png

e2fcfd2e2c1c13129106e55614feafa7.png

13480f9057403c92244ff8af2ed878ef.png

程序运行时请确保输出路径不存在,否则程序将输出异常而不能正常执行(空文件夹也不行),因此如果再次运行的话需要将之前的运行结果删除

e6395210dbe4c4a24d152733d31601c9.png

在使用打包JAR方式执行之前 先将之前生成的执行结果删除

步骤12

使用自定义的JAVA类,来实现词数统计

增加一个WordCount.java类

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<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();
		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		if (otherArgs.length != 2) {
			System.err.println("Usage: wordcount <in> <out>");
			System.exit(2);
		}
		@SuppressWarnings("deprecation")
		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);
	}
}

运行:右键选择运行

结果如下:

c7d91e338115dc0be2a3970c4dcd8cf2.png

在output下ide文件夹内,生成两个文件,结果是分词文件,展示其中内容如上。

如果我需要自定义一个文件那么我可以在任意一个位置创建文件比如:

5837cd2700a88658b474db693aae046c.png

d96842f403efe34e38e232f74ef92935.png

在eclipse中上传自己要准备的文件:Upload File to DFS

484ef909e450387077abdd6c57226db8.png

然后执行WordCount类

7fd012ac33b8f030ec55a485919f2c20.png

刷新output,使用

会看到这个文件内容,结果OK

47aacaabe93a1f20fdddebb69b1d0c7d.png

已经实现了单词计数的基本功能,也标志着使用Ubuntu+Hadoop+Eclipse实现了该功能。

 

精彩内容继续,您的点赞(๑•̀ㅂ•́)و✧是我的动力,感谢你的支持,谢谢

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值