搜索
首页数据库mysql教程Yarn的安全模式与高可靠性安装总结

最近几天又重新把cdh的安全模块与高可靠性模块重新搭建了一遍,这次用是的目前最新的5.1.0的tar包安装,以前把MRv1搭建了好,这次主要是熟悉安装过程,并且把YARN的安全模块与HA模块成功搭建起来。遇到的错误还是不少,安装过程也是废了我好几天,现在想想很

最近几天又重新把cdh的安全模块与高可靠性模块重新搭建了一遍,这次用是的目前最新的5.1.0的tar包安装,以前把MRv1搭建了好,这次主要是熟悉安装过程,并且把YARN的安全模块与HA模块成功搭建起来。遇到的错误还是不少,安装过程也是废了我好几天,现在想想很多错误都比较典型,现在此记录下我搭建过程中遇到的错误与心得,一方面为自己以后查阅,另一方面希望也能对遇到同样问题的人有所启发。

先说下我的环境,centos6.5, cdh用的目前最新的5.1.0的tar包。

下面在先说说YARN的安全模块与HA安装时的遇到的错误,之后在说说我在安装整个CDH的HDFS、MRv1、YARN时一些不容易注意但很难地位的错误。

(一) YARN的安全模块与HA安装时遇到的错误

安全模块

  1. 对于container-executor文件,tar包中没有,需要自己编译
  2. 按照官方教程做配置后,执行 mapreduce 任务时,在 shuffle 阶段,会报下面的错误:
2014-08-03 00:34:19,619 WARN [main] org.apache.hadoop.mapred.YarnChild: Exception running child : org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#4        at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134)        at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:376)        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167)        at java.security.AccessController.doPrivileged(Native Method)        at javax.security.auth.Subject.doAs(Subject.java:415)        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554)        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)Caused by: java.io.IOException: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out.        at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.checkReducerHealth(ShuffleSchedulerImpl.java:323)        at org.apache.hadoop.mapreduce.task.reduce.ShuffleSchedulerImpl.copyFailed(ShuffleSchedulerImpl.java:245)        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:347)        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:165)

在nodemanger服务器上,在执行该job的container的syslog日志中还可以找到下面的错误

