前言: 在执行 wordcount代码中,文件参数在代码中写死,如果希望动态指定 文件参数的话,可以将工程打成jar方式,在hadoop环境下执行,步骤如下:
1 wordcount类适量修改成如下:
package mapreduce; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.LongWritable; 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.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; /** * 打包到处方式,参数在执行时手动输入 而非在代码中固定写死 * 实现单词计数功能 * 测试文件 hello内容为: hello you hello me me me * @author zm * */ public class MyWordCountConfig extends Configured implements Tool{ static String FILE_ROOT = ""; static String FILE_INPUT = ""; static String FILE_OUTPUT = ""; public static void main(String[] args) throws Exception { ToolRunner.run(new MyWordCountConfig(), args); } @Override public int run(String[] args) throws Exception { FILE_ROOT = args[0]; FILE_INPUT = args[1]; FILE_OUTPUT = args[2]; Configuration conf = new Configuration(); FileSystem fileSystem = FileSystem.get(new URI(FILE_ROOT),conf); Path outpath = new Path(FILE_OUTPUT); if(fileSystem.exists(outpath)){ fileSystem.delete(outpath, true); } // 0 定义干活的人 Job job = new Job(conf); //打包运行必须执行的方法 job.setJarByClass(MyWordCountConfig.class); // 1.1 告诉干活的人 输入流位置 读取hdfs中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数 FileInputFormat.setInputPaths(job, FILE_INPUT); // 指定如何对输入文件进行格式化,把输入文件每一行解析成键值对 job.setInputFormatClass(TextInputFormat.class); //1.2 指定自定义的map类 job.setMapperClass(MyMapper2.class); job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(LongWritable.class); //1.3 分区 job.setNumReduceTasks(1); //1.4 TODO 排序、分组 目前按照默认方式执行 //1.5 TODO 规约 //2.2 指定自定义reduce类 job.setReducerClass(MyReducer2.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(LongWritable.class); //2.3 指定写出到哪里 FileOutputFormat.setOutputPath(job, outpath); job.setOutputFormatClass(TextOutputFormat.class); // 让干活的人干活 job.waitForCompletion(true); return 0; } } /** * 继承mapper 覆盖map方法,hadoop有自己的参数类型 * 读取hdfs中的文件。每一行解析成一个<k,v>。每一个键值对调用一次map函数, * 这样,对于文件hello而言,调用MyMapper方法map后得到结果: * <hello,1>,<you,1>,<hello,1>,<me,1> * 方法后,得到结果为: * KEYIN, 行偏移量 * VALUEIN, 行文本内容(当前行) * KEYOUT, 行中出现的单词 * VALUEOUT 行中出现单词次数,这里固定写为1 * */ class MyMapper2 extends Mapper<LongWritable, Text, Text, LongWritable>{ @Override protected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException { String[] v1s = v1.toString().split(" "); for(String word : v1s){ context.write(new Text(word), new LongWritable(1)); } } } /** * <hello,{1,1}>,<me,{1}>,<you,{1}>, 每个分组调用一次 reduce方法 * * KEYIN, 行中出现单词 * VALUEIN, 行中出现单词个数 * KEYOUT, 文件中出现不同单词 * VALUEOUT 文件中出现不同单词总个数 */ class MyReducer2 extends Reducer<Text, LongWritable, Text, LongWritable>{ protected void reduce(Text k2, Iterable<LongWritable> v2s,Context ctx) throws IOException, InterruptedException { long times = 0L; for(LongWritable l : v2s){ times += l.get(); } ctx.write(k2, new LongWritable(times)); } }
2 将工程打成jar包,这里是通过eclipse的export方式打成Jar包,注意细节如下:
3 将打好的包上传到hadoop环境中,执行命令如下:
[root@master ~]# hadoop jar wordcountconfig.jar hdfs://master:9000/ hdfs://master:9000/hello hdfs://master:9000/out
4 结果如下:
[root@master ~]# hadoop fs -text /out/part-r-00000 Warning: $HADOOP_HOME is deprecated. hello 2 me 3 you 1
5 打好的包见附件
相关推荐
这个压缩包文件包含了运行和开发Hadoop应用程序所需的所有jar包。这些jar包是Hadoop生态系统的关键组成部分,它们提供了核心Hadoop的功能,包括分布式文件系统(HDFS)和MapReduce计算模型。 1. **Hadoop核心**:...
在Hadoop生态系统中,`hadoop jar` 是一个命令行工具,它允许用户通过指定的JAR(Java档案)文件来运行包含在其中的主类。 描述中提到的链接可能是一个博客文章,虽然内容未给出,但我们可以推测它可能包含了如何...
配置管理则负责处理Hadoop配置文件的读取和解析,为Hadoop组件提供运行时参数。 **Hadoop MapReduce** `hadoop-mapreduce-client-core-2.7.7.jar`是Hadoop MapReduce客户端的核心库,它主要实现了MapReduce编程模型...
本文将详细介绍如何在Eclipse中使用Hadoop的各种JAR包,包括HDFS、MapReduce、YARN、HTTPFS和KMS,以实现高效的数据操作。 首先,我们需要理解这些组件在Hadoop生态系统中的角色: 1. HDFS(Hadoop Distributed ...
有时候在eclipse上运行项目,需要引用的Hadoop的jar包,也就是hadoop的外部依赖包,有conf,fs,io,mapreduce等等,这里列举了一部分,基本上hadoop的所有外部依赖jar包都包含在内了,如果下载了不会使用,可以看我...
Hadoop是一款开源的大数据处理框架,由Apache基金会开发,它主要设计用于分布式...用户在使用时,通常需要通过`hadoop jar [jar_file] [main_class] [args...]`命令来执行包含在jar包中的主类,从而启动Hadoop作业。
在Windows环境下,可以使用Eclipse的本地模式测试代码,或通过配置提交到Hadoop集群运行。 6. **推荐系统**: 推荐系统通常基于用户行为数据、兴趣偏好等信息进行预测。在Hadoop中,可以通过MapReduce处理大规模...
- **类路径设置**:在运行Java程序时,通过`-cp`或`-classpath`参数指定JAR包的位置。 总的来说,"hadoop 所用的jar包"是开发和运行Hadoop应用必不可少的组成部分,它们提供了Hadoop框架的核心功能和API,使得...
这个“hadoop集群jar包大全”集合了在Hadoop环境中开发、运行项目所必需的各种库文件,这些库涵盖了Hadoop的核心组件,以及与之紧密相关的其他大数据技术如Hive、HBase、SFTP和JUnit。以下是对这些关键组件的详细...
6. **JAR打包**:在Windows上运行Hadoop MapReduce程序,可能需要将所有依赖的JAR文件(包括上述两个JAR文件)一起打包成一个可执行的JAR,以便在集群上正确运行。 总之,Windows环境下使用Java调用Hadoop 2.x ...
2. **运行配置**:能够创建和配置MapReduce作业,包括指定输入输出路径、设置主类、配置集群参数等。 3. **调试支持**:在Eclipse内部可以直接调试MapReduce程序,设置断点,查看变量状态,以及控制执行流程。 4. **...
包含hadoop平台Java开发的所有所需jar包,例如activation-1.1.jar apacheds-i18n-2.0.0-M15.jar apacheds-kerberos-codec-2.0.0-M15.jar api-asn1-api-1.0.0-M20.jar api-util-1.0.0-M20.jar asm-3.2.jar avro-1.7.7...
集成Hadoop和HBase时,通常会将HBase的JAR包添加到Hadoop的类路径中,确保Hadoop集群能够识别并处理HBase的相关操作。这个过程可能涉及到配置Hadoop的环境变量,如HADOOP_CLASSPATH,以及修改HBase的配置文件,如...
使用Spark-assembly-1.5.2-hadoop2.6.0.jar时,开发者需要将其添加到项目的类路径中,以确保所有Spark相关的依赖都被正确引入。在Scala项目中,这通常通过构建工具如sbt或Maven来完成。例如,在sbt的build.sbt文件中...
6. **启动与运行**:在部署Hadoop时,用户需要确保所有必要的JAR包都在类路径中,这通常通过修改`hadoop-env.sh`或`hadoop-classpath.sh`脚本来完成。然后,可以通过`start-dfs.sh`和`start-yarn.sh`命令启动HDFS和...
Eclipse 中将 Hadoop 程序打包成 JAR 文件并直接设定参数运行 本文将详细介绍如何使用 Eclipse 将 Hadoop 程序打包成 JAR 文件,并直接设定参数运行。通过本文,您将了解到 Eclipse 中的项目导出、JAR 文件生成、...
这个压缩包文件“win10下编译过的hadoop2.7.2 jar包”是专门为在Windows 10操作系统上运行Hadoop 2.7.2版本而准备的。这个版本的Hadoop包含了所有必要的库文件和依赖,使得开发者能够在本地环境中配置和运行Hadoop...
hadoop-annotations-3.1.1.jar hadoop-common-3.1.1.jar hadoop-mapreduce-client-core-3.1.1.jar hadoop-yarn-api-3.1.1.jar hadoop-auth-3.1.1.jar hadoop-hdfs-3.1.1.jar hadoop-mapreduce-client-hs-3.1.1.jar ...
5. 集成与开发:开发人员在使用Hadoop和HBase时,需要在代码中引入对应的jar包,并配置相关环境变量。例如,通过`addDependency`或者`classpath`指定jar路径,然后使用Hadoop的API读写HDFS,使用HBase的API操作...