Mapreduce部署与第三方依赖包管理

YARN部署并运行MapReduce任务 MapReduce: 计算, 是java开发的jar包,代码复杂,企业不用,一般用hive sql 是不需要部署的,运行在Yarn上 Yarn: 资源和作业的调度,是需要部署的 官网:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#YARN_on_a_Single_N... 阅读详情

    Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错。本文介绍几种常用的配置方式:

 

1. HADOOP_CLASSPATH

    在hadoop的相关配置文件中,添加CLASSPATH路径,那么在hadoop的各个进程启动时都会载入这些包,因此对于mapreduce-job jar中则不需要额外的引入这些jars,所以mapreduce-job jar会比较小[瘦jar],便于传输;但它的问题也比较明显,如果mapreduce-job中新增了其他引用jar,则必须重新启动hadoop的相关进程。

    我们可以在hadoop-env.sh中,增加如下配置:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/path/customer/jars

 

    其中“/path/customer/jars”路径为自己的第三方jar所在的本地路径,我们需要在集群中所有的hadoop机器上都同步这些jar。

 

    瘦jar的打包方式(maven):

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<executions>
		<execution>
			<id>copy-dependencies</id>
			<phase>prepare-package</phase>
			<goals>
				<goal>copy-dependencies</goal>
			</goals>
			<configuration>
				<outputDirectory>${project.build.directory}/lib</outputDirectory>
				<overWriteReleases>false</overWriteReleases>
				<overWriteSnapshots>false</overWriteSnapshots>
				<overWriteIfNewer>true</overWriteIfNewer>
			</configuration>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
				<classpathPrefix>lib/</classpathPrefix>
				<mainClass>com.app.script.Main</mainClass>
			</manifest>
		</archive>
	</configuration>
</plugin>

 

    使用了copy-dependencies插件,当使用“mvn package”命令打包之后,第三方引用包会被copy到打包目录下的lib文件中(并非mapreduce-job jar内部的lib文件中),开发者只需要把这些jars上传到所有hadoop集群即可。

 

