Cloudera Manager无法添加主机

ene*_*rei 14 cloud cloudera

我从这里开始遵循安装过程,当我到达Inspect Role Assignments阶段时,我只看到一个托管主机:localhost.localdomain.

任何后续添加其他主机的尝试都会产生相同的结果:

  • 每个群集主机安装成功
  • 并且主机不显示为托管

我错过了什么?

更新:我不想回答我自己的问题所以我在这里写答案.

解决方案是如此明显,以至于我没有看到它并且在相当一段时间内没有解决问题,直到它在做一些检查时遇到了我.

hostname在安装时提供被设置在/etc/hosts了IP 127.0.0.1localhost.localdomain女巫被误导了Cloudera的设置和基本的所有主机具有相同的IP和主机名.

我已经重做了设置,hostname.domain.local现在hosts文件功能是一个单独的行,具有特定的IP和主机名,并且/etc/resolv.conf文件与行一致search domain.local.

即使您在这种不愉快的经历之后,我认为安装文档应该包含这些小细节,但是,这就像说明显的那样.

小智 9

看起来像Cloudera(可能最近)在他们的文档中添加了一个关于这一点的模糊.我已经有一段时间遇到这个问题了,关键是我得到以下命令来给出正确的结果:

$ host -v -t A `hostname`
Run Code Online (Sandbox Code Playgroud)

我的意思是设置一个本地DNS服务器,但也许在每个节点上只有相同的/ etc/hosts就足够了.因人而异.


Eng*_*URK 6

好吧我在虚拟机上实现了集群,所以我想分享我所做的一切.在我的集群中,我创建了一个管理器节点(仅用于cloudera管理器),一个namenode,两个datanode.这使得向集群添加新节点更容易且没有问题.我还准备了简单的文件说明.它可能很少总结,但工作正常.大多数代码都来自不同的网站,所以我尽量保持简单,就像我理解的那样.我在这里添加了这个答案,因为我的实现还包括向集群添加新主机.

注意:我对linux环境很新,我尽我所能做的事情,我期待任何能纠正我对使用或解释的评论的人.

================================================== ================================

这些说明在cenTOS 6.2 x64(非实时桌面版)上实现.如果您使用服务器版本,则可能需要自己配置网络配置.

尽可能在所有机器上使用相同的版本.有人说机器的IP值很重要,但我用不同的IP范围实现,例如一台机器使用192.168.12.13,其他机器使用192.168.13.144.它不会造成问题.

我还在Windows 7企业版上使用Oracle VirtualBox进行虚拟机环境.

建议:当您创建一个常见的cenTOS安装时,如果发生任何错误配置,您应该创建一个克隆.始终保留备份克隆.

首先手动下载这些文件:

cloudera经理(您可以下载社区版).我们需要这个主节点,但这并不意味着主节点是集群的一部分.一世

在没有namenode或工作跟踪器的机器上使用经理,只是mamanger应用程序.

Oracle JDK.你可以从oracle网站下载一个正确的.只需去那里从浏览器下载或复制链接并使用wget下载它.这是你的选择.

一定要卸载"打开jdk":

yum remove java-1.6.0-openjdk
Run Code Online (Sandbox Code Playgroud)

安装"oracle jdk"manualy请注意,wget行可以更改.你可以从浏览器下载文件.

wget http://download.oracle.com/otn-pub/java/jdk/6u27-b07/jdk-6u27-linux-x64-rpm.bin

chmod u+x jdk-6u27-linux-x64-rpm.bin

./jdk-6u27-linux-x64-rpm.bin
Run Code Online (Sandbox Code Playgroud)

让我们的系统和浏览器使用我们的新java

/usr/sbin/alternatives --install /usr/bin/java java /usr/java/default/bin/java 20000 
/usr/sbin/alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/default/jre/lib/i386/libnpjp2.so 20000
Run Code Online (Sandbox Code Playgroud)

将用户添加为sudoers

nano /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

找到"root ALL =(ALL)ALL"这一行并在下面添加这一行

username  ALL=(ALL)   ALL
Run Code Online (Sandbox Code Playgroud)

