0426-如何在Cloudera Manager中配置Yarn放置规则

本文详细介绍了如何在Cloudera Manager中配置Yarn动态资源池,以实现不同业务组用户作业自动分配到相应资源池。通过创建和设置放置规则,如root.[pool name]、root.[secondary group]等,确保用户如usera、userc、usere的作业被正确路由到业务组A、业务组B或default资源池。

温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢

1.文档编写目的


Hadoop集群管理员希望能对集群Yarn作业的资源进行控制。根据不同的业务组或不同的用户,对Yarn的资源池进行划分,达到资源管控、任务管控的效果。通过CM可以进行Yarn动态资源的配置,这里Fayson主要介绍如何在Cloudera Manager中配置Yarn动态资源池的放置规则。

在这里Fayson主要用一个场景进行描述,在不给作业指定资源池的情况下,通过CM的放置策略将不同的用户提交的作业自动分配到指定的资源池中。

  • 内容概述

1.测试环境描述

2.总结

  • 测试环境

1.RedHat7.3

2.CM和CDH版本为5.15

2.场景描述


实例场景如下:当前CDH集群供多个业务部门使用,在Yarn中为不同的业务组划分不同的资源池,对应业务组的用户作业需要自动的提交到划分的资源池中。如下图所示:

通过上图可以看到有Yarn的资源池中创建3个队列:业务组A、业务组B、default。右边有多个业务组的用户,在用户提交作业时需要根据用户所在的也业务组不同自动为用户分配不通的资源池,接下来Fayson通过具体的Yarn动态资源池放置规则的配置进行实现。

3.测试用户准备


在配置前Fayson先准备三个测试用户usera、userc和usere,三个用户的组分别为testa、testb、testc。

1.在CDH集群的所有节点创建testa、testb、testc三个组,testa表示“业务组A”、testb表示“业务组B”、testc不属于任何业务组。

