我选择学习Spark的架构是:Spark + Hadoop (YARN, HDFS). 为了更好的管理自己的Hadoop集群,我选择了Ambari。
这篇笔记记录了我安装Ambari的过程。
环境
- 公司内网,访问外部需要通过代理
- CentOS 7, JDK 8
安装步骤
1. 更改主机名
Ambari不允许使用例如localhost之类的主机名。因此要将主机更改一个有意义的名字。例如my-ambari-server.
使用 hostnamectl
可以修改主机的名字
修改 /etc/hosts, 将自己的IP和主机名映射加进去
192.168.1.1 my-ambari-server
运行 hostname -f
确保主机名被更改
2. 禁用IPv6
如果Centos 7的Ipv6模块没有关闭,Ambari在启动时会先绑定到Ipv6的地址,这会导致无法通过ipv4访问。禁用的方式为:
在 /etc/sysctl.conf 中加入
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
运行 sysctl -p
应用更改。运行 netstata -anp |grep 8080
查看ambari绑定的协议和端口号是否为ipv4和8080
3. 禁用防火墙
关闭防火墙:
systemctl disable firewalld
关闭SELinux。
sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config
然后重启. 使用 sestatus
查看SELinux的状态。
4. 设置代理
注意:这一步如果不是在代理后面,可以不需要
增加一个新文件:/etc/profile.d/proxy.sh, 内容为:
export http_proxy=http://a:a@proxy:80
export https_proxy=https://a:a@proxy:80
export no_proxy=localhost, ${hostname}
注意,由于@符号用于区分地址和用户名密码,如果用户名或者密码中包含@符号,那么需要进行转义。
@ =》 %40
给Yum添加代理。 编辑 /etc/yum.conf, 添加下面的内容:
proxy=http://proxy:80
proxy_username=xxxx
proxy_password=yyyy
no_proxy=localhost
重启电脑。
在安装好ambari server后,修改 /var/lib/ambari-server/ambari-env.sh 中的AMBARI_JVM_ARGS 参数,加入:
-Dhttp.proxyHost=proxy -Dhttp.nonProxyHost=localhost -Dhttp.proxyPort=80 -Dhttp.proxyUser=XXX -Dhttp.proxyPassword=YYY
更新代理的证书(假设为foo.crt):
update-ca-trust enable
cp foo.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
5. 设置无密码的SSH
yum install openssh
修改 /etc/ssh/sshd_config的配置
PermitRootLogin yes
service sshd start
在Ambari server的机器上生成ssh key
ssh-keygen -t rsa
然后将生成的ssh key拷贝到远程机器上:
ssh-copy-id user@remote_host
然后测试:
ssh user@remote_host
应该不用密码就可以直接登录了。在Ambari安装集群的时候,ambari要使用ssh登录到各台机器。
6. 从YUM仓库安装Ambari Server
cd /etc/yum.repos.d/
wget http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.1.2/ambari.repo
yum install ambari-server
ambari-server setup
ambari-server start
然后访问 http://:8080, 默认的用户名和密码是admin/admin
重置Ambari
如果发现集群有错误而难以修复,那么最好的办法之一就是重置所有的安装,然后再重新安装一遍。
ambari-server reset
当然如果只是想删除其中的某个服务,那么可以使用Ambari 提供的RESET API。
curl -s -u admin:admin -H "X-Requested-By: Ambari" -X DELETE http://AMBARI-HOST:8080/api/v1/clusters/CLUSTER_NAME/services/SERVICE_NAME
Ambari的服务名字都是大写的。
也可以只删除某个服务下面的组件。第一步就是获取服务下面的组件
curl -s -u admin:admin -H "X-Requested-By: Ambari" -X GET http://<hostname>:8080/api/v1/clusters/<clustername>/services/PIG
然后根据返回的JSON可以知道具体的服务名。然后再使用 DELETE 删除对应的组件:
curl -s -u admin:admin -H "X-Requested-By: Ambari" -X DELETE http://<hostname>:8080/api/v1/clusters/<clustername>/services/PIG/components/PIG