Loading... # And 1.前言 刚刚学习hadoop集群使用真的很乱,一团麻...连在集群里执行脚本都不会。。。 # And 2.正经步骤 ## And 2.1.启动集群 下面图片是我搭的Hadoop集群分布,具体操作依据自己的实际配置做调整: ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/1756120199.png) ## And 2.2.进入Hadoop的安装目录里 后面的步骤几乎都会在hadoop目录里面操作,我的路径是`/export/server/hadoop-3.3.1` ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/2734379362.png) ## And 2.3.创建基础input文件夹 ### And 2.3.1.创建验证 input文件夹做为基础文件夹目录,主要用来存放输入的文件,存放处。 ```shell hadoop fs -mkdir /input ``` ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/1781596888.png) 执行完毕之后,到webUI的HDFS集群的文件管理里面就可以看到多了一个`input`的文件夹 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/2553200483.png) ### And 2.3.2.文件传入测试 我在另外一台集群机器(hadoop03)上的root家目录里创建一个test.txt,里面内容为`Hadoop3` ```shell ## echo覆盖写入内容到test.txt文件,没有这文件会自动创建 echo Hadoop3 > test.txt ``` ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/3497703754.png) 创建好后传入文件: ~~~shell ## -put将test.txt文件传入到HDFS的/input/路径下 hadoop fs -put test.txt /input/ ## -ls查看/input路径下的文件 ## -cat打印输出test.txt的内容 ~~~ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/4173257912.png) 上面是直接在终端内查看的,也可以到webUI内查看一下: ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/1915440197.png) 打开查看 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/250745010.png) ## And 2.4.创建第一个java程序 这里java程序用的网上的,java没学好写一个好麻烦的,拷一个来用[/狗头]。 ### And 2.4.1.创建程序文件夹 这里我们统一到hadoop安装路径下创建三个文件夹 分别创建`wordcount`,`src`,`classes` 1)进入到hadoop安装路径(这里因为均衡一下资源,选择在hadoop03上操作) 2)创建目录 ~~~shell ## 切换目录 cd /export/server/hadoop-3.3.1 ## 创建文件夹 mkdir -p wordcount & mkdir -p wordcount/src & mkdir -p wordcount/classes ~~~ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/3630251058.png) ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/3347192283.png) ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/2189220844.png) ### And 2.4.2.创建java文件 1)切换路径 ~~~shell cd /export/server/hadoop-3.3.1/wordcount/src ~~~ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/4039368322.png) 2)创建文件 创建三个java文件 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/582012548.png) ~~~shell ## vim编辑 vim TokenizerMapper.java ############################################################################# ## 内容###################################################################### ############################################################################# package com.lisong.hadoop; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { IntWritable one = new IntWritable(1); 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); } } } ~~~ 保存退出 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/60127441.png) ~~~~shell ## vim编辑 vim IntSumReducer.java ############################################################################# ## 内容###################################################################### ############################################################################# package com.lisong.hadoop; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { 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); } } ~~~~ 保存退出 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/2904018242.png) ~~~shell ## vim WordCount.java ############################################################################# ## 内容###################################################################### ############################################################################# package com.lisong.hadoop; 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.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class WordCount { 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, "wordcount"); 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); } } ~~~ 保存退出 ### And 2.4.3.编译java文件 #### And 2.4.3.1.配置classpath变量 这里在编译前,需要先修改一下`classpath`变量,直接修改家目录的`.bashrc`文件 ~~~shell vim ~/.bashrc ~~~ 在文件内容末尾加入两行内容: ~~~shell ## 第一行指定javaJDK的对应路径 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH ## 第二行指定hadoop程序的对应路径(版本不同的话,直接修改这行的两处版本号为自己的版本即可) export CLASSPATH=.:$HADOOP_HOME/share/hadoop/common/hadoop-common-3.3.1.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.1.jar:$HADOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$CLASSPATH ~~~ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/2238952518.png) 保存退出 再使用`source`命令更新生效一下文件配置 ~~~shell source ~/.bashrc ~~~ ![image.png](https://www.zmzaxg.top/usr/uploads/2023/07/115928762.png) #### And 2.4.3.2.编译文件 1)切换目录 ~~~shell ~~~ 最后修改:2024 年 08 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 觉得文章有用,可以赞赏请我喝瓶冰露