基于ubuntu14.04的ambari安装及集群部署

第一节. Ambari简介

Ambari跟Hadoop等开源软件一样,也是Apache Software Foundation中的一个项目,并且是顶级项目。目前最新的发布版本是2.4.1。就Ambari的作用来说,就是创建、管理、监视Hadoop的集群,但是这里的Hadoop是广义,指的是Hadoop整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper等,而并不仅是特指Hadoop。用一句话来说,Ambari就是为了让Hadoop以及相关的大数据软件更容易使用的一个工具。

说到这里,大家就应该明白什么人最需要 Ambari了。那些苦苦花费好几天去安装、调试Hadoop的初学者是最能体会到 Ambari的方便之处的。而且,Ambari现在所支持的平台组件也越来越多,例如流行的Spark,Storm等计算框架,以及资源调度平台YARN等,我们都能轻松地通过Ambari来进行部署。

Ambari自身也是一个分布式架构的软件,主要由两部分组成:Ambari Server 和 Ambari Agent。简单来说:

  • 用户通过 mbari Server通知Ambari Agent安装对应的软件;
  • Agent会定时地发送各个机器每个软件模块的状态给Ambari Server;
  • 最终这些状态信息会呈现在Ambari的GUI,方便用户了解到集群的各种状态,并进行相应的维护。

详细的操作和介绍会在后续章节介绍。

第二节. 配置Ambari安装环境

关于 Ambari 的安装,目前网上能找到两个发行版,一个是 Apache 的 Ambari,另一个是 Hortonworks 的,两者区别不大。这里就以 Hortonworks 的 Ambari 2.2.2 作为示例。本文使用四台 Ubuntu14.04 作为安装环境,四台机器分别为node0.example.com、 node1.example.com、node2.example.com、node3.example.com。node0 计划安装为 Ambari 的 Server,另外三台为 Ambari Agent。

先了解如何如何使用vagrant快速搭建虚拟机集群的,可以查看文章《使用Vagrant创建虚拟机集群》

安装 Ambari 最方便的方式就是使用公共的库源(public repository)。有兴趣的朋友可以自己研究一下搭建一个本地库(local repository)进行安装。这个不是重点,所以不在此赘述。在进行具体的安装之前,需要做几个准备工作。

1.创建四台机器的域名

例如node0.example.com机器:

$ sudo echo node0 > /etc/hostname
$ sudo vim /etc/hosts
#在文件中添加本机的主机信息:
192.168.17.200 node0.example.com node0

然后依次为node1-node3修改主机名及域名信息,切记域名信息必须是FQDN格式的,如node0.example.com, node0是主机名,example.com是域名后缀。

注意:需要将在/etc/hosts中将127.0.0.1对应的信息注释或者删除,否则可能引起节点之间通信失败,其原因是这行hosts导致组件的端口监听绑定到了127.0.0.1而不是ip或者0.0.0.0,所以其他节点没法连接到这个节点。为了确保Ambari server可以根据Ambari Agent的域名信息联接,需要将node1-node3的域名信息添加到node0

在node0中执行以下操作:

$ sudo vim /etc/hosts
#在文件中添加如下信息
192.168.17.201 node1.example.com node1
192.168.17.202 node2.example.com node2
192.168.17.203 node3.example.com node3

验证:

$ ping node1.example.com
$ ping  node1

2.SSH的无密码登录 Ambari的Server会SSH到Agent的机器,拷贝并执行一些命令。因此我们需要配置 Ambari Server到Agent的SSH无密码登录。在这个例子里,node0可以SSH无密码登录node1、node2和 node3。步骤:

  • 使用root用户
    $ sudo -i
    
  • 分别在node0-node3创建ssh key
$ ssh-keygen -t rsa
  • 将Ambari Server的public key的内容复制到node0-node3的 /home/hadoop/.ssh/authorized_keys
  • 验证:在node0输入
    $ ssh [email protected]
    

