赞
踩
一:启动Hadoop集群
二.编写mapreduce程序代码
三:将写好的java代码打包jar
四:将jar上传至服务器,即Hadoop集群中
五:运行jar程序
hadoop jar Word.jar hdfs://hadoop01:9000/word.txt output
命令:hadoop jar jar包名 输入文件名 输出目录
前期准备工作
xshell分别远程连接三台虚拟机hadoop01,hadoop02,hadoop03
进入hadoop01主机,cd进入bin目录,使用bash脚本启动Hadoop集群
命令:cluster start
使用写好的脚本xcall jps查看启动好的集群情况
命令:xcall jps
查看namenode的web页面并查看hdfs上的文件系统
IP地址或主机:端口号
hadoop01:50070或192.168.226.101:50070
查看yarn资源调度器的web页面
同上,除端口号外都一致
hadoop01:8088
进入code目录,新建一个txt文件
这里我新建的是wordcount.txt,内容如下(code在家目录下)
在hdfs上新建一个目录input用于存放输入文件
这里的input创建在hdfs的用户主目录,绝对路径是/user/ghh,可以简写为空白或空格
比如,要查看用户主目录下的列表文件目录,可以用hdfs dfs -ls /user/ghh或hdfs dfs -ls
注:hdfs dfs命令等价与hadoop fs,即hdfs dfs -ls /user/ghh等价于hadoop fs -ls /user/ghh
之后再使用mkdir在hdfs中的主目录创建output目录,用来存放输出文件
到此,前期工作已经完成,现在开始第一个mapreduce任务—wordcount单词计数,即统计我的wordcount.txt文件中的单词出现的数目
进入 /usr/local/eclipse,打开eclipse,进行编写Java程序代码
注:前提安装了eclipse,这里已经安装好了
如果用xshell连接服务器(虚拟机),则需要安装Xmanager Power Suite才能打开,已安装好
运行之后会弹出选择代码的工作目录,之后点击launch
编写代码前需要导入代码所要用到的相关jar包,于是我们需要进行导入
进入代码编辑页面,依次点击project→properties
需要从相关配置文件目录下导入
在hadoop目录下的share/hadoop/mapreduce目录下的所有jar包
在hadoop目录下的share/hadoop/common目录下的common的jar包
在hadoop目录下的share/hadoop/common/lib目录下的所有jar包
具体所需的jar如下
具体要导入的jar包如下:
导入全部jar包后apply应用
完成导入jar包之后,就可以开始编写mapreduce代码了
代码如下:
- package word;
-
- //导入相关jar包
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Mapper;
- import org.apache.hadoop.mapreduce.Reducer;
- import java.io.IOException;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.mapreduce.Job;
- import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
- import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
-
- //Map
- class Map extends Mapper<LongWritable, Text,Text,LongWritable> {
- @Override
- protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
- //获取一行的内容
- String line = value.toString();
- //每一行的单词是以空格隔开的,所以使用空格切割成数组
- String[] words = line.split(" ");
- for (String word:words
- ) {
- //输出到reduce
- context.write(new Text(word),new LongWritable(1));
- }
- }
- }
-
- //Reduce
- class Reduce extends Reducer<Text, LongWritable,Text,LongWritable> {
- @Override
- protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
- long sum = 0;
- for (LongWritable value:values
- ) {
- sum = sum + value.get();
- }
- //输出
- context.write(key,new LongWritable(sum));
- }
- }
-
- //main函数
- public class WordCount{
- public static void main(String[] args) throws Exception{
- //获取job
- Configuration conf=new Configuration();
- Job job=Job.getInstance(conf);
- //Job job=Job.getInstance(new Configuration());
- //指定job使用的类
- job.setJarByClass(WordCount.class);
- //设置mapper的类以及属性
- job.setMapperClass(Map.class);
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(LongWritable.class);
- //设置reducer的类以及属性
- job.setReducerClass(Reduce.class);
- job.setOutputKeyClass(Text.class);
- job.setOutputValueClass(LongWritable.class);
- //设置输入文件
- FileInputFormat.setInputPaths(job, new Path(args[0]));
- //设置输出目录
- FileOutputFormat.setOutputPath(job, new Path(args[1]));
- //提交任务
- job.waitForCompletion(true);
- }
- }
编写完代码将写好的代码无需运行,直接打包成jar
file→export
双击hadoop01,新开一个终端,因为当前终端正在运行eclipse程序
可以看到,我们写好的程序已经打包好了
现在开始运行
运行命令:
hadoop jar WordCount.jar word.WordCount input/wordcount.txt output/wordcount
hadoop jar jar包名 包名.主类名 输入文件 输出文件目录
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。