Hadoop on Yarn配置信息

本文详细介绍了Hadoop集群的核心配置文件设置,包括core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml等关键配置项。涵盖HDFS高可用、YARN资源管理和MapReduce任务历史记录等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
        <name>fs.defaultFS</name>
        <value>hdfs://appcluster</value>
    </property>
                                                                                                                                                                
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
                                                                                                                                                                
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/storage/tmp</value>
    </property>
                                                                                                                                                                
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node21:2181,node22:2181,node23:2181</value>
    </property>
                                                                                                                                                                
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>2000</value>
    </property>
                                                                                                                                                                
    <property>
        <name>fs.trash.interval</name>
        <value>4320</value> 
    </property>
                                                                                                                                                                
    <property>
         <name>hadoop.http.staticuser.use</name>
         <value>root</value>
    </property>
                                                                                                                                                                
    <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
    </property>
                                                                                                                                                                
    <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
    </property>
                                                                                                                                                                
    <property>
        <name>hadoop.native.lib</name>
        <value>true</value>
    </property> 
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定namenode名称空间的存储地址-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/hadoop/storage/hdfs/name</value>
    </property>


<!--指定datanode数据存储地址-->                                                                                                                           
    <property>
        <name>dfs.datanode.data.dir</name> 
        <value>/data/hadoop/storage/hdfs/data</value>
    </property>


<!--指定数据冗余份数-->                                                                                                                                  
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
                                                                                                                                                  
                                                                                                                                                  
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
                                                                                                                                                 
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>


<!--指定hdfs的nameservice为appcluster,需要和core-site.xml中的保持一致 -->                                                                                                                                   
    <property>
        <name>dfs.nameservices</name>
        <value>appcluster</value>
    </property>


<!-- appcluster下面有两个NameNode,分别是nn1,nn2 -->                                                                                                                             
    <property>
        <name>dfs.ha.namenodes.appcluster</name>
        <value>nn1,nn2</value>
    </property>


<!-- nn1的RPC通信地址 -->                                                                                                                                       
    <property>
        <name>dfs.namenode.rpc-address.appcluster.nn1</name>
        <value>node21:9000</value>
    </property>


<!-- nn2的RPC通信地址 -->                                                                                                                                    
    <property>
        <name>dfs.namenode.rpc-address.appcluster.nn2</name>
        <value>node22:9000</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.namenode.servicerpc-address.appcluster.nn1</name>
        <value>node21:53310</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.namenode.servicerpc-address.appcluster.nn2</name>
        <value>node22:53310</value>
    </property>


<!-- nn1的http通信地址 -->                                                                                                                                    
    <property>
        <name>dfs.namenode.http-address.appcluster.nn1</name>
        <value>node21:50070</value>
    </property>


<!-- nn2的http通信地址 -->                                                                                                                                   
    <property>
        <name>dfs.namenode.http-address.appcluster.nn2</name>
        <value>node22:50070</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.datanode.http.address</name>
        <value>0.0.0.0:50070</value>
    </property>


<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->                                                                                                                                    
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node21:8485;node22:8485;node23:8485/appcluster</value>
    </property>


<!-- 配置失败自动切换实现方式 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>


<!-- 配置失败自动切换实现方式 -->                                                                                                                                     
    <property>
        <name>dfs.client.failover.proxy.provider.appcluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>


<!-- 配置隔离机制 -->                                                                                                                                  
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>


<!-- 使用隔离机制时需要ssh免密码登陆 -->                                                                                                                                     
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
                                                                                                                                                  
    <property> 
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/hadoop/storage/hdfs/journal</value>
    </property>
                                                                                                                                                  
                                                                                                                                                  
    <property>
        <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
        <value>60000</value>
    </property>
                                                                                                                                                  
    <property>
        <name>ipc.client.connect.timeout</name>
        <value>60000</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.image.transfer.bandwidthPerSec</name>
        <value>41943040</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.namenode.accesstime.precision</name>
        <value>3600000</value>
    </property>
                                                                                                                                                  
    <property>
        <name>dfs.datanode.max.transfer.threads</name>
        <value>4096</value>
    </property>
