Loading... # And 1.前言 刚刚学习hadoop集群使用真的很乱,一团麻...连在集群里执行脚本都不会。。。 # And 2.正经步骤 ## And 2.1.启动集群 下面图片是我搭的Hadoop集群分布,具体操作依据自己的实际配置做调整:  ## And 2.2.进入Hadoop的安装目录里 后面的步骤几乎都会在hadoop目录里面操作,我的路径是`/export/server/hadoop-3.3.1`  ## And 2.3.创建基础input文件夹 ### And 2.3.1.创建验证 input文件夹做为基础文件夹目录,主要用来存放输入的文件,存放处。 ```shell hadoop fs -mkdir /input ```  执行完毕之后,到webUI的HDFS集群的文件管理里面就可以看到多了一个`input`的文件夹  ### And 2.3.2.文件传入测试 我在另外一台集群机器(hadoop03)上的root家目录里创建一个test.txt,里面内容为`Hadoop3` ```shell ## echo覆盖写入内容到test.txt文件,没有这文件会自动创建 echo Hadoop3 > test.txt ```  创建好后传入文件: ~~~shell ## -put将test.txt文件传入到HDFS的/input/路径下 hadoop fs -put test.txt /input/ ## -ls查看/input路径下的文件 ## -cat打印输出test.txt的内容 ~~~  上面是直接在终端内查看的,也可以到webUI内查看一下:  打开查看  ## 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 ~~~    ### And 2.4.2.创建java文件 1)切换路径 ~~~shell cd /export/server/hadoop-3.3.1/wordcount/src ~~~  2)创建文件 创建三个java文件  ~~~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); } } } ~~~ 保存退出  ~~~~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); } } ~~~~ 保存退出  ~~~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 ~~~  保存退出 再使用`source`命令更新生效一下文件配置 ~~~shell source ~/.bashrc ~~~  #### And 2.4.3.2.编译文件 1)切换目录 ~~~shell ~~~ 最后修改:2024 年 08 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 觉得文章有用,可以赞赏请我喝瓶冰露
2 条评论
立意高远,以小见大,引发读者对社会/人性的深层共鸣。
若能弱化说教语气,传播效果会更好。