3.安装启动ntp

$ ape-get install ntp
$ ntpq -p

4.查看是否开启transparent_hugepage

$ cat /sys/kernel/mm/transparent_hugepage/enabled
 [always] madvise never

always代表开启不存在该文件就是没开启临时关闭

$ echo never > /sys/kernel/mm/transparent_hugepage/enabled

当重启系统后,会自动还原为always 以上的准备工作完成后,便可以真正的开始安装 Ambari 了。

第三节. 安装Ambari

安装过程

首先需要获取 Ambari 的公共库文件(public repository)。登录到 Linux 主机并执行下面的命令(也可以自己手工下载):

$ sudo -i
$ cd /etc/apt/sources.list.d
$ wget http://public-repo-1.hortonworks.com/ambari/ubuntu14/2.x/updates/2.2.2.0/ambari.list
$ apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD
$ apt-get update
$ apt-get install ambari-server

如果运行apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B9733A7A07513CAD失败,请使用代理方式,如下

$ apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 B9733A7A07513CAD

待安装完成后,便需要对Ambari Server做一个简单的配置。执行下边的命令。

$ ambari-server setup

在这个交互式的设置中,采用默认配置即可。Ambari会使用Postgres数据库,默认会安装并使用Oracle的JDK。默认设置了Amabri GUI的登陆用户名为admin/admin。并且指定Ambari Server的运行用户为root 简单的setup配置完成后。就可以启动Ambari了。运行下面的命令。

$ ambari-server start

当成功启动 Ambari Server 之后,便可以从浏览器登录,默认的端口为 8080。以本文环境为例,在浏览器的地址栏输入 http://node0.example.com:8080,登录密码为 admin/admin。登入 Ambari 之后的页面如下图

至此,Ambari Server 就安装完成了。

第四节.部署一个Hadoop2.x集群

登录 Ambari 之后,点击按钮“Launch Install Wizard”,就可以开始创建属于自己的大数据平台。

第一步命名集群的名字。本环境为bigdata。

第二步选择一个Stack,这个Stack相当于一个Hadoop生态圈软件的集合。Stack的版本越高,里面的软件版本也就越高。这里我们选择 HDP2.4,里面的对应的Hadoop版本为2.7.x。

第三步指定Agent机器(如果配置了域,必须包含完整域名,例如本文环境的域为example.com),这些机器会被安装Hadoop等软件包。还记得在安装章节中提到的SSH无密码登陆吗,这里需要指定当时在Ambari Server机器生成的私钥(ssh-keygen生成的,公钥已经拷贝到Ambari Agent的机器,具体的SSH无密码登录配置,可以在网上很容易找到配置方法,不在此赘述)。另外不要选择“Perform manual registration on hosts and do not use SSH“。因为我们需要Ambari Server自动去安装Ambari Agent。

Target Hosts中填

node[0-3].example.com
或
node0.example.com
node1.example.com
node2.example.com
node3.example.com

第四步Ambari Server会自动安装Ambari Agent到刚才指定的机器列表。安装完成后,Agent会向 Ambari Server注册。成功注册后,就可以继续Next到下一步。

To manually resolve issues on each host run the HostCleanup script (Python 2.6 or greater is required):

python /usr/lib/python2.6/site-packages/ambari_agent/HostCleanup.py --silent --skip=users

Note: Clean up of Firewall and Transparent Huge Page issues are not supported by the HostCleanup script.

Note: To clean up in interactive mode, remove --silent option. To clean up all resources, including users, remove --skip=users option. Use --help for a list of available options.

注意:如果没有将transparent_hugepage关闭的话,会报以上错误,如何设置为关闭状态请参照准备部分

第五步这里我们终于看到跟Hadoop有关的名词了。在这一步,我们需要选择要安装的软件名称。本文环境选择了 HDFS,YARN+MapReduce2,Zoopkeeper,Storm以及Spark。选的越多,就会需要越多的机器内存。选择之后就可以继续下一步了。这里需要注意某些Service是有依赖关系的。如果您选了一个需要依赖其他Service的一个 Service,Ambari 会提醒安装对应依赖的 Service。