</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<!-- 配置 MapReduce JobHistory Server 地址 ,默认端口10020 -->                                                                                                                          
<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property>

<!-- 配置 MapReduce JobHistory Server web ui 地址, 默认端口19888 -->                                                                                                                       
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>

</configuration>

yarn-site.xml

<?xml version="1.0"?>
<configuration>

<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
  <description>Whether virtual memory limits will be enforced for containers.</description>
</property>
<!--rm失联后重新链接的时间-->
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>2000</value>
</property>


<!--开启resourcemanagerHA,默认为false-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>


<!--配置resourcemanager-->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>


<!--开启故障自动切换-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>


<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>node21</value>
</property>


<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>node22</value>
</property>


<!--在hadoop001上配置rm1,在hadoop002上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改-->
<property>
<name>yarn.resourcemanager.ha.id</name>
<value>rm1</value>
<description>If we want to launch more than one RM in single node,we need this configuration</description>
</property>


<!--开启自动恢复功能-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>


<!--配置与zookeeper的连接地址-->
<property>
<name>yarn.resourcemanager.zk-state-store.address</name>
<value>node21:2181,node22:2181,node23:2181</value>
</property>


<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>


<property>
<name>yarn.resourcemanager.zk-address</name>
<value>node21:2181,node22:2181,node23:2181</value>
</property>


<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>appcluster-yarn</value>
</property>


<!--schelduler失联等待连接时间-->
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
</property>


<!--配置rm1-->
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>node21:8032</value>
</property>


<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>node21:8030</value>
</property>


<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>node21:8088</value>
</property>


<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>node21:8031</value>
</property>


<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>node21:8033</value>
</property>


<property>
<name>yarn.resourcemanager.ha.admin.address.rm1</name>
<value>node21:23142</value>
</property>


<!--配置rm2-->
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>node22:8032</value>
</property>


<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>node22:8030</value>
</property>


<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>node22:8088</value>
</property>


<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>node22:8031</value>
</property>


<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>node22:8033</value>
</property>


<property>
<name>yarn.resourcemanager.ha.admin.address.rm2</name>
<value>node22:23142</value>
</property>


<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>


<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>


<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/hadoop/yarn/local</value>
</property>


<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/hadoop/yarn/log</value>
</property>


<property>
<name>mapreduce.shuffle.port</name>
<value>23080</value>
</property>


<!--故障处理类-->
<property>
<name>yarn.client.failover-proxy-provider</name>
<value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value>
</property>

<property>
<name>yarn.resourcemanager.ha.automatic-failover.zk-base-path</name>
<value>/yarn-leader-election</value>
<description>Optionalsetting.Thedefaultvalueis/yarn-leader-election</description>
</property>

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>


<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>10240</value>
</property>

<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>256</value>
</property>


<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>10240</value>
</property>


<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>

<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>1</value>
</property>
</configuration>

hadoop-env.sh/mapred-env.sh/yarn-env.sh三个文件末尾添加如下参数:

export JAVA_HOME=/hadoop/jdk1.8.0_161
export CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export HADOOP_HOME=/hadoop/hadoop-2.7.5
export HADOOP_PID_DIR=/data/hadoop/pids
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

slaves

node23
node24

