|
最近在搭建hadoop 环境的时候,最初尝试去写一些脚本去安装包以及修改配置,后来发现源软件https://ambari.apache.org/可以管理部署监控hadoop集群, 于是尝试用docker安装试验。ambaris: 是 hortonworks 开发的一个自动 部署+管理+监控 HDP(Hortonworks Data Platform, http://hortonworks.com/hdp/,由hadoop生态环境中的一些开源软件组成)的开源软件。与之相对应的有cloudera manager, cloudera 发展时间更长,网上能搜到的资料更多, 但是其开源性好像没有hortonworks好。docker: 现在比较热门的一个虚拟运行环境,我的理解是其使用了cgroup, namespace, aufs 等实现了应用程序的运行环境隔离。
首先贴上Ambari 的架构,如下图, Ambari Server 与agent 交互从而 管理集群节点,这里agent的注册可以是被动,也就是server 通过ssh连接到agent,然后启动agent 去注册,所以需要两个配置, agent上需要能够ssh 私钥 无密码登陆, 而且agent上要配置server的地址。
因为是通过docker安装,所以宿主机环境我使用了ubuntu 14.04(24G 内存, 4核8线程)
1. 创建一个基础image
由于ambari 对ubuntu仅支持ubuntu12, 所以这里使用了官方的ubuntu12.04 的docker 镜像为基础 创建所需要的镜像,这里我创建了两个基础镜像,Dockerfile 分别在如下链接,
https://github.com/trumanz/docker-tools/tree/master/dockerBuild/ubuntu12.04_devhttps://github.com/trumanz/ambari-deploy/tree/master/dockernized1. trumanz/ubuntu12.04:dev , 配置了apt.conf(指向apt cache server 或者proxy) 安装了 常用开发软件,并且设置了 root ssh登陆许可。2. trumanz/ambari:dev 在trumanz/ubuntu12.04:dev的基础上安装了 ambari server 和agent的包, 并且设置了 ssh 秘钥设置。
2. 创建container,配置server执行https://github.com/trumanz/ambari-deploy/tree/master/dockernized 中的 start.sh脚本,这里启动了4个container , 设置了每个container 都是4g 内存(默认cpu设定,也就是4个container 都是平等的)as是Ambari server ag1, ag2, ag3 是我们的ambari agent ,也就是模拟需要管理的host,
这里有一个已知问题,当遇到下面的logREASON: Ambari Server java process died with exitcode -1. Check /var/log/ambari-server/ambari-server.out for more information.
可以到as container里面手动启动 Ambari server, 如下truman@z600:~/work/ambari-deploy/dockernized$ docker exec -t -i as /bin/bash
root@as:/# ambari-server start
还是输出同样的失败log,不要管,执行jps 命令,看到AmbariServer 启动就可以了,root@as:/# jps
477 AmbariServer
549 Jps
3. firefox 中 管理 配置节点在firefox 中输入 as container的地址,形如, http://172.17.0.1:8080, 出现登陆密码,使用admin/admin 登陆,1. 点 ”Lanuch Install Wizard“2. 输入Cluster 名,形如“test”, 点next3. 选择HDP respository ,这里点开Advanced Repository Options 去掉除ubuntu12 之外的OS, 并且在HDP-2.2中将2.6.6.0 替换为2.4.4.2(注意这个版本,测试中发现2.6.6.0 在安装ZooKeeper 会出现问题4. Install Options,在Target Hosts 中输入我们用container模拟的节点,也就是三行分别为 ag1, ag2和ag3。 在SSH Private Key 中 选择 https://github.com/trumanz/ambari-deploy/tree/master/dockernized/ssh 中的id_rsa5. 进入Confirm Hosts, 这一阶段时间比较长,出现warning,告知NTP 没有安装(这里因为我们是运行在同一主机的container环境中,所以并不需要NTP时间同步)可以忽略掉。 选中所有host ,点NEXt6. Choose Services, 这一步骤,只选择 HDFS , YARN+MpReduce2,ZooKeeper 和 Ambari Metrics (这里仍以简单的mapreduce示例)既可以。7. Assign Masters, 这一步,我将大部分master都安装在ag1上8. Assign Slaves and Clients,我这一部主要选中ag2 和ag3,这样在三个container中存数和计算9. Customize Services, 这一步比较讨厌,因为docker 的container 里面识别到的内存大小和cpu数量 跟宿主机是一样的,所以推荐值并不合适,需要根据需求修改,这里需要根据自己的内存与配置情况修改(这些配置参数也可以在安装完成后修改,通过管理界面修改), 这里暂时使用默认参数一直下一步,进入 安装界面, 等待时间比较长
最终进入如下界面
这样我们就可以在ag1上执行mapreduc 的示例代码,除了一下两点,其他同官方教程相同1. JAVA_HOME的路径root@ag1:/local# export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd642. 这里HDFS的跟目录只有hdfs用户具有创建目录的权限,所以要使用hdfs 用户去创建目录,root@ag1:/local# su - hdfs -c 'hdfs dfs -mkdir /input'
总结:Docker 提供了快速搭建环境的运行环境的方式,但是在container看到内存和cpu信息是跟host宿主机相同的(即使设置通过--cpuset 以及-m设置了资源限制),所以我们的例子中Ambari 的统计信息中,内存、cpu 在各个模拟host中是完全相同的。 现在的Docker并不适用去模拟节点,但其在部署service上具有非常大的速度优势。 Ambari 工具可以非常方便的配置管理hadoop集群,并且提供配置每个service的参数的管理界面。
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|
|