导读
这篇文章是关于使用CDH搭建Hadoop集群的第一步:配置package仓库。本文主要参考Cloudera官方文档。
在进行这一步之前,应该进行充分的前期准备。关于前期准备工作的相关内容请参考文章:
开始配置package仓库
使用package management tools(RHEL-yum)安装Cloudera Manager。Cloudera主张联网(Internet-accessible)安装。可以创建自己的内部仓库在不联网的情况下安装。
可以创建永久的或临时的package仓库。这里只介绍如何创建永久的package仓库。
1安装web server
如果组织内已经有了web server,可以看到仓库目录包含路径RPMs和repodata/。那么可以使用已有的web server。没有的话就安装Install Apache HTTP Server。
检测是否安装了:
Apache HTTP Server:httpd -v(显示安装的版本信息及建立环境)
安装Apache HTTP Server:
sudo yum install httpd
也许你会遇到,在Centos 7在执行这个命令报错,信息如下
[root@localhost ~]# sudo yum install httpd
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"
One of the configured repositories failed (未知),
and yum doesn't have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work "fix" this:
1. Contact the upstream for the repository and get them to fix the problem.
2. Reconfigure the baseurl/etc. for the repository, to point to a working
upstream. This is most often useful if you are using a newer
distribution release than is supported by the repository (and the
packages for the previous distribution release still work).
3. Run the command with the repository temporarily disabled
yum --disablerepo= ...
4. Disable the repository permanently, so yum won't use it by default. Yum
will then just ignore the repository until you permanently enable it
again or use --enablerepo for temporary usage:
yum-config-manager --disable
or
subscription-manager repos --disable=
5. Configure the failing repository to be skipped, if it is unavailable.
Note that yum will try to contact the repo. when it runs most commands,
so will have to try and fail each time (and thus. yum will be be much
slower). If it is a very temporary problem though, this is often a nice
compromise:
yum-config-manager --save --setopt=.skip_if_unavailable=true
Cannot find a valid baseurl for repo: base/7/x86_64
解决办法
这是没有联网或DNS没有配置造成的。
开启Apache HTTPD:
sudo service httpd start
2下载发行的库文件(Publishing Repository Files)
下载,官网文档罗列了各种命令,但是不联网的话根本无法使用,因此先将文件下载下来。
对于CDH6的下载也差不多:
另外,CDH6还有Index of gplextras6/6.0.0/redhat7/yum,下载他
推荐使用parcel包来安装,所以建议下载parcel包。
注意
对于下载的文件如果提供了SHA256文件,那么最好还是验证一下。Windows系统下的验证方法是,在命令提示符下使用:
certutil -hashfile filepath SHA256
其中filepath是下载的文件全路径,这个命令其实是生成文件的SHA256哈希码。然后拿获得的哈希码和网站提供的哈希码对比,如果一样的话文件就没有问题。
例如文件E:\CDH-6.0.0-1.cdh6.0.0.p0.537114-el7.parcel
使用命令:certutil -hashfile E:\CDH-6.0.0-1.cdh6.0.0.p0.537114-el7.parcel SHA256
执行结果如下:
3移动以下载文件到web server目录并修改文件权限访问http:///cloudera-repos/,看是否有索引目录。
因为安装cm6的机器没有联网,所以也就没用那台机器下载,使用了一台windows系统的机器下载文件,下载完使用winscp将其传到指定文件夹。
使用winscp登录机器,找不到/var/www/html/cloudera-repos,如下图:
没有/var/www/html/cloudera-repos那么就创建它。
创建/var/www/html/cloudera-repos目录。
同样的/var/www/html/cloudera-repos/cm6,/var/www/html/cloudera-repos/cdh6
/var/www/html/cloudera-repos/gplextras6
这些目录都不存在,那么也创建他们。
建好了上述目录后,将文件考入其中:
然后为了防止修改这个文件夹下的文件,那么修改路径权限:
sudo chmod -R ugo+rX /var/www/html/cloudera-repos/cm6
命令备注:
u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
上面的步骤完成以后,访问http:///cloudera-repos/,但可能无法成功。查找原因并解决:
使用ps -e |grep httpd查看是否有httpd进程。
没有httpd进程就重启:systemctl restart httpd.service
确保关闭并禁用防火墙。
这样就可以看到文件了
注意
上面的文件夹示例是不规范的,虽然官网给出了下载Cloudera Manager 6.0和CDH 6的方式,但那都是Linux命令,如果要在Windows系统中下载,那么有些文件直接点击就会弹出下载框,有些则不行,要右键点中文件,选择从链接另存为的方式才可以将文件保存下来。
特别要注意的是:尽量按照原网站的目录结构放置文件,尤其是对初次安装CDH和对Linux不是很熟悉的同学。
例如结构如下:
其中repodata中的文件为:
x86_64中的文件为
值得注意的是yum文件夹下还包括两个文件没有在上述目录结构中展示出来:
4修改客户端使用内部仓库
在集群的每个主机上创建一个/etc/yum.repos.d/cloudera-repo.repo文件。其中是主机名
内容如下:
[cloudera-manager]
name=Cloudera Manager 6.0.0
baseurl=http://192.168.107.83/cm6/6.0.0/redhat7/yum/
gpgkey=http://192.168.107.83/cm6/6.0.0/redhat7/yum/RPM-GPG-KEY-cloudera
gpgcheck=1
enabled=1
autorefresh=0
type=rpm-md
priority=1
注:
[cloudera-repo]:这是仓库的ID
name:仓库的名称或描述
Baseurl:仓库的地址,可以是http、https、ftp、基于本地的file://,特别应注意的是此地址目录下必须要有repodata目录。
enabled:是否启用此仓库
gpgcheck:是否检测来源合法性
priority:yum源的优先级,由 1 ~ 99 的 99 个数表示,1是最高级。
使用命令,测试是否一切都是可用的,看看软件包是否可找到:
列出所有软件包:yum list all
列出所有可用软件包:yum list available
查找指定软件包:yum search
例如:
服务下有文件oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm,那么使用命令:
yum search oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm
但是无法找到:
使用命令:yum list available,列出所有可用软件包:
明显是有上述那个软件包的,不过包名不等于文件名!!
使用命令:
yum search oracle-j2sdk1.8
可以找到oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm
甚至使用:
yum search oracle-j2sdk
都可以找到oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm
不过要注意yum search oracle-j2sdk能够唯一代表oracle-j2sdk1.8-1.8.0+update141-1.x86_64.rpm
注意
如果有默认的yum源,那么修改配置文件,使之失效,设置enabled=0
即失效。
例如,在我的Centos 7系统上,有如下默认的yum源配置:
此外,在使用内部包时,有时会报如下信息:
刷新服务器端:yum clean all && yum check-update
更新:yum update
5下载cloudera-manager.repo文件放在/etc/yum.repos.d/目录下。
使用Cloudera repository可直接放在文件夹下,如果是内部库的话,要修改baseurl为内部地址。
查看https://www.cloudera.com/documentation/enterprise/release-notes/topics/cm_vd.html找到Repo File的url。
命令:sudo wget -P /etc/yum.repos.d/
6导入签名GPG key
sudo rpm --import https://archive.cloudera.com/cdh5/redhat/7/x86_64/cdh/RPM-GPG-KEY-cloudera