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

步骤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 的方式来实现。

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

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

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

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

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

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

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

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

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

Hadoop伪分布式部署配置

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

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

访问:localhost:50070

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

步骤9

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

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

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

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

export HADOOP_ROOT_LOGGER=DEBUG,console

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

好了,又又可以执行了。

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

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

步骤10

安装Eclipse

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

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

建议使用eclipse版本:neon版本

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

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

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

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

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

配置插件

设置Hadoop插件

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

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

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

打开MapReduce视图

Windows->Show View->Other…

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

配置HDFS和MapReduce服务器地址

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

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

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

管理远程HDFS文件

步骤11

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

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

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

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

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

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

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

途中的案例是:

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

注意其中的空格

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

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

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

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

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

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

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

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

在使用打包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 {
		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 {
		private IntWritable result = new IntWritable();

		public void reduce(Text key, Iterable 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  ");
			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);
	}
}

运行:右键选择运行

结果如下:

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

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

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

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

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

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

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

然后执行WordCount类

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

刷新output,使用

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

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

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

 

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

 

 

 

 

 

 

你可能感兴趣的:(分布式,LINUX,大数据)