Cloudera Hadoop大数据平台实战指南
上QQ阅读APP看书,第一时间看更新

3.1 安装前的准备工作

Cloudera大数据平台默认采用在线自动化安装的方式,这给不能连接互联网或者网络不畅的用户带来了不便,很多时候是由于网络问题导致安装失败。所以这里我们采用离线安装Cloudera Hadoop集群的方法。

所需软件列表如表3-1所示。

表3-1 离线安装Cloudera Hadoop集群所需软件列表

但是CDH比Apache Hadoop对硬件的要求更高,如果节点分配内存太少,就很容易导致安装失败或服务无缘无故停止。哪怕只是做测试,也建议将主节点分配8GB以上的内存、从节点分配5GB内存。

本次部署的Hadoop测试环境是三个节点的CDH集群,node0是主节点、node1和node2是从节点,群集中的节点承担的角色如表3-2所示,这些角色在本书后续章节都会有详细阐述。

表3-2 群集中的节点承担的角色


(1)下载介质软件

Cloudera Manager的介质下载地址为http://archive-primary.cloudera.com/cm5/cm/5/,节点的Linux操作系统是Centos 6.5,CM版本选择的是5.11.2,所以选择cloudera-manager-el6-cm5.11.2_x86_64.tar.gz,如图3-1所示。Hadoop生态系统需要的所有组件都是通过Cloudera Manager统一管理和安装的。

图3-1

CDH(Cloudera的Hadoop发行版)介质的下载地址是http://archive-primary.cloudera.com/cdh5/parcels/,这里选择5.11.2版本。下载的CDH安装包一定要和CM包匹配。CDH软件包以.parcel结尾,相当于压缩包格式,这里要下载三个文件(包括manifest.json),特别注意要将下载.sha1文件后缀更改为.sha,如图3-2所示。

图3-2

将下载的CDH、CM、mysql 5.6 rpm包、mysql jdbc驱动、Oracle Java SDK 1.7上传到群集主节点机器上的/opt目录下,安装过程中就不需要从互联网上下载文件了,实现了离线安装。

(2)安装Oracle 1.7 JDK

CDH的运行依赖JDK的运行环境。所以在安装CDH之前一定要先安装Oracle 1.7 JDK。通过rpm -qa | grep jdk命令来查询系统是否已经安装自带的openjdk的RPM包,如果有,请使用rpm -e--nodeps把它卸载,然后使用rpm -ivh /opt/oracle-j2sdk1.7-x86_64.rpm命令来安装Oracle 1.7 JDK的RPM包。

还要记得修改vi /etc/profile,添加以下内容:

    export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
    export PATH=.:$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存并退出vi编辑后,执行source /etc/profile使之生效。

(3)关闭SELinux

SELinux是一种安全子系统,它能控制程序只访问特定文件,但是在多数情况下我们还是要将其关闭,因为在不了解其机制的情况下,使用SELinux会导致软件安装或者应用部署失败。所有节点都要关闭SELinux,通过修改gedit /etc/selinux/config下的SELINUX=disabled(重启后永久生效)完成。

(4)设置主机hosts文件,调整系统参数,关闭防火墙,禁用透明大页,调整swap和文件句柄,安装Oracle JDK,添加环境变量。

编辑配置hosts文件,规划中的每一台机器都要配置集群中所有机器的IP和主机名称的对应关系。通过vi命令,编辑/etc/hosts内容如下:


·10.10.75.100 node0

·10.10.75.101 node1

·10.10.75.102 node2


(5)关闭防火墙

我们要搭建集群,集群之间就会有通信,服务器之间要是有通信,就要有相应的防火墙策略开放,因此我们要将防火墙关闭,操作命令如下:

    service iptables stop
    service iptables off
    chkconfig iptables off

(6)调整Linux系统参数

修改swappiness=0,最大限度使用物理内存,然后才是swap交换分区,命令如下:

    echo 0 >/proc/sys/vm/swappiness
    echo "vm.swappiness=0" >> /etc/sysctl.conf
    echo "echo 0 > /proc/sys/vm/swappiness" >>/etc/rc.d/rc.local
    cat /proc/sys/vm/swappiness

禁用hugepage透明大页,因为它可能会带来CPU利用过高的问题。将这个参数设置为nerver,为了保证重启生效,要把命令写到/etc/rc.local中,命令如下:

        echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
    >>/etc/rc.d/rc.local
        echo "echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag"
    >>/etc/rc.d/rc.local