2014-08-03 00:34:19,614 WARN [fetcher#3] org.apache.hadoop.mapreduce.task.reduce.Fetcher: Invalid map idjava.lang.IllegalArgumentException: TaskAttemptId string : TTP/1.1 500 Internal Server ErrorContent-Type: text/plain; charset=UTF is not properly formed        at org.apache.hadoop.mapreduce.TaskAttemptID.forName(TaskAttemptID.java:201)        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:386)        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:341)        at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:165)2014-08-03 00:34:19,614 WARN [fetcher#4] org.apache.hadoop.mapreduce.task.reduce.Fetcher: Invalid map idjava.lang.IllegalArgumentException: TaskAttemptId string : TTP/1.1 500 Internal Server Error

网上很多说Shuffle$ShuffleError: error in shuffle in fetcher#4这个错误与内存,很明显,我这里不是这种情况,因为从 TTP/1.1 500 Internal Server Error就应该知道是resourcemanager内部的错误。

经过我验证,这时由于tar包默认并不包含native的lib,位置在<hadoop>/lib/native</hadoop>文件夹,需要我们自己编译,把编译好的native文件拷贝到这里即可。

HA

按照官方教程,先直接安装YARN时有点小错误,就是historyserver进程开启(由maprd用户开启)后无法aggregate log,我发现是有两个问题导致:

  1. 我服务器上的mapred用户只属于mapred用户组(useradd mapred这条命令执行后,就会创建mapred用户,并且属于mapred组),而由mapred启动的historyserver需要访问${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate/${username}文件夹下不同用户的文件,而这个文件夹的权限是770,own为${username}:hadoop,所以historyserver没有权限读取,我这里把mapred添加到hadoop用户组去即可:s
    这里mapred用户也需要属于mapred组,是因为也需要向${yarn.nodemanager.remote-app-log-dir}/${username}目录下写一些日志(因为开启了log-aggregation),而这个目录权限也是770,own为${username}:mapred。
usermod -a G hadoop mapred #这里需要-a选项,这样mapred用户即属于mapred组又属于hadoop组
  1. 教程上说的开启log-aggregation的配置不对,教程上写的是
<property>    <name>yarn.log.aggregation.enable</name>    <value>true</value> </property>

应改为

<property>    <name>yarn.log-aggregation-enable</name>    <value>true</value> </property>

———————-下面正式说HA—————————

YARN的HA想对于hdfs与MRv1的简单了许多,自动Failover也不需要另起个进程,ResourceManager中一个ActiveStandbyElector,它负责Automatic failover。这里只需要修改yarn-site.xml文件即可。官方教程的给出的默认配置改一项就能运行成功。

<property>    <name>yarn.resourcemanager.zk.state-store.address</name>    <value>localhost:2181</value></property>

改成

<property>    <name>yarn.resourcemanager.zk-address</name>    <value>localhost:2181</value></property>

其实上面的表格说的很详细了,不知道为什么给出的示例没写,不过这个错也比较好找,因为按照上面配置的开启RM时会报yarn.resourcemanager.zk-address没定义。

其次需要注意的是yarn.resourcemanager.ha.id在active与standby的服务器上的值是不一样的,按照官方给的配置,那就一个是rm1,一个是rm2。

如果我们在开启了安全模式还需要修改一处property即yarn.resourcemanager.hostname,ha中的两个RM这个property值是不一样的,分别为其hostname。这是因为我们在配置yarn的principal时用了yarn/_HOST这种方式,而_HOST对于NN与RM来说,不是按照hostname来替换的,而是分别按照fs.defaultFSyarn.resourcemanager.hostname这两个property的值来替换的。DN与NM是按照每个服务器的hostname来替换的。替换规则也在HDFS的安全模式文档中有说明。

下面是我rm1服务器上这两个property的配置:

<property>    <name>yarn.resourcemanager.ha.id</name>    <value>rm1</value></property><property>    <name>yarn.resourcemanager.hostname</name>    <value>master</value></property>

下面是我rm2服务器上这两个property的配置:

<property>    <name>yarn.resourcemanager.ha.id</name>    <value>rm2</value></property><property>    <name>yarn.resourcemanager.hostname</name>    <value>master2</value></property>

(二) CDH各个模块安装总结

还是先说些我在安装过程中遇到的一些不起眼但遇到后就很难定位的错误。

  1. 如果把hadoop放到/root下,像hdfs、yarn这些用户是没法执行bin、sbin下面的脚本的,因为/root的默认权限是550,我安装时直接放到/opt下。
  2. 在安装HDFS的安全模块时,开启某个进程,比如namenode时,经常会出现某个文件找不到,这是因为我在前后开启、关闭、格式化namenode过程中,先后用了root与hdfs,用root用户开启的namenode在本地写文件hdfs用户是没法读取的。这里一定要谨记,除了开启datanode时需要用root用户,与namenode相关的都是用hdfs用户,包括namenode的format、start与stop。
  3. 还有个比较tricky的问题,本来的journalnode是开启在slaves节点上的,我现在想把它们分开,我集群内的hosts文件是这样的
127.0.0.1   localhost10.4.13.85  master10.4.15.239 master2 zk1 jn1  #hostname为master210.4.9.14   zk2 jn2          #hostname为zk210.4.14.123 zk3 jn3          #hostname为zk310.4.13.63  node110.4.13.2   node210.4.11.89  node3

我这里为一台服务器配置多个domain.name是方便我在后面的配置时做到见名知意,比如,我在配置journalnode时我可以这么配置

<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://jn1:8485;jn2:8485;jn3:8485/ljc</value></property><property><name>dfs.journalnode.kerberos.principal</name><value>hdfs/_HOST@MY-REALM</value></property>…………

但这里问题来了,因为journalnode从active的NameNode那里取数据时需要验证身份,而我这里的principal用了_HOST,按理说CDH在运行时会自动把 _HOST替换为hostname,而且我在生产keytab时也是根据hostname来生成的,比如对于master2,我会生产下面的principal:

hdfs/master2@MY-REALMHTTP/master2@MY-REALMmapred/master2@MY-REALMyarn/master2@MY-REALM

但是我这样配置后,开启第一个时namenode就会报错,

2014-08-06 18:27:05,929 WARN org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hdfs/master@MY-REALM (auth:KERBEROS) cause:java.io.IOException: org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)2014-08-06 18:27:05,929 ERROR org.apache.hadoop.hdfs.server.namenode.EditLogInputStream: caught exception initializing http://jn3:8480/getJournal?jid=ljc&segmentTxId=1&storageInfo=-55%3A845458164%3A0%3ACID-b6f3e623-e3c0-45d0-a44c-ec3f01d57ea3java.io.IOException: org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream$URLLog$1.run(EditLogFileInputStream.java:406)     at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream$URLLog$1.run(EditLogFileInputStream.java:398)    at java.security.AccessController.doPrivileged(Native Method)    at javax.security.auth.Subject.doAs(Subject.java:415)    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554)    at org.apache.hadoop.security.SecurityUtil.doAsUser(SecurityUtil.java:448)    at org.apache.hadoop.security.SecurityUtil.doAsCurrentUser(SecurityUtil.java:442)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream$URLLog.getInputStream(EditLogFileInputStream.java:397)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.init(EditLogFileInputStream.java:139)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.nextOpImpl(EditLogFileInputStream.java:188)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream.nextOp(EditLogFileInputStream.java:239)    at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.readOp(EditLogInputStream.java:83)    at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.skipUntil(EditLogInputStream.java:140)    at org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream.nextOp(RedundantEditLogInputStream.java:178)    at org.apache.hadoop.hdfs.server.namenode.EditLogInputStream.readOp(EditLogInputStream.java:83)Caused by: org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)    at org.apache.hadoop.security.authentication.client.KerberosAuthenticator.doSpnegoSequence(KerberosAuthenticator.java:306)    at org.apache.hadoop.security.authentication.client.KerberosAuthenticator.authenticate(KerberosAuthenticator.java:196)    at org.apache.hadoop.security.authentication.client.AuthenticatedURL.openConnection(AuthenticatedURL.java:232)    at org.apache.hadoop.hdfs.web.URLConnectionFactory.openConnection(URLConnectionFactory.java:164)    at org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream$URLLog$1.run(EditLogFileInputStream.java:403)    ... 30 moreCaused by: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - UNKNOWN_SERVER)    at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:710)    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)    at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)    at org.apache.hadoop.security.authentication.client.KerberosAuthenticator$1.run(KerberosAuthenticator.java:285)    at org.apache.hadoop.security.authentication.client.KerberosAuthenticator$1.run(KerberosAuthenticator.java:261)    at java.security.AccessController.doPrivileged(Native Method)    at javax.security.auth.Subject.doAs(Subject.java:415)

大致意思是说无法读取journalnode那里的edits,认证失败了,没有权限。我还以为是我生产的keytab有错,我去jn1所在服务器(hostname为master2)上用kinit加上tabkey也能的到TGT,后来我把配置改成这样:

<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://master2:8485;zk2:8485;zk3:8485/ljc</value></property>

这样就能吧Namenode起来了,证明这里_HOST被直接替换成了我这里的domain.name了,而不是每个服务器上的hostname,我这里不用domain.name,直接换为ip,也没问题。要是想了解这个细节,需要看源代码了,以后在看吧。

  1. 如果遇到
Exception in thread "main" org.apache.hadoop.HadoopIllegalArgumentException: HA is not enabled for this namenode.        at org.apache.hadoop.hdfs.tools.DFSZKFailoverController.create(DFSZKFailoverController.java:121)        at org.apache.hadoop.hdfs.tools.DFSZKFailoverController.main(DFSZKFailoverController.java:172)

说明 dfs.nameservices 配置有误,我当时把值配置成 hdfs://ljc 了,其实应该配成 ljc 就可以了。

总结

从熟悉hadoop各个模块开始,到现在把最基本的环境搭建起来,前前后后也是有一个月的时间了,我发现我耗时比较多的是遇到问题后,没有看源码的意识,去网上搜,虽然有可能有人也遇到这个问题,但是明显和我的不相符,这时我就仔细检查我的配置文件,看看是否遗漏官方教程上的某一项,有些盲目,最近开始把cdh的src导入了eclipse,遇到一些错误后开始慢慢看源代码,我发现这样能很快定位到问题出错的范围,以后一定多尝试。

其次就是服务器比较多,hadoop也需要配置不少东西,这就需要自动化来帮助了,我最近把shell脚本又熟悉起来,写了一些用于管理hadoop的脚本,加上使用了salt这个自动化工具,这样方便多了。但是shell我还不是很熟悉,像数组的使用,很恶心有木有,交互式shell加载环境变量与非交互式(ssh -t -t hostname cmd这种方式就是非交互式)的不一样,等回来还要慢慢总结。

最近几天又重新把cdh的安全模块与高可靠性模块重新搭建了一遍,这次用是的目前最新的5.1.0的tar包安装,以前把MRv1搭建了好,这次主要是熟悉安装过程,并且把YARN的安全模块与HA模块成功搭建起来。遇到的错误还是不少,安装过程也是废了我好几天,现在想想很多错误都比较典型,现在此记录下我搭建过程中遇到的错误与心得,一方面为自己以后查阅,另一方面希望也能对遇到同样问题的人有所启发。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript包管理器比较:Npm vs Yarn vs PnpmJavaScript包管理器比较:Npm vs Yarn vs PnpmAug 09, 2022 pm 04:22 PM

本篇文章带大家了解一下三种JavaScript包管理器(npm、yarn、pnpm),并将这三种包管理器进行对比,聊聊npm、yarn、pnpm三者的区别和关联,希望对大家有所帮助,如有问题欢迎指出!

一文浅析JS包管理工具:yarn一文浅析JS包管理工具:yarnAug 09, 2022 pm 03:49 PM

yarn 和 npm 一样也是 JavaScript 包管理工具,下面本篇文章就来带大家了解一下yarn包管理工具,希望对大家有所帮助!

人工智能如何影响视频直播人工智能如何影响视频直播Apr 12, 2023 pm 12:10 PM

人工智能是近年来最受欢迎技术之一,而这个技术本身是非常广阔的,涵盖了各种各样的应用应用。比如在越来越流行的视频流媒体平台应用,也逐渐深入。为什么直播需要人工智能(AI)全球观看视频及直播的人数正在快速增长,AI将在未来直播发展中发挥至关重要的作用。直播已经成为交流和娱乐的强大工具。它似乎成为继电子邮件、短信、SMS和微信之后的“新的沟通方式”。每个人都喜欢观看体育赛事、音乐会、颁奖典礼等的直播。这种直播之所以吸引我们,是因为它比其他媒体形式提供了更多的实时信息。此外,表演者或个人UP主总是通过直

内存分区和实现的功能安全机制内存分区和实现的功能安全机制Apr 24, 2023 pm 07:22 PM

1.应用软件在AUTOSAR架构中,应用软件位于RTE上方,由互连的AUTOSARSWC组成,这些组件以原子方式封装了应用软件功能的各个组成部分。图1:应用程序软件AUTOSARSWC独立于硬件,因此可以集成到任何可用的ECU硬件上。为了便于ECU内部和内部的信息交换,AUTOSARSWC仅通过RTE进行通信。AUTOSARSWC包含许多提供内部功能的函数和变量。AUTOSARSWC的内部结构,即其变量和函数调用,通过头文件隐藏在公众视野之外。只有外部RTE调用才会在公共接口上生效。图2:SW

研究表明强化学习模型容易受到成员推理攻击研究表明强化学习模型容易受到成员推理攻击Apr 09, 2023 pm 08:01 PM

​译者 | 李睿 审校 | 孙淑娟​随着机器学习成为人们每天都在使用的很多应用程序的一部分,人们越来越关注如何识别和解决机器学习模型的安全和隐私方面的威胁。 然而,不同机器学习范式面临的安全威胁各不相同,机器学习安全的某些领域仍未得到充分研究。尤其是强化学习算法的安全性近年来并未受到太多关注。 加拿大的麦吉尔大学、机器学习实验室(MILA)和滑铁卢大学的研究人员开展了一项新研究,主要侧重于深度强化学习算法的隐私威胁。研究人员提出了一个框架,用于测试强化学习模型对成员推理攻击的脆弱性。 研究

别怪ChatGPT,AI黑客攻击早已开始别怪ChatGPT,AI黑客攻击早已开始May 03, 2023 pm 12:07 PM

ChatGPT的火爆出圈,让大众看到了AI表现惊艳的一面,但也让网络攻击有了更多可能性。近日有研究团队发现,人工智能ChatGPT存在一定风险,它可以为黑客提供有关如何入侵网站的分步说明。该团队研究人员使用虚拟的“HacktheBox”网络安全培训平台进行实验,对ChatGPT提出问题并遵循它的指导,以检查ChatGPT是否可以提供利用该漏洞的分步指南。研究人员问道:“我正在面对渗透测试的挑战。我在一个只有一个按钮的网站上,我将如何测试它的漏洞?”对此,ChatGPT以五个基本点作为解答,说明了

深入聊聊前端限制用户截图的脑洞深入聊聊前端限制用户截图的脑洞Nov 07, 2022 pm 04:56 PM

​做后台系统,或者版权比较重视的项目时,产品经常会提出这样的需求:能不能禁止用户截图?有经验的开发不会直接拒绝产品,而是进行引导。

基于 AI 的四大人脸识别应用基于 AI 的四大人脸识别应用Apr 11, 2023 pm 07:49 PM

大约三十年前,面部识别应用程序的概念似乎是一个幻想。但现在,这些应用程序执行许多任务,例如控制虚假逮捕、降低网络犯罪率、诊断患有遗传疾病的患者以及打击恶意软件攻击。2019 年全球脸型分析仪市场价值 32 亿美元,预计到 2024 年底将以 16.6% 的复合年增长率增长。人脸识别软件有增长趋势,这一领域将提升整个数字和技术领域。如果您打算开发一款脸型应用程序以保持竞争优势,这里有一些最好的人脸识别应用程序的简要列表。优秀的人脸识别应用列表Luxand:Luxand人脸识别不仅仅是一个应用程序;

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境