0.
最近有球友反映在部署我的大数据项目时,被直接卡在了第一步的集群部署上了,而具体的卡点,竟然是HDP安装包的本地源问题。
确实,对于一个如果Linux基础比较一般的同学来说呢,这个步骤还是有那么点点难度的(我当年第一次接触也是花了很多时间),而我提供的那份部署文档中,在这块确实没有说清楚。
关于这部分内容,是很多年前团队的一个同事写的,然后去年又被一个群里的小伙伴整理过,可能经过这么来回几次倒腾,部署步骤没有那么严谨了,导致很多同学都栽了跟头。
那么今天这篇文章,我准备系统性、细致性地给大家聊一下这个本地源部署的必要性、部署过程和部署原理。
1. 本地源的必要性
对于很多公司或者项目来说,一般情况下服务器是无法直接上外网的,或者对于一些国外的软件,服务器即便有外网,也会因为网速受限或者因为“墙”的缘故,而无法顺畅的下载我们想要的安装包。
该怎么办?最好的办法就是部署公司内部的本地源环境。
说到本地源呢,其种类其实有很多,比较让大家熟知的本地源种类有如下3种:
1. 提供Linux操作系统下载安装的各种rpm软件包源,可直接通过yum的方式从本地仓库进行下载安装;
2. 提供软件工程项目中需要用到的第三方依赖软件包,比如大数据开发过程中需要引入的第三方jar包依赖,一般我们可以通过创建nexus的私服来提供本地源,通过maven来下载;
3. 如果项目用到docker,需要频繁下载镜像文件,还可以创建本地的docker仓库来构建基于docker镜像的本地源。
以上3种,是我认为在目前的软件研发项目中用得最多的,本地源能够解决的两大痛点问题:一个是网络限制;另一个就是下载效率。
而今天我们要聊的,是第1种,以下部署环境在CentOS7.x_X86-64进行。
1. 部署过程及原理说明
本地源的玩法,其实就是一个典型的C/S架构,C(client)就是每一台需要下载软件包的客户端(服务器),只需要通过配置yum的地址就可以实现,这一步,没难度。
而S(server)则是部署本地源的服务器,我们把需要安装的各种rpm包,给扔到这台机器,然后给他创建一个用于本地源管理的索引,再配上个http服务,就搞定了。
而我们所谓的部署,其实指的是本地源server的部署,既然上面提到了需要创建本地源管理的索引,那么第一步,自然就是要安装这个管理的工具。
1.1 安装本地源管理工具
既然要创建一个软件仓库,那么就需要对这个仓库的内容进行管理,否则的话,客户端在需要安装哪个软件的时候,它就不知道往哪找,这个就有点类似我们对数据库的数据创建索引是一个道理。
有了这个索引,客户端在想要安装任何一个仓库中的软件,都可以非常高效地找到。
具体部署方式,在命令行用yum安装:
yum insatall -y createrepo (用root用户,或者sudo权限)
当然,如果你的服务器没有外网,那就稍微麻烦一点,需要把这个rpm包手动下载下来,然后给传到你的服务器中,可以到这个地址进行手动下载:

下载之后,用命令安装:rpm -ivh createrepo-*.
安装之后,不需要启动任何服务,因为它只是一个命令,后续会用上。
PS:对于有的系统来说,如果你当初的系统安装选择的是最大化安装,可能这个软件本身就有。
1.2 安装http服务
管理仓库的工具有了,那么如何将仓库里的软件包传递出去,便是http这个传输协议要干的事情了,所以要部署http服务。
具体做法,在命令行下载httpd:
yum install -y httpd (用root用户,或者sudo权限)
同样,如果你服务器没有外网,下面这个截图是你通过windows机器下载的途径:

因为http是个服务,因此需要手动开启该服务。
执行命令:systemctl enable httpd; systemctl start httpd.
开启这服务之后呢,因为我们没有修改任何关于这个服务的配置,因此就只能用它的默认配置方式,当然,如果你愿意,你是可以对它的配置进行修改的。
配置文件位置: /etc/httpd/conf/httpd.conf
对于这个http服务来说,有两处可能值得你注意的地方,一个是服务端口:

另一个则是,服务的路径,也就是你要放置软件包的位置:

一般情况下来说,是不需要修改的,就这么地吧。
那为了验证这一步部署成功,可以打开你的浏览器,输入当前http服务器的ip地址(不用加端口,默认就是80端口),看能否有如下画面:

如果没有,可能是服务器的防火墙没有关,关上再试试。
1.3 放置安装包
前面的两个准备工作做好了,接下来就是放置软件包了,刚才看到http服务的默认配置中,服务的目录为:/var/www/html。
那么我们就把这个软件包给放到这个目录下,那具体怎么放呢,先来看下我给你们提供的软件包:

对于一般的同学来说,下载我框出来的这4个就可以了。
这4个软件包,代表了在部署HDP时不同的4个模块,把他们下载下来之后,放到/var/www/html目录下,然后逐个解压:
运行解压命令:tar -zxvf xxxxx.tar.gz
解压后,把原来的.tar.gz压缩包给删除,或者移走,然后看到下面这样一个目录结构:

有同学可能会好奇,不是4个压缩包吗?为什么有5个文件夹。
因为,最后一个文件夹OS-RPM是我自己额外加进去的(你也可以忽略),是CentOS7的操作系统相关的所有RPM包,放到这里的目的在于:
如果在安装HDP过程中,需要依赖一些OS的基础包(我之前用的最小化安装),这个就能派上用场了,就能顺带从这个源里把依赖包也给安装了,如果你不喜欢这么玩,也可以不用。
1.4 创建仓库索引
接下来,就需要在当前目录下创建一个本地源仓库的索引,目的在于,当我的http路径指向这里的时候,是可以识别到当前路径下的所有软件包资源的。
创建命令为:
createrepo . (注意,需要cd到当前目录下,注意命令后面有个.号,代表当前目录)
然后你会看到创建好索引的目录结构为:

此时,多了一个repodata目录,该目录就记录了当前目录下所有的软件信息,提供客户端下载软件时的索引服务。
这样一来,其实本地源就已经做好了,但是呢,为了让这个URL更优雅,我建议你再向上包一层目录。
现在这些文件夹不是在系统的/var/www/html目录下吗,可以像我一样,再添加一个子目录,比如我的目录结构是这样的:


配置好之后,在任何一台客户端机器上运行yum安装命令测试一下,看是否能读取到源信息:

以上就是整个本地源的部署过程。
2.
本地源的部署,其实是一个很基础的Linux能力,很多开发人员可能在工作中压根就不会涉及到。
因此第一次部署,会觉得很难,有的同学会觉得这个HDP部署也太复杂了吧,但这个不是HDP的锅,任何大数据平台想要高效部署,都要建立本地源。
而这一步,我希望你能玩会。