//这一行意味着用户root可以从所有终端执行,//充当所有(任何)用户,并运行ALL(任何)命令.

安装"ssh服务器"

sudo yum install openssh-server
Run Code Online (Sandbox Code Playgroud)

检查ssh服务器状态以确保它正在运行

/sbin/service sshd status
Run Code Online (Sandbox Code Playgroud)

如果没有启动sshd服务,请启动它

/sbin/service sshd start
Run Code Online (Sandbox Code Playgroud)

或者您可以简单地测试ssh

ssh localhost
Run Code Online (Sandbox Code Playgroud)

成功测试后,您可以退出

exit
Run Code Online (Sandbox Code Playgroud)

这些说明也在cloudera网站中定义.如果你可以检查/ var/log/cloudera-scm-agent/cloudera-scm-agent-log或.out文件,看看是否存在持久性或hibernate相关

异常/错误,这意味着问题是关于postgresql数据库.可能数据库尚未设置.我们需要做的就是设置它.

不是:只有经理(主)节点需要postgresql.不需要奴隶.

通过检查服务状态确保安装了postgresql实例

/etc/init.d/postgresql status
Run Code Online (Sandbox Code Playgroud)

不是:下面的说明需要回购配置!如果您不知道如何跳过脚本文件使用.

在Cloudera Manager Server主机上安装嵌入式PostgreSQL数据库包:

sudo yum install cloudera-manager-server-db
Run Code Online (Sandbox Code Playgroud)

通过运行此命令,准备嵌入式PostgreSQL数据库以与Cloudera Manager Server一起使用

sudo /sbin/service  cloudera-scm-server-db initdb
Run Code Online (Sandbox Code Playgroud)

运行以下命令启动嵌入式PostgreSQL数据库:

sudo /sbin/service cloudera-scm-server-db start
Run Code Online (Sandbox Code Playgroud)

脚本文件用法:下面的说明是使用脚本文件手动设置postgresql

/usr/share/cmf/schema/scm_prepare_database.sh database-type [options] database-name username password
Run Code Online (Sandbox Code Playgroud)

必需参数和说明

database-type 要连接到MySQL数据库,请将mysql指定为数据库类型,或指定postgresql以连接到外部PostgreSQL数据库.

database-name 要创建的Cloudera Manager Server数据库的名称.

username 要创建的Cloudera Manager Server数据库的用户名.

password 要创建的Cloudera Manager Server数据库的密码.如果未在命令行上指定密码,脚本将提示您输入密码.

您可以查看此页面了解详细信息:https: //ccp.cloudera.com/display/ENT/Installation+Path+B+-+Installation+Using+Your+Own+Method#InstallationPathB-InstallationUsingYourOwnMethod-Step5%3AConfigureaDatabasefortheClouderaManagerServer

启动postgresql如果它没有启动(你可以检查状态,并确保重新启动它)

/etc/init.d/postgresql start
Run Code Online (Sandbox Code Playgroud)

如果linux上存在rooting/firewall限制,那么代理的heartbeath将无法到达主节点(manager),因此我们需要消除安全性

关注.在这种情况下,有Selinux和iptables可以产生问题.Cloudera说完全禁用iptables但是如果你有经验的话

关于iptables配置然后你可以添加这样的规则.

打开iptables并设置7180端口访问规则

nano /etc/sysconfig/iptables
Run Code Online (Sandbox Code Playgroud)

添加此行:

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 7180 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

或简单地(cloudera方式)禁用iptables totaly.确保它在所有节点上都是相同的

sudo /etc/init.d/iptables stop
Run Code Online (Sandbox Code Playgroud)

使用status参数检查iptables状态

/etc/init.d/iptables status
Run Code Online (Sandbox Code Playgroud)

不是:每次机器重新启动时,iptables将再次激活,因此您可能需要一种方法来自动停止它.由于iptables和selinuxun将在日志文件"cloudera-scm-agent.log"中发生Ay问题.您可能会看到一些"已弃用"的警告

phyton代码,只是忽略它们.错误/异常通常是"没有主机路由"或类似的东西.

禁用selinux.但在上面的许多操作之前你可能需要这样做.特别是当您尝试安装cloudera manager时.linux会给你关于selinux的警告.