第六步和第七步分别是选择安装软件所指定的 Master机器和Slave机器,以及Client机器。这里使用默认选择即可(真正在生产环境中,需要根据具体的机器配置选择)。

第八步就是Service的配置。绝大部分配置已经有默认值,不需要修改,初学者,如果不需要进行调优是可以直接使用默认配置的。有些Service会有一些必须的手工配置项,则必须手动输入,才可以下一步。本文环境直接使用默认配置。

第九步Ambari会总结一个安装列表,供用户审阅。这里没问题,就直接下一步。

第十步Ambari会开始安装选择的Service到Ambari Agent的机器。这里可能需要等好一会,因为都是在线安装。安装完成之后,Ambari就会启动这些Service。

安装完成之后,就可以查看Ambari的Dashboard了。

第五节. 安装过程中的常见问题

在第四节中第十步遇到的问题:

stderr: /var/lib/ambari-agent/data/errors-1265.txt

Python script has been killed due to timeout after waiting 1800 secs

stdout: /var/lib/ambari-agent/data/output-1265.txt

2016-10-04 19:40:43,872 - Using hadoop conf dir: /usr/hdp/current/hadoop-client/conf 2016-10-04 19:40:43,874 - Group['spark'] {} 2016-10-04 19:40:43,876 - Group['hadoop'] {} 2016-10-04 19:40:43,877 - Group['users'] {} 2016-10-04 19:40:43,877 - User['hive'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,884 - User['zookeeper'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,886 - User['spark'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,887 - User['ambari-qa'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'users']} 2016-10-04 19:40:43,888 - User['tez'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'users']} 2016-10-04 19:40:43,897 - User['hdfs'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,899 - User['yarn'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,900 - User['hcat'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,901 - User['mapred'] {'gid': 'hadoop', 'fetch_nonlocal_groups': True, 'groups': [u'hadoop']} 2016-10-04 19:40:43,902 - File['/var/lib/ambari-agent/tmp/changeUid.sh'] {'content': StaticFile('changeToSecureUid.sh'), 'mode': 0555} 2016-10-04 19:40:43,917 - Execute['/var/lib/ambari-agent/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa'] {'not_if': '(test $(id -u ambari-qa) -gt 1000) || (false)'} 2016-10-04 19:40:43,944 - Skipping Execute['/var/lib/ambari-agent/tmp/changeUid.sh ambari-qa /tmp/hadoop-ambari-qa,/tmp/hsperfdata_ambari-qa,/home/ambari-qa,/tmp/ambari-qa,/tmp/sqoop-ambari-qa'] due to not_if 2016-10-04 19:40:43,945 - Group['hdfs'] {} 2016-10-04 19:40:43,946 - User['hdfs'] {'fetch_nonlocal_groups': True, 'groups': [u'hadoop', u'hdfs']} 2016-10-04 19:40:43,947 - FS Type: 2016-10-04 19:40:43,948 - Directory['/etc/hadoop'] {'mode': 0755} 2016-10-04 19:40:43,948 - Directory['/var/lib/ambari-agent/tmp/hadoop_java_io_tmpdir'] {'owner': 'hdfs', 'group': 'hadoop', 'mode': 0777} 2016-10-04 19:40:43,969 - Repository['HDP-2.4'] {'base_url': 'http://public-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.4.3.0', 'action': ['create'], 'components': [u'HDP', 'main'], 'repo_template': ' ', 'repo_file_name': 'HDP', 'mirror_list': None} 2016-10-04 19:40:43,983 - File['/tmp/tmp4uQgmE'] {'content': 'deb http://public-repo-1.hortonworks.com/HDP/ubuntu14/2.x/updates/2.4.3.0 HDP main'} 2016-10-04 19:40:43,984 - Writing File['/tmp/tmp4uQgmE'] because contents don't match 2016-10-04 19:40:43,985 - File['/tmp/tmp_VkOpI'] {'content': StaticFile('/etc/apt/sources.list.d/HDP.list')} 2016-10-04 19:40:43,986 - Writing File['/tmp/tmp_VkOpI'] because contents don't match 2016-10-04 19:40:43,987 - Repository['HDP-UTILS-1.1.0.20'] {'base_url': 'http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/ubuntu12', 'action': ['create'], 'components': [u'HDP-UTILS', 'main'], 'repo_template': ' ', 'repo_file_name': 'HDP-UTILS', 'mirror_list': None} 2016-10-04 19:40:43,988 - File['/tmp/tmpJKZpNo'] {'content': 'deb http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/ubuntu12 HDP-UTILS main'} 2016-10-04 19:40:43,989 - Writing File['/tmp/tmpJKZpNo'] because contents don't match 2016-10-04 19:40:43,992 - File['/tmp/tmpOBa7MZ'] {'content': StaticFile('/etc/apt/sources.list.d/HDP-UTILS.list')} 2016-10-04 19:40:43,993 - Writing File['/tmp/tmpOBa7MZ'] because contents don't match 2016-10-04 19:40:43,995 - Package['unzip'] {'retry_on_repo_unavailability': False, 'retry_count': 5} 2016-10-04 19:40:44,033 - Skipping installation of existing package unzip 2016-10-04 19:40:44,033 - Package['curl'] {'retry_on_repo_unavailability': False, 'retry_count': 5} 2016-10-04 19:40:44,063 - Skipping installation of existing package curl 2016-10-04 19:40:44,063 - Package['hdp-select'] {'retry_on_repo_unavailability': False, 'retry_count': 5} 2016-10-04 19:40:44,096 - Skipping installation of existing package hdp-select 2016-10-04 19:40:44,335 - Using hadoop conf dir: /usr/hdp/current/hadoop-client/conf 2016-10-04 19:40:44,347 - Using hadoop conf dir: /usr/hdp/current/hadoop-client/conf 2016-10-04 19:40:44,356 - Package['rpcbind'] {'retry_on_repo_unavailability': False, 'retry_count': 5} 2016-10-04 19:40:44,397 - Skipping installation of existing package rpcbind 2016-10-04 19:40:44,398 - Package['hadoop-2-4-.-client'] {'retry_on_repo_unavailability': False, 'retry_count': 5} 2016-10-04 19:40:44,421 - Installing package hadoop-2-4-.-client ('/usr/bin/apt-get -q -o Dpkg::Options::=--force-confdef --allow-unauthenticated --assume-yes install 'hadoop-2-4-.*-client'')

之所以出现此问题,是因为ambari server在控制agent安装yarn时,由于安装yarn超过了ambari默认的1800s导致的。

解决方案: 1.手动安装yarn apt-get update apt-get install hadoop-2-4-.*-yarn

2.修改配置文件 Can be solved by setting the timeout (agent.package.install.task.timeout=1800) in /etc/ambari-server/conf/ambari.properties

注意:在安装mapreduce,spark等软件包时,也可能出现类似的问题,请将timeout设置到合适的时间。或者根据错误提示,手动安装相应的软件包。

在启动集群时,遇到如下问题:

resource_management.core.exceptions.Fail: Execution of 'curl -sS -L -w '%{http_code}' -X GET 'http://node1.example.com:50070/webhdfs/v1/user/spark?op=GETFILESTATUS&user.name=hdfs' 1>/tmp/tmpR0jGl5 2>/tmp/tmp0XYJ6w' returned 7. curl: (7) Failed to connect to node1.example.com port 50070: Connection refused

原因:是因为在配置各个节点时的hostname时,没有删除127.0.0.1的相关内容引起的。具体操作请查看第二节中的内容


你可能感兴趣的:(Ambari)