[root@cdh01 shell]# sh ssh_do_all.sh node.list "groupadd testa"
[root@cdh01 shell]# sh ssh_do_all.sh node
<think>我们正在解决的是:如何配置Kettle连接由Cloudera Manager(CDH)管理的Hive集群。 引用资料中,引用[1]提到了在Kettle7中连接Hive和HBase的配置方法,需要将一些jar包放到指定目录下。 引用[2]提到了两种将数据导入Hive的方式:一种是通过HiveServer2的JDBC连接,另一种是使用Hadoop File Input并配合Hive命令加载。 引用[3]和[5]提到了Cloudera Manager(CDH)是Hadoop的一个分发版本,提供了图形化管理界面。 引用[4]提供了一个关键信息:在CDH环境下,需要从Cloudera Manager的Agent节点中拷贝hadoop-common-2.6.0-cdh5.14.0.jar到Kettle的lib目录下,并重启Kettle。 但注意,用户使用的是CDH管理的Hive,因此我们需要适配CDH的版本。由于用户没有提供具体的CDH版本,我们将以通用方法说明。 步骤: 1. 确定CDH版本和对应的Hadoop、Hive版本。例如,CDH5.14.0对应的Hadoop版本是2.6.0-cdh5.14.0,Hive版本是1.1.0-cdh5.14.0(这里只是示例,具体版本需要用户确认)。 2. 获取CDH版本的Hadoop和Hive相关jar包。通常,这些jar包位于Cloudera Manager集群的各个节点上,路径为:/opt/cloudera/parcels/CDH-<version>/lib/<component>/lib/(或者参考引用[4]中的路径)。 3. 配置Kettle的Big Data插件,选择对应的Shim层(如cdh5140,注意Kettle9.1内置的Shim可能不支持CDH5.14.0,需要确认或自定义配置)。 具体步骤: 一、准备CDH版本的Jar包 根据引用[4]的思路,我们需要以下jar包: - hadoop-common-<cdh-version>.jar(例如:hadoop-common-2.6.0-cdh5.14.0.jar) - Hive JDBC驱动(hive-jdbc-<cdh-version>.jar) 注意:如果Kettle的Big Data插件已经提供了对应CDH版本的Shim层(如cdh5140),则只需要将CDH的配置文件放到该Shim层目录下,并确保jar包匹配。但如果没有,则需要自定义配置。 二、配置步骤: 1. 在Kettle的Big Data插件目录(plugins/pentaho-big-data-plugin/hadoop-configurations)下,找到对应CDH版本的Shim层目录(例如cdh5140)。如果没有,可以复制一个相近的目录并重命名。 2. 将CDH集群上的Hadoop配置文件(core-site.xml, hdfs-site.xml, hive-site.xml等)复制到该Shim层目录下。 3. 将CDH版本的hadoop-common.jar放入该Shim层目录下的lib文件夹中(如果没有lib文件夹则创建)。 4. 将CDH版本的Hive JDBC驱动(hive-jdbc-*.jar)放入Kettle的lib目录(即Kettle安装目录下的lib文件夹)或者放入该Shim层目录下的lib文件夹(推荐前者,因为多个Shim层可能共用)。 三、修改plugin.properties 在Shim层目录(cdh5140)下的plugin.properties文件中,配置: active.hadoop.configuration=cdh5140 hadoop.configurations.version=<实际版本号,例如2.6.0-cdh5.14.0> 四、在Kettle中创建Hive连接 1. 使用JDBC方式连接Hive: - JDBC URL: jdbc:hive2://<hive_server2_host>:<port>/<database> - 驱动类:org.apache.hive.jdbc.HiveDriver - 根据需要设置用户名和密码(如果HiveServer2开启了认证)。 2. 如果使用Hadoop File Input方式(批量导入),则需要配置Hadoop集群连接(在Kettle中叫做Hadoop Cluster),指向CDH集群,并选择我们配置的Shim层(cdh5140)。 注意:由于CDH版本和Kettle内置的Shim层可能不完全匹配,可能需要调整其他jar包。如果遇到类冲突或缺失,需要将CDH中的相关jar包添加到Shim层的lib目录下。 五、常见问题 1. 类找不到:检查jar包是否齐全,特别是Hive和Hadoop相关的依赖。 2. 版本不匹配:确保所有jar包来自同一CDH版本。 3. 配置文件错误:确保从CDH集群中复制了正确的配置文件(如core-site.xml, hdfs-site.xml, hive-site.xml)。 六、引用[4]的方法:拷贝hadoop-common.jar到Kettle的lib目录下(注意,这种方法可能不够灵活,因为不同集群可能需要不同的版本。推荐使用Shim层的方式,这样可以为不同的集群配置不同的设置。) 因此,我们给出两种方案: 方案一(推荐):使用Big Data插件的Shim层配置 方案二:将CDH的hadoop-common.jar放到Kettle的lib目录(全局生效),然后重启Kettle。 由于用户使用的是Cloudera Manager管理的集群,我们更推荐使用方案一,因为它可以支持多个不同版本的集群配置。 下面我们详细描述方案一的步骤。 步骤详解: 1. 确认CDH版本和组件版本 例如:CDH 5.14.0,Hadoop 2.6.0-cdh5.14.0, Hive 1.1.0-cdh5.14.0 2. 在Kettle的hadoop-configurations目录下创建新的Shim层配置(例如cdh5140) ```bash cd /opt/kettle/plugins/pentaho-big-data-plugin/hadoop-configurations cp -r hdp300 cdh5140 # 复制一个已有的配置作为模板 ``` 3. 复制CDH集群的配置文件到cdh5140目录 从CDH集群的任意节点(最好是从安装了Hive Gateway的节点)上获取配置文件: - /etc/hadoop/conf/core-site.xml - /etc/hadoop/conf/hdfs-site.xml - /etc/hadoop/conf/yarn-site.xml(如果需要在YARN上运行作业) - /etc/hive/conf/hive-site.xml 将这些文件复制到cdh5140目录下。 4. 修改cdh5140目录下的plugin.properties ```properties # 设置该配置为活动状态 active.hadoop.configuration=cdh5140 # 覆盖版本号,确保和实际版本一致 hadoop.configurations.version=2.6.0-cdh5.14.0 ``` 5. 获取并放置jar包 - 将CDH的hadoop-common-2.6.0-cdh5.14.0.jar放入cdh5140/lib目录下(如果没有lib目录则创建) - 将CDH的Hive JDBC驱动(hive-jdbc-1.1.0-cdh5.14.0.jar)放入Kettle的lib目录(/opt/kettle/lib) 注意:Hive JDBC驱动可能依赖其他jar包,如hive-service、hive-metastore等。如果连接时出现类缺失,需要将这些依赖的jar包也放入Kettle的lib目录(或者使用Shim层的lib目录,但Shim层通常只用于Hadoop相关的jar包,所以推荐放全局lib)。 6. 重启Kettle 7. 在Kettle中配置Hive连接 - 使用“Hadoop Cluster”配置连接到CDH集群:选择我们创建的配置(cdh5140) - 使用“Hive”连接类型,通过JDBC连接HiveServer2 注意:如果CDH集群启用了Kerberos认证,则需要额外配置Kerberos,这包括: - 在Kettle中设置JAAS配置 - 将krb5.conf文件放到Kettle所在机器的/etc目录(或JRE的lib/security目录) - 在Kettle的Hadoop集群配置中启用安全认证 由于问题中没有提到Kerberos,这里暂不展开。 最后,我们生成相关问题: 1. 如何配置Kettle连接启用Kerberos的CDH Hive集群? 2. 如何在Kettle中配置多个不同的Hadoop集群? 3. 使用Kettle连接CDH Hive时出现ClassNotFoundException如何解决? 注意:以上步骤基于CDH5.14.0,如果用户使用其他CDH版本,需要替换版本号。 </think>### Kettle 连接 Cloudera Manager 管理的 Hive 配置指南 #### 一、核心配置步骤 1. **获取 Cloudera Manager 的 Hadoop Common JAR** ```bash # 从 Cloudera Manager 节点拷贝关键 JAR(替换实际版本) scp <cm-node>:/opt/cloudera/parcels/CDH-*/jars/hadoop-common-*.jar \ $KETTLE_HOME/lib/ ``` - 需替换 `<cm-node>` 为 Cloudera Manager 节点地址 - 文件路径示例:`/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/hadoop-common-3.0.0-cdh6.3.2.jar` [^4] 2. **配置 Shim 层映射** 在 `$KETTLE_HOME/plugins/pentaho-big-data-plugin/plugin.properties` 中添加: ```properties # 映射 CDH 版本到内置 Shim cdh.version.mapping.6.3.2=cdh630 active.hadoop.configuration=cdh630 ``` 3. **部署 CDH 配置文件** ```bash # 创建 Shim 层目录 mkdir $KETTLE_HOME/plugins/pentaho-big-data-plugin/hadoop-configurations/cdh630 # 复制配置文件 scp <cm-node>:/etc/hadoop/conf/*-site.xml \ $KETTLE_HOME/plugins/pentaho-big-data-plugin/hadoop-configurations/cdh630/ ``` ![Cloudera Manager 配置文件位置](https://example.com/cm-config-path.png) *图:Cloudera Manager配置文件默认路径* --- #### 二、Hive 连接方式 ##### 方式1:HiveServer2 JDBC 连接(推荐) 1. **在 Kettle 中新建数据库连接** - 连接类型:`Hadoop Hive` - 主机名:HiveServer2 服务地址 - 端口:`10000`(默认) - 数据库名称:目标数据库 - JDBC URL 格式: ```sql jdbc:hive2://hive-server.cm.cluster:10000/default ``` 2. **驱动配置** ```properties # 驱动类名 org.apache.hive.jdbc.HiveDriver # 所需 JAR(从 CDH 节点获取) hive-jdbc-*.jar hive-service-*.jar ``` ##### 方式2:HDFS 文件加载(批量场景) ```mermaid graph LR A[Kettle 作业] --> B[Hadoop File Output] B --> C{HDFS 文件} C --> D[Shell 脚本] D --> E[LOAD DATA INPATH...] ``` 1. 使用 **Hadoop File Output** 步骤写入 HDFS 2. 调用 Shell 脚本执行 Hive 加载命令: ```bash hive -e "LOAD DATA INPATH '/user/kettle/output' INTO TABLE target_table" ``` --- #### 三、Cloudera Manager 集成要点 1. **安全认证配置** - Kerberos:在 `krb5.conf` 配置 realm ```ini [realms] CM.CLUSTER = { kdc = kdc-server.cm.cluster admin_server = admin-server.cm.cluster } ``` - Sentry/Ranger:在 Hive 连接中配置权限角色 2. **高可用连接** ```sql # 连接 HiveServer2 HA 集群 jdbc:hive2://hs2-node1:10000,hs2-node2:10000/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2 ``` 3. **性能优化参数** | 参数 | 推荐值 | 作用 | |------|--------|------| | `hive.fetch.task.conversion` | `more` | 减少 MR 任务 | | `hive.exec.parallel` | `true` | 启用并行执行 | | `mapreduce.job.queuename` | `kettle` | 指定 YARN 队列 | --- #### 四、验证与诊断 1. **连接测试命令** ```bash beeline -u "jdbc:hive2://hive-server:10000" \ -n kettle_user \ -p <password> \ -e "SHOW TABLES" ``` 2. **常见错误处理** **问题:ClassNotFoundException** ```log java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf ``` **解决**:将 CDH 的 `hive-common-*.jar` 添加到 `$KETTLE_HOME/lib` **问题:Zookeeper 服务发现失败** **解决**:确认 ZooKeeper 地址并在 JDBC URL 添加参数: ```sql ;zooKeeperNamespace=hiveserver2;serviceDiscoveryMode=zooKeeper ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值