<think>嗯,我现在要配置Spark on YARN,但是我对这个过程还不是很熟悉。让我先回忆一下之前学过的相关知识,然后一步步理清楚应该怎么做。首先,Spark on YARN是什么意思呢?我记得YARNHadoop的资源管理系统,而Spark作为一个计算框架,可以运行在YARN上,这样就能利用YARN的资源管理功能,不需要Spark自己来管理集群资源了。对吧? 那配置Spark on YARN的前提条件应该有哪些呢?首先,肯定需要安装好Hadoop,并且YARN已经正确配置和运行。可能还需要确保Hadoop的版本和Spark兼容。然后,Spark本身也需要安装好,对吗?另外,可能需要设置一些环境变量,比如HADOOP_CONF_DIR或者YARN_CONF_DIR,让Spark知道YARN配置文件在哪里。这部分我记得不太清楚,可能需要查文档确认。 接下来,具体的配置步骤可能包括修改Spark的配置文件,比如spark-defaults.conf,或者在提交应用时通过命令行参数指定。例如,设置spark.master为yarn,这样Spark就知道要连接到YARN集群。对吗?另外,可能需要配置一些资源参数,比如executor的内存、核心数等,这些参数可以通过Spark的配置项或者提交任务时指定。 用户提到的配置,可能需要关注几个关键点:首先是Hadoop配置的集成,然后是Spark本身的配置,还有资源分配和调优的参数。可能还需要考虑权限问题,比如用户是否有权限在YARN上提交应用,或者HDFS的访问权限等。另外,网络配置是否正确,比如各个节点之间能否互相通信,端口是否开放,这些也可能影响Spark on YARN的运行。 有没有可能遇到常见的问题呢?比如Spark应用提交到YARN后,无法申请到资源,或者Executor启动失败。这时候可能需要查看YARN的日志,或者Spark的日志,排查具体原因。例如,资源不足,配置错误,或者类路径问题。比如,有时候需要把Spark的依赖包上传到HDFS,或者在YARN配置中指定,这样NodeManager能够找到这些依赖。 再想想具体的步骤,可能需要这样: 1. 确保Hadoop YARN已经正确安装和配置,并且正在运行。 2. 下载并安装Spark,解压到合适的目录。 3. 配置环境变量,比如在spark-env.sh中设置HADOOP_CONF_DIR或YARN_CONF_DIR,指向Hadoop配置文件目录。 4. 在Spark的配置文件spark-defaults.conf中设置spark.master为yarn。 5. 可能需要配置Spark的执行参数,比如spark.executor.memory,spark.executor.cores等。 6. 将应用提交到YARN集群,使用spark-submit命令,并指定deploy-mode为cluster或者client。 还有,不同的部署模式(cluster vs client)有什么区别呢?Cluster模式下,Driver运行在YARN的Application Master中,而Client模式下,Driver运行在提交任务的客户端机器上。这可能影响到日志的查看和应用的稳定性,比如如果客户端断开连接,Client模式的应用可能会失败。 另外,关于Spark on YARN的资源分配,YARN负责管理资源,所以需要正确设置Spark的资源参数,使其不超过YARN集群的总资源。例如,每个executor的内存不能超过YARN容器允许的最大值,否则会被拒绝。可能需要调整YARN配置参数,比如yarn.scheduler.maximum-allocation-mb,yarn.nodemanager.resource.memory-mb等,以适应Spark的需求。 还有,可能需要注意Spark的依赖问题。当Spark应用提交到YARN时,需要确保所有的依赖包都能被YARN的NodeManager访问到。可以通过--jars参数指定额外的jar包,或者将依赖打包到应用的jar文件中。另外,可能需要设置spark.yarn.jars或spark.yarn.archive,将Spark的库上传到HDFS,这样每次提交应用时不需要重复上传,节省时间。 现在,有没有遗漏的步骤或者配置项?比如,安全方面的配置,比如Kerberos认证,如果Hadoop集群启用了安全模式,那么Spark提交任务时需要进行相应的认证处理。这时候可能需要使用keytab文件或者kinit命令获取凭证。 再检查一下,Spark on YARN的两种模式:client和cluster。在配置的时候,是否需要特别指定?是的,在spark-submit的时候,需要设置--deploy-mode参数为cluster或者client,默认是client吗?还是需要显式指定? 总结一下,配置Spark on YARN的主要步骤包括: 1. 安装和配置Hadoop YARN。 2. 安装Spark并配置环境变量指向YARN配置。 3. 调整Spark的配置参数以适应YARN集群的资源管理。 4. 确保依赖项和资源文件正确上传和访问。 5. 使用spark-submit提交应用,并选择合适的部署模式。 可能还需要验证配置是否正确,比如运行一个简单的Spark应用,比如计算Pi的示例,看看是否能成功在YARN上执行。如果失败,查看日志,比如YARN的Application Master日志,或者Spark的日志,找出错误原因进行调整。 比如,如果出现类找不到的问题,可能需要检查spark.yarn.jars是否正确配置,或者是否将必要的jar包上传到了HDFS。如果资源不足,可能需要调整YARN的资源分配参数或者Spark的executor配置。 现在,我应该把这些步骤整理成一个清晰的指南,帮助用户一步步配置Spark on YARN,同时提醒常见的配置项和可能遇到的问题。</think>### Spark on YARN 配置指南 #### 一、核心概念 Spark on YARN 允许 Spark 应用程序利用 YARNHadoop 资源管理器)进行资源调度,无需独立部署 Spark 集群。其优势包括: - **资源共享**:与其他 Hadoop 任务(如 MapReduce)共享资源。 - **简化运维**:复用 YARN 的监控、容错和安全机制。 #### 二、前提条件 1. **Hadoop 环境**:已部署 Hadoop(2.x+)且 YARN 正常运行。 2. **Spark 安装**:下载并解压 Spark(需与 Hadoop 版本兼容)。 3. **配置权限**:确保提交任务的用户具有 YARN 队列权限和 HDFS 读写权限。 #### 三、关键配置步骤 ##### 1. **配置 Hadoop 环境变量** 在 Spark 的 `conf/spark-env.sh` 中设置 Hadoop 配置路径: ```bash export HADOOP_CONF_DIR=/path/to/hadoop/etc/hadoop # 指向 Hadoop 配置文件目录 export YARN_CONF_DIR=/path/to/hadoop/etc/hadoop # 同 HADOOP_CONF_DIR ``` ##### 2. **修改 Spark 默认配置** 在 `conf/spark-defaults.conf` 中指定 YARN 模式: ```properties spark.master=yarn spark.yarn.jars=hdfs:///spark-jars/*.jar # 将 Spark 依赖上传至 HDFS(可选但推荐) ``` ##### 3. **资源参数调优** 根据集群资源调整参数(示例): ```properties spark.executor.memory=4g # 每个 Executor 内存 spark.executor.cores=2 # 每个 Executor 使用的 CPU 核心 spark.driver.memory=2g # Driver 内存(Cluster 模式下由 YARN 管理) ``` ##### 4. **提交 Spark 应用** 使用 `spark-submit` 提交任务时需指定部署模式: ```bash spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ # 或 client --executor-memory 2g \ --num-executors 4 \ /path/to/spark-examples.jar ``` #### 四、部署模式对比 | **模式** | **Driver 运行位置** | **适用场景** | |------------|-------------------------------|--------------------------| | **Client** | 提交任务的客户端机器 | 调试(日志直接输出到终端) | | **Cluster**| YARN Application Master(AM) | 生产环境(高可用性) | #### 五、常见问题与解决 1. **资源申请失败** - **原因**:YARN 资源不足或参数超限。 - **解决**: - 检查 `yarn.nodemanager.resource.memory-mb` 和 `yarn.scheduler.maximum-allocation-mb`。 - 调低 `spark.executor.memory` 或 `spark.executor.cores`。 2. **依赖缺失** - **现象**:`ClassNotFoundException`。 - **解决**: - 通过 `--jars` 添加额外依赖: ```bash spark-submit --jars /path/to/dependency.jar ... ``` - 或预上传 Spark 依赖到 HDFS: ```bash hdfs dfs -put $SPARK_HOME/jars/*.jar /spark-jars/ ``` 3. **Kerberos 认证问题** - **现象**:任务因权限失败。 - **解决**: - 使用 `kinit` 提前获取凭证: ```bash kinit -kt /path/to/user.keytab user@REALM ``` - 或在 `spark-submit` 中添加参数: ```bash --principal user@REALM --keytab /path/to/user.keytab ``` #### 六、验证配置 运行测试任务(如计算 Pi): ```bash spark-submit \ --master yarn \ --deploy-mode client \ $SPARK_HOME/examples/jars/spark-examples.jar 100 ``` 观察 YARN Web UI(默认 `http://<ResourceManager>:8088`)确认任务状态。 #### 七、高级配置(可选) - **动态资源分配**: 在 `spark-defaults.conf` 中启用: ```properties spark.dynamicAllocation.enabled=true spark.shuffle.service.enabled=true ``` - **日志聚合**: 确保 YARN 的 `yarn.log-aggregation-enable` 设为 `true`,通过 `yarn logs -applicationId <appId>` 查看日志。 通过以上步骤,您应能完成 Spark on YARN 的基础配置和调优。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值