2. 其他方式

    我们可以将额外的jars包,放置在yarn能够加载的路径下,目前可行的方案为,在yarn-site.xml中修改:

 <property>
		<name>yarn.application.classpath</name>
		<value>$HADOOP_CONF_DIR,$HADOOP_COMMON_HOME/share/hadoop/common/*,
				$HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
				$HADOOP_HDFS_HOME/share/hadoop/hdfs/*,
				$HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,
				$HADOOP_YARN_HOME/share/hadoop/yarn/*,
				$HADOOP_YARN_HOME/share/hadoop/yarn/lib/*
		</value>
</property>

 

    上述路径为默认配置,我们可以把自己的第三方jars放在"$HADOOP_YARN_HOME/share/hadoop/yarn/lib/"下,经过测试,用户自定义的文件路径并不能很好的生效,这个问题困惑了我很久。

 

    此外,我们还可以修改hadoop-env.sh文件,增加相应的classpath,不过这种方式添加的jars,将会在hadoop的所有子进程中加载(包括yarn进程),这是一种比较快速而且有效的方式,唯一不好的地方就是当jars变更时,需要重启所有的子进程。

 

export HADOOP_CLASSPATH="$HADOOP_CLASSPATH:/path/customer/jars/*"

 

    同时,本人通过在mapred-site.xml中增加如下配置,却不能生效,不确定是何种原因(尽管$HADOOP_HOME正常)

<property>
		<name>mapred.child.env</name>
		<value>LD_LIBRARY_PATH=/path/customer/jars</value>
		<!-- 
			LD_LIBRARY_PATH=$HADOOP_HOME/mapred-lib/thirdparty
		-->
</property>

 

 

3. -libjars选项

    我们可以在使用“hadoo jar”命令时,向启动的job传递“libjars”选项参数,同时配合ToolRunner工具来解析参数并运行Job,这种方式是推荐的用法之一,因为它可以简单的实现job的依赖包和hadoop classpath解耦,可以为每个job单独设置libjars参数。这些jars将会在job提交之后复制到hadoop“共享文件系统中”(hdfs,/tmp文件夹中),此后taskTracker即可load到本地并在任务子进程中加载。

 

    libjars中需要指定job依赖的所有的jar全路径,并且这些jars必须在当前本地文件系统中(并非集群中都需要有此jars),暂时还不支持hdfs。对于在HADOOP_CLASSPATH或者mapred.child.env中已经包含了jars,则不需要再-libjars参数中再次指定。因为libjars需要指定jar的全路径名,所以如果jars特别多的话,操作起来非常不便,所以我们通常将多个job共用的jars通过HADOOP_CLASSPATH或者mapred.child.end方式配置,将某个job依赖的额外的jars(少量的)通过-libjars选项指定。

 

hadoop jar statistic-mr.jar com.statistic.script.Main -libjars /path/cascading-core-2.5.jar,/path/cascading-hadoop-2.5.jar

 

4. Fatjar

    胖jar,即将mapreduce-job jar所依赖的所有jar都“shade”到一个jar中,最终package成一个“独立”的可运行的jar;当然hadoop并不需要这个jar是“可运行的”,它只需要这个jar在运行时不需要额外的配置“--classpath”即可。此外Fatjar仍然可以使用HADOOP_CLASSPATH或者map.child.env所加载的jars,因为我们在打包时可以将这些jars排除,以减少fatjar的大小。

 

    fatjar只不过是一种打包的方式,也仍然可以和“-libjars”选项配合。不过从直观上来说,fatjar确实是解决“-libjars”不方便的技巧。

 

    此例中,我们使用cascading来开发一个mapreduce job,但是我们又不希望cascading的相关依赖包被放入HADOOP_CLASSPATH中,因为其他的job可能不需要或者其他的job有可能使用其他版本的cascading;所以就使用Fatjar,把job程序和cascading的依赖包全部“shade”在一起。

 

    使用maven assambly插件来完成fatjar的打包工作:

    1) pom.xml

<build>
	<finalName>statistic-mapred</finalName>
	<plugins>
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-assembly-plugin</artifactId>
			<configuration>
				<descriptors>
					<descriptor>src/assembly.xml</descriptor>
				</descriptors>
				<archive>
					<!-- optional -->
					<!--
					<manifest>
						<mainClass>com.script.Main</mainClass>
						<addClasspath>true</addClasspath>
					</manifest>
					-->
				</archive>
			</configuration>
			<executions>
				<execution>
					<id>make-assembly</id>
					<phase>package</phase>
					<goals>
						<goal>single</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>

 

    2) assambly.xml

<assembly>
    <id>cascading</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>true</unpack>
            <scope>runtime</scope>
            <!--
            <excludes>
                <exclude>org.apache.hadoop:*</exclude>
            </excludes>
            -->
            <!-- very small jar -->
            <includes>
                <include>cascading:*</include>
                <include>thirdparty:*</include>
            </includes>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>/</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

 

   在assambly.xml中我们通过<include>标签来包含需要被“shade”的第三方依赖包,并且采用了unpack(解压)方式,此例中我们只将cascading的jar打进fatjar中,对于其他包将会被忽略,因为这些包已经在hadoop中存在(比如hadoop,hdfs,mapreduce,已经其他的常用包,都可以共用hadoop的),最终我们的打包结果如下:



 

    有了fatjar,确实大大的减少了开发工程师部署mapreduce的复杂度和出错的可能性,如果你有即备的maven环境,建议使用fatjar的方式。将fatjar直接放在hadoop中使用“hadoop jar”指令即可执行,几乎无需关心依赖包遗漏的问题。

 

    此外,需要备注一下,在使用cascading时,如果采用了HADOOP_CLASSPATH方式管理依赖时,会偶尔抛出:

Split class cascading.tap.hadoop.MultiInputSplit not found

 

    尽管cascading的所有依赖包都在CLASSPATH中,也无法解决这个问题,不确定究竟发生了什么!!后来采用了fatjar之后,问题解决!!

 

  • 大小: 24.5 KB
18650电池组流体直冷热管理仿真:COMSOL多物理场耦合建模路线与实战策略 在动力电池与储能系统的热管理设计中,多物理场耦合仿真已成为平衡性能与成本的关键工具。液冷方案的换热极限促使行业转向制冷剂直冷技术,而两相流与电池产热的强耦合特性,使得基于COMSOL的数值建模成为评估系统温升与流动分配的重要手段。工程实践中,电化学-热-流场全耦合模型与集总电池-流场简化模型各有适用场景,前者揭示电池内部微观机理,后者则以高计算效率支撑包级方案迭代。通过合理简化几何、标定内阻与熵热系数、设置等效换热边界,仿真能够准确预测直冷系统在快充或大倍率放电下的温度均匀性与压降特性,从而指导流道优化与制 阅读详情

相关推荐

深入浅出:拆解RK3588 DVP摄像头驱动框架,从DTS配置到V4L2子系统

本文深入解析RK3588 DVP摄像头驱动框架,从DTS配置到V4L2子系统的完整实现。详细介绍了瑞芯微RK3588的多媒体子系统架构、设备树配置逻辑、rkcif驱动与V4L2框架的交互机制,以及用户空间调试与性能优化技巧,帮助开发者解决DVP摄像头驱动中的常见问题。

weixin_42525632的博客 265

mapreduce中使用第三方jar包

jar包过大,则添加到集群的每个hadoop/lib文件夹下 jar包不大,则在project里创建lib文件夹,将jar包添加到该文件夹下,并且保证工程的build path是该文件夹下的jar包,hadoop会自动加载。

tianyucheng的博客 268

PackML工业标准解析:统一机器状态管理与数据交换的实践指南

在工业自动化与智能制造领域,实现设备间的互联互通与高效协同是核心挑战。这背后依赖于一套标准化的机器行为与数据交换规范,其原理在于通过定义统一的状态模型与接口协议,消除不同厂商设备间的“语言”隔阂。这项技术的核心价值在于大幅降低系统集成复杂度、提升运维效率与生产透明度,是构建数字化工厂的基石。其典型应用场景包括包装机械、离散制造产线等需要多设备协同的领域。本文聚焦的PackML(包装机械语言)标准,正是这一理念的杰出实践,它通过一套严谨的**状态机模型**和**数据标签(PackTags)** 体系,为机器提

weixin_30070339的博客 401

map reduce 设置第三方依赖包

当运行 hadoop jar 运行任务时,如果系统有设置 hadoop_classpath,会将 hadoop_classpath 变量赋值给 classpath,所以只能通过 hadoop_classpath 来设置第三方依赖包。否则会出现如下异常: Caused by: java.lang.ClassNotFoundException 如果用户依赖 和 hadoop 自带依赖,都有某个 jar,但是版本不同,可能会导致依赖冲突,可通过如下设置决定是先加载用户依赖,还是 hadoop 自带依赖:

magic_kid_2010的专栏 1967

中国工商银行企业架构建设实践最全总结

中国工商银行参考IBM持续价值创新方法并吸收TOGAF等主流企业架构的框架理念,结合业务实际情况形成工行自己的企业架构方法论并实践,为数字化转型提供支撑。本案例通过介绍中国工商银行企业架构之业务架构设计方法,为其他银行企业架构建设提供参考。 企业架构是数字化转型的抓手,可以帮助企业规划、管理和实施数字化解决方案,以实现业务目标并适应不断变化的市场条件。中国工商银行通过战略目标指导业务架构的规划和设计,业务架构建模后指导IT架构建模。

银行信息系统应用架构详解 2732

国科大学习资料--矩阵论(叶世伟)-期末考试题整理3

国科大学习资料–矩阵论-期末考试题整理3 国科大学习资料–矩阵论-期末考试题整理3 国科大学习资料–矩阵论-期末考试题整理3

无名何许人的博客 1404

MapReduce程序调用第三方jar的靠谱方式

文章目录1.mapreduce调用第三方jar的方式2.实操mapreduce调用第三方jar的三种方式2.1 使用分布式缓存2.2 使用GenericOptionsParser 参数解析方式2.3 使用实现Tool接口方式(推荐使用) 1.mapreduce调用第三方jar的方式 首先,最简单的方式是将依赖jar打成fat jar,直接包含在提交程序中。但是这种方式导致不同的mapreduce项目,都是fat jar,占用磁盘空间不说,也不易于jar包管理。 其次,网上还有一种比较多的方式,将

lihuazaizheli的博客 857

OpenClaw 生成测试用例

OpenClaw 只是躯干,Skills 才是灵魂。很多同学觉得 OpenClaw 没用,就像是买了一台顶级电脑却没装操作系统。通过这四步走,不仅可以学会如何让 AI 干活,更重要的是,可以学会如何管理 AI 的能力。

十二测试录 737

Python安装第三方包并导入pycharm或idea项目中

在python的使用中,我们往往要使用到第三方包,所以怎样下载安装是一个问题。一般来讲,我们可以在pycharm或者idea这类编辑器中下载。但如果我们使用pip方法下载第三方包,打开编辑器时第三方包实际上并未导入到项目中,所以这篇文章总结了用pip方法如何使用、导入第三方包。

paopaotangd的博客 4635

对偶分解算法详解及其Python实现

对偶分解算法是一种广泛应用于求解凸优化问题的有效方法,尤其在大规模数据处理和分布式计算中展现出强大的实用性。在许多实际应用中,直接求解原始问题可能由于计算复杂度过高、资源受限或问题规模过大而变得不可行。这时,对偶分解方法为我们提供了一种高效的替代方案。对偶分解算法的核心思想是将复杂的原问题转化为其对应的拉格朗日对偶问题。通过引入拉格朗日乘子并构造对偶函数,该方法在一定程度上简化了问题的求解过程。特别是,对于包含多个约束条件的大规模优化问题,对偶分解可以将原问题分解为若干个小规模、相互独立的子问题。

闲人编程的博客 1752

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2099

【转】Mapreduce部署与第三方依赖包管理

Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错。本文介绍几种常用的配置方式: 1. HADOOP_CLASSPATH 在hadoop的相关配置文件中,添加CLASSPATH路径,那么在hadoop的各个进程启动时都会载入这些包,因此对于mapreduce-job jar中则不需要额外的...

weixin_30820151的博客 132

【AI大模型应用开发】1.0 Prompt Engineering(提示词工程)- 典型构成、原则与技巧,代码中加入Prompt

Prompt典型构成、原则与技巧,以及OpenAI API重要参数解释,助你轻松入门Prompt

同学小张的博客 2581

Mapreduce部署与第三方依赖包管理【hadoop mapreduce第三方jar包maven管理瘦身版本和臃肿版本各取所需】

http://www.tuicool.com/articles/6NjQ7fm Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错。本文介绍几种常用的配置方式: 1. HADOOP_CLASSPATH     在hadoop的相关配置文件中,添加CLASSPA

Thinking 2780

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MapReduce集群的安装与部署

和上面map不同的是,reduce任务不再具有本地读取的优势————一个reduce任务的输入往往来自于所有mapper的输出,因此map和reduce之间的数据流被称为 shuffle(洗牌)。MapReduce 是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架,其核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上。主节点负责调度作业的组件 从属设备上的任务,监视它们并重新执行失败的任务。

m0_66006426的博客 1522

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MapReduce & YARN 的部署

MapReduce & YARN 的部署

liuze的博客 1011

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Hadoop】- MapReduce & YARN的部署[8]

MapReduce和YARN的配置文件修改好后,需要分发到其他的服务器节点中。MapReduce运行在YARN容器内,无需启动独立进程。2、mapred-site.xml文件,添加如下配置信息。分发完成配置文件,就可以启动YARN的相关进程啦。有3台服务器,其中node1配置较高。即可查看YARN集群的监控页面。文件,添加如下环境变量。

weixin_63106307的博客 1815

Hadoop Python MapReduce 依赖管理指南

在 Hadoop 上运行依赖第三方库的 Python MapReduce 作业,关键在于正确处理依赖分发。虚拟环境打包:平衡了灵活性和易用性,适合大多数场景PyInstaller:提供最强的环境隔离,是复杂生产环境的首选手动打包:适合快速原型验证和小型项目单文件分发:仅适用于极简依赖场景建议开发阶段使用虚拟环境方案,生产环境逐步过渡到 PyInstaller 方案。对于特别复杂的依赖,可以考虑混合方案,将核心依赖与二进制执行文件结合使用。

bill的博客 973

hadoop集群部署【二】YARN & MapReduce 的部署

常用的进程启动命令如下:一键启动YARN集群:会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager会基于workers文件配置的主机启动NodeManager一键停止YARN集群:在当前机器,单独启动或停止进程start和stop决定启动和停止可控制resourcemanager、nodemanager、proxyserver三种进程历史服务器启动和停止独立进程启停可用。

qq_65231448的博客 2058

MapReduce和Yarn部署+入门

看的黑马视频记的笔记。

qq_54828577的博客 945

【Spark精讲】Spark与MapReduce对比

Spark与MapReduce对比,MapReduce流程,MapReduce原理,Map shuffle,Reduce shuffle,MapTask,ReduceTask

话数Science 2464

MapReduce与Yarn的概述

mapreduce、yarn概述

weixin_48796645的博客 1100

MapReduce部署到yarn环境中

MapReduce部署到yarn环境中

妖怪的博客 457
上一篇: ActiveMQ分布式网络(Forward Bridge)
下一篇: HDFS常用命令[备忘]
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值