sudo nano /etc/selinux/config
    (selinux=disabled)
Run Code Online (Sandbox Code Playgroud)

为每台计算机设置唯一的主机名.所以在每个mahine编辑这个文件并给该机器命名.我们将在hosts文件中使用此名称.

sudo nano /etc/sysconfig/network
Run Code Online (Sandbox Code Playgroud)

使用节点的所有ip值和主机名重新修改主机文件.在所有节点中执行此操作.您也可以简单地复制到其他节点.所有主机文件都是相同的

sudo nano /etc/hosts
Run Code Online (Sandbox Code Playgroud)

示例:127.0.0.1 localhost 192.168.1.2 masternode 192.168.1.3 namenode 192.168.1.4 datanode1 192.168.1.5 datanode2

检查cloudera manager状态,如果需要,可以重新启动它

sudo /sbin/service cloudera-scm-server start
Run Code Online (Sandbox Code Playgroud)

确保您的互联网连接足以满足所有节点的要求.因为经理将连接它们并开始对它们进行一系列的下载操作.如果经理遇到任何问题,它将回滚所有内容,这将花费你重新启动每一件事.相信我这部分花了太多时间!

如果您使用虚拟机作为节点(我这样做),您可以选择桥接网络模式.所以你可以为所有节点提供互联网连接,但这有一个缺点.如果重新启动物理机,则可能会丢失ip值并自动重新获取新值.哪个可以让你在每个节点上重新修改主机文件.但是,如果您使用NAT或其他内部网络,您可以为节点提供静态IP值,因此不需要重新配置.但是你应该为所有机器提供互联网接入网关ip.因为不仅仅是经理,代理商还需要上网才能下载文件.当你完成集群设置后,你可以省去代理(从属)节点的互联网访问.

您应该在启动虚拟机时尝试ifconfig以查看它是否从网络获取ip值.如果不是,则必须更改VM应用程序上的虚拟机配置.如果您正在使用具有有线和无线连接的物理机,那么您将拥有多个以太网适配器选择.一定要选择正确的.错误的一个不会给你IP地址.

一定要使用oracle JDK.

检查cloudera scm状态的时间.

sudo /sbin/service cloudera-scm-server status
Run Code Online (Sandbox Code Playgroud)

检查7180和其他cloudera管理器实际端口是否被监听.你可以使用"nmap"或"netstat --listen"

如果您无法将cloudera manager安装到主节点(可能是selinux,postgresql或下载问题.顺便说一下,下载是不可删除的),那么您可能需要清理并重新启动.

此行将清除cloudera已实现的文件,并允许您再次重新启动.

sudo rm -Rf /usr/share/{cmf,hue} /var/lib/cloudera* /var/cache/yum/cloudera*
Run Code Online (Sandbox Code Playgroud)

你可以在奴隶节点上重新启动cloudera-scm-agent,如果你改变任何东西并且besure进程正常工作.但是你要清理干净的日志文件以查看新配置是否正常工作.日志文件对于查看出错或正确的内容非常重要.

cd /var/log/cloudera-scm-agent
sudo rm *   
Run Code Online (Sandbox Code Playgroud)

接下来的步骤是从cludera manager web界面添加主机:

在经理机器上我使用"localhost:7180"连接到mamanger gui.在主机部分,您将添加新主机到群集.只需在testbox中添加节点的名称,然后按"查找主机"按钮.如果您记得,主机的名称已在/ etc/hosts文件中定义.所以你可以在文本框中使用ip或hostname,如果它们设置正确,那么mamanger将找到合适的一个并在上面的列表中列出它们.如果它们尚未管理(意味着尚未安装),"当前管理"列将显示"否".否则会显示"是".

之后,您可以继续在选择的主机上安装cloudera代理和hadoop文件.但如果您已经安装了它们(如果它们是托管的),那么您可以开始在它们上添加服务.只需转到"服务"页面并继续您的流程.如果您正确设置主机并看到它们是受管理的,那么添加服务非常容易且没有问题.(至少对我而言).

请发送关于我的答案的任何评论.这很长.也许是非必要的.但我试图添加每一个细节.