(1)你编写了一个java lib,封装成了jar,然后再写了一个Hadoop程序,调用这个jar完成mapper和reducer的编写
(2)你编写了一个Hadoop程序,期间调用了一个第三方java lib。
之后,你将自己的jar包或者第三方java包分发到各个TaskTracker的HADOOP_HOME目录下,运行你的JAVA程序,报了以上错误。
2. 解决方法
(1) 在运行脚本中添加classpath.
在$HADOOP_HOME/conf/hadoop_env.sh 或者$HADOOP_HOME/bin/hadoop-config.sh中添加:
export HADOOP_CLASSPATH=$HADOOP_HOME/my_jars
然后将你自己的jar包和第三方jar包分发到各个TaskTracker的HADOOP_CLASSPATH目录下(别忘了所有TaskTracker上的hadoop_env.sh和hadoop-config.sh均按以上方法添加HADOOP_CLASSPATH环境变量)
【注】hadoop_env.sh和hadoop-config.sh是所有hadoop运行脚本(start-all.sh, start-dfs.sh等)一定会引用的配置脚本,可以将一些最基本的环境变量或者配置参数加到这两个文件中。
(2) 使用“-D libjars“参数
public class MyHadoopJob extends Configured implements Tool { public static class MapClass extends Mapper<LongWritable, Text, IntPair, IntWritable> { //your mapper }
public static class Reduce extends Reducer<IntPair, IntWritable, Text, IntWritable> { //your reducer } //设定并读取应用程序相关的,自己定义的一些参数
public int run(String[] args) throws Exception { if(args.length < 2) { printUsage(); return 2; } Job job = new Job(getConf()); …...... } //真正的main函数 public static void main(String[] args) throws Exception{ int res = ToolRunner.run(new Configuration(), new SleepJob(), args); System.exit(res); } }
运行作业:
#run_myjob.sh
bin/hadoop jar myjob.jar MyHadoopJob \
-D mapred.job.name=MyHadoopJob \
-D mapred.map.tasks=24 \
-D mapred.mreduce.tasks=12 \
-D mapred.input.dir=/test/input1,test/input2 \
-D mapred.output.dir=/test/output \
-D libjars=myjob.jar,third-party.jar
-my1 5 \
-my2 china
运行./run_myjob.sh
其中 “-D libjars“指定本地两个jar文件,Hadoop自动会把这两个文件分发到各个TaskTracker的临时工作目录下,用完后自动删除。
3. 解决方案比较
第一种方法过于笨拙,每次都要人工地将jar包分发到各个TaskTracker上,如果集群很大,非常耗时;第二种方法利用了Hadoop内部机制进行jar包分发,非常方便。实际上,在Hadoop example中,除了WordCount例子外,其他所有例子均采用了方案2的设计方法。
分享到:
相关推荐
Java Web程序调用Hadoop 2.6是一个关键的技术整合,它允许Web应用程序与Hadoop分布式文件系统(HDFS)和MapReduce框架交互,以处理大规模数据。在本示例中,我们将深入探讨如何实现这一集成,以及涉及的关键概念和...
此外,由于Hadoop是高度可扩展的,所以Hadoop2lib也可能包含一些第三方库,如Pig、Hive、HBase等,这些工具进一步丰富了Hadoop生态系统,提供了SQL-like查询、数据分析等多种功能。 总结起来,Hadoop2lib.tar.gz是...
在这个过程中,引入第三方库是非常常见的,因为Hadoop自身虽然强大,但并不是一个完全封闭的系统,它依赖于许多其他开源库来实现其功能。在这个压缩包中,包含了一些用于支持Hadoop 2.2版本开发的第三方jar包,这些...
基于Hadoop的Java调用Matlab混合编程的车牌识别技术是现代交通管理领域的一个重要应用,它结合了Hadoop的大数据处理能力以及Matlab强大的数值计算和图像处理能力,为车牌识别的准确性和实时性提供了新的解决方案。...
此外,程序还会包含一个主类,用于设置Job参数并提交到Hadoop集群执行。主类会调用`Job`的`setJarByClass()`方法指定主类所在的JAR文件,`setMapperClass()`和`setReducerClass()`方法分别设置Mapper和Reducer的类,...
在大数据处理领域,Hadoop是不可或缺的一个开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。本教程将详细讲解如何使用Java编程语言操作Hadoop的MapReduce来计算整数序列中的最大值和最小值,...
`lib`目录存储了Hadoop运行时依赖的所有第三方库文件,这些文件主要为JAR(Java Archive)格式。这些库文件支持Hadoop的核心功能,包括网络通信、序列化、配置管理以及数据处理等。例如,`protobuf-java.jar`提供了...
本资源是一个特别为Windows 10操作系统编译的Hadoop版本,包含`bin`和`lib`两个关键目录,以及`winutils.exe`和`hadoop.dll`这两个对Windows环境至关重要的组件。 首先,让我们详细了解一下`bin`和`lib`目录。`bin`...
在这种情况下,描述中提到的“flink-shaded-hadoop-2-uber-2.7.5-10.0.jar”就是一个关键的第三方JAR,它是Flink为兼容Hadoop 2.7.5版本而构建的阴影(shaded)JAR,用于解决依赖冲突问题。 阴影JAR(Uber JAR)是...
在这个Java API中,我们可以找到一系列的类和接口,它们允许开发者编写应用程序来利用Hadoop的功能。 在Hadoop 2.x及以上版本中,Java API进行了许多优化和改进,以提高性能和稳定性。以下是一些主要的组件和概念:...
而这些组件的正常运行离不开一系列的依赖库,这些库文件通常被包含在一个名为“lib”的目录下,这就是我们今天要讨论的“hadoop lib包”。本文将深入探讨这个lib包的构成、作用以及在CentOS 6.4和Redhat 6系统上的...
32位的linux下载的是64位的hadoop,运行的时候会提示Unable to load native-hadoop library for your platform ussing builtin -Java class where 将此lib包放在hadoop的lib目录下 。 参考博客:...
Java整合Spring和Hadoop HDFS是一项常见的任务,特别是在大数据处理和分布式存储的场景下。这里,我们将深入探讨这个主题,了解如何将这三个关键技术融合在一起。 首先,Java是编写应用程序的通用编程语言,它提供...
在分布式计算领域,Hadoop是一个不可或缺的开源框架,它主要用于处理和存储大量数据。而Snappy则是一种高效的压缩和解压缩算法,最初由Google开发,主要用于提高数据读写速度,尤其是在大数据处理环境中。Hadoop与...
在Java项目中,Hadoop是一个不可或缺的开源框架,主要用于处理和存储海量数据。这个"java项目Hadoop依赖包"包含了MapReduce和HDFS(Hadoop Distributed File System)的相关组件,是构建分布式大数据处理系统的基础...
Hadoop生态还包括HBase(一个分布式数据库)、Hive(一个数据仓库工具)、Pig(一个数据分析平台)等。 总的来说,Java-org.apache.hadoop涉及到的知识点广泛且深入,包括分布式系统基础、HDFS的架构和操作、...
java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价硬件上处理大量数据,实现了大规模数据处理的高效性和可扩展性。本压缩包文件“hadoop-3.1.3-mac-native_lib.zip”专门针对macOS系统,包含了在...
当运行Hadoop相关的Java程序或者使用Hadoop命令行工具时,操作系统会调用这个库来执行相应的功能。 `hadoop.exp`文件在编译过程中用于生成`libwinutils.lib`,它是一个导入库文件。在Windows编程中,导入库包含了一...
在这个场景中,我们讨论的是一个特别为Windows编译的Hadoop版本,包含了`bin`和`lib`两个关键目录。 1. **bin** 目录: `bin`目录包含了Hadoop的可执行脚本,这些脚本用于启动、管理和操作Hadoop集群。例如,`...