修改Linux最大文件句柄数(默认Linux最大文件句柄数为1024),命令如下:

    echo "* soft nofile 128000" >> /etc/security/limits.conf
    echo "* hard nofile 128000" >> /etc/security/limits.conf
    echo "* soft nproc 128000" >> /etc/security/limits.conf
    echo "* hard nproc 128000" >> /etc/security/limits.conf
    sed -i 's/1024/unlimited/' /etc/security/limits.d/90-nproc.conf
    ulimit -SHn 128000
    ulimit -SHu 128000

(7)配置时间同步

在所有要安装CDH环境的设备中需要设置统一时钟同步服务。如果我们有NTP时间同步器,那么我们需要在每一台设备上进行NTP客户端配置。如果没有,我们就将其中一台主机作为NTP时间同步服务器,对这台主机进行NTP服务器配置。其他服务器来同步这台服务器的时钟(修改NTP配置文件/etc/ntp.conf,指向企业自己的时间同步服务器IP地址)。

关于如何部署NTP时间同步服务器,可参阅作者的博客文章http://blog.51cto.com/lihuansong/2172270

(8)SSH免密码登录

为什么要设置SSH免密码登录?其原因是在开启Hadoop的时候需要多次输入yes和root密码,这是我们所不能忍受的,迫切需要实现免登录的功能。

对于集群间免密的设置很简单,只要知道原理就好做了。分别在每台机器上配置本地免密登录,然后将其余的每台机器生成的公钥内容追加到其中一台主机的authorized_keys中,再将这台机器中包括每台机器公钥的authorized_keys文件发送到集群中所有的服务器,这样集群中每台服务器就都拥有所有服务器的公钥了,集群间任意两台机器都可以实现免密登录。关于如何配置SSH免密码登录,可参阅作者的博客文章http://blog.51cto.com/lihuansong/2172326

(9)安装HTTP服务

CM的管理界面是Web访问方式,在主节点上安装并启动HTTP服务,命令如下:

    yum install httpd
    chkconfig httpd on
    service httpd start

(10)安装MySQL数据库

CM的元数据需要存储在数据库中。CM支持MySQL、PostgreSQL、Oracle等数据库,通常我们会使用MySQL数据库(MySQL的版本建议为5.6以上)。关于如何安装MySQL,可参阅作者的博客文章http://blog.51cto.com/lihuansong/2172326

安装好MySQL,在MySQL客户端执行命令mysql -uroot -p,输入密码,在MySQL中创建相关数据库,命令如下:

    create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database sentry DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database scm DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database monitor DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database metastore DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

(11)在主节点node0上操作,解压CM,准备Parcels

操作命令如下:

    tar xzvf /opt/cloudera-manager-el6-cm5.11.2_x86_64.tar.gz  -C /opt
    cp /opt/CDH-5.11.2-1.cdh5.11.2.p0.4-el6.parcel
/opt/cloudera/parcel-repo/
    cp /opt/CDH-5.11.2-1.cdh5.11.2.p0.4-el6.parcel.sha
/opt/cloudera/parcel-repo/
    cp /opt/manifest.json  /opt/cloudera/parcel-repo/

(12)修改config.ini,同步agent到所有节点

通过vi编辑/opt/cm-5.11.2/etc/cloudera-scm-agent/config.ini,把其中的server_host值改为主节点的主机名,这里主节点是node0,如图3-3所示。

图3-3

然后把config.ini同步到其他节点,命令如下:

    scp -r /opt/cm-5.11.2 root@node1:/opt/
    scp -r /opt/cm-5.11.2 root@node2:/opt/

(13)所有节点都建立cloudera-scm用户

命令如下:

    useradd --system --home=/opt/cm-5.11.2/run/cloudera-scm-server/ --no-
create-home --shell=/bin/false --comment  "Cloudera SCM User" cloudera-scm

(14)主节点上初始化配置数据库

CM Server的主要数据库为scm,里面包含了服务的配置信息,每一次配置的更改都会把当前页面的所有配置内容添加到数据库中,以保存配置修改历史。

初始化配置数据库scm的命令如下:

    /opt/cm-5.11.2/share/cmf/schema/scm_prepare_database.sh mysql cm
-hlocalhost -uroot -proot123 --scm-host localhost scm scm scm

(15)启动CM服务和CM Agent

主节点上启动CM Server和Agent,命令如下:

    /opt/cm-5.11.2/etc/init.d/cloudera-scm-server start
    /opt/cm-5.11.2/etc/init.d/cloudera-scm-agent start

所有从节点启动Agent,命令如下:

    /opt/cm-5.11.2/etc/init.d/cloudera-scm-agent start