4.2 准备工作:系统环境搭建

本节讲解系统环境搭建,以下操作均用root用户操作。

4.2.1 网络配置(CDH集群所有节点)

vi /etc/sysconfig/network修改hostname:

        NETWORKING=yes
        HOSTNAME=SZB-L0020040

提示

HOSTNAME的值要设置为每个主机自己的主机名,你可以通过执行hostname的Linux命令获取主机名或者其他方式。

通过service network restart重启网络服务生效。

在每个节点的/etc/hosts文件中加入集群的所有主机名和IP地址:

        127.0.0.1         localhost
        10.20.22.202     SZB-L0020040
        10.20.22.204     SZB-L0020041
        10.20.22.209     SZB-L0020042
        10.20.22.210     SZB-L0020043

提示

这里需要将每台机器的IP及主机名对应关系都写进去,本机的也要写进去,否则启动Agent的时候会提示hostname解析错误。

4.2.2 打通SSH,设置ssh无密码登录(所有节点)

创建主机之间的互相信任关系方式有好几种:1.第一种(假如是在root用户下面创建信任关系)

在节点(SZB-L0020040)上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对。

将公钥添加到认证文件中:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

并设置authorized_keys的访问权限:

chmod 600~/.ssh/authorized_keys

除了SZB-L0023776节点外,其他4个节点也执行上面的操作生成无密码的密钥对。

复制其他4个节点的公钥文件内容到SZB-L0020040节点的authorized_keys中。

将节点SZB-L0020040的authorized_keys复制到其他节点的/root/.ssh/下面,这样CDH集群的所有节点之间都拥有其他节点的公钥,所以每个节点之间都可以免密码登录。

具体实战操作步骤说明如下。

(1)CDH集群的所有节点都执行如下Linux命令:

ssh-keygen -t rsa

(2)将所有节点(除了SZB-L0020040节点)生成的id_rsa.pub复制到某一个节点(SZB-L0020040)并重命名:

        [root@SZB-L0020041 .ssh]# scp ~/.ssh/id_rsa.pub SZB-
    L0020040:/root/.ssh/id_rsa_41.pub
        [root@SZB-L0020042 .ssh]# scp ~/.ssh/id_rsa.pub SZB-
    L0020040:/root/.ssh/id_rsa_42.pub
        [root@SZB-L0020043 .ssh]# scp ~/.ssh/id_rsa.pub SZB-
    L0020040:/root/.ssh/id_rsa_43.pub

(3)将(2)复制过来的每个节点的id_rsa.pub内容都追加到SZB-L0020040节点的authorized_keys文件中,具体Linux命令如下:

        [root@SZB-L0020040 .ssh]# cat id_rsa_41.pub >> authorized_keys
        [root@SZB-L0020040 .ssh]# cat id_rsa_42.pub >> authorized_keys
        [root@SZB-L0020040 .ssh]# cat id_rsa_43.pub >> authorized_keys

(4)将SZB-L0023776节点的authorized_keys复制到所有节点:

        [root@SZB-L0020040 .ssh]# scp authorized_keys SZB-
    L0020041:/root/.ssh/
        [root@SZB-L0020040 .ssh]# scp authorized_keys SZB-
    L0020042:/root/.ssh/
        [root@SZB-L0020040 .ssh]# scp authorized_keys SZB-
    L0020043:/root/.ssh/

到此所有节点都可以免密码相互登录了。

2.第二种(假如是在root用户下面创建信任关系)

我们使用ssh-copy-id命令,将本节点的公钥自动复制到指定的节点的authorized_keys文件中,省去了自己手工复制公钥的过程了。

具体的操作如下:

(1)在CDH集群的每一个节点执行如下命令:

     ssh-keygen -t rsa

一路回车,生成无密码的密钥对。

(2)如果从SZB-L0020040节点免密码登录到SZB-L0020041节点,则执行如下命令:

    [root@SZB-L0020040 .ssh]# ssh-copy-id SZB-L0020041

这个命令执行后会提示输入SZB-L0020041的root用户密码。

如果从SZB-L0020041节点免密码登录到SZB-L0020040节点,则执行如下命令:

     [root@SZB-L0020041 .ssh]# ssh-copy-id SZB-L0020040

这个命令执行后会提示输入SZB-L0020040的root用户密码。

(3)测试

从SZB-L0020040登录到SZB-L0020041:

        [root@SZB-L0020040~]# ssh SZB-L0020041
        [root@SZB-L0020041~]#

从SZB-L0020041登录到SZB-L0020040:

        [root@SZB-L0020041~]# ssh SZB-L0020040
        [root@SZB-L0020040~]#

(4)其他节点采用上面的步骤进行操作,这里就省略掉了。

3.安装Oracle的Java(所有节点)

CentOS一般默认自带OpenJDK,不过运行CDH5需要使用Oracle的JDK,需要Java 7的支持。

卸载自带的OpenJdk,使用rpm -qa | grep java查询java相关的包,使用rpm -e --nodeps包名卸载。示例如下(显示openjdk版本有可能不一样):

        # rpm -qa | grep java
        java-1.6.0-openjdk-1.6.0.0-1.21.b17.el6.x86_64
        # rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.21.b17.el6.x86_64

我们可以去Oracle的官网下载JDK,这里我是直接从Cloudera上面获取,下载地址为:

        http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.7.0/RPMS/x86_64/
    oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm

执行安装操作:

    # rpm -ivh oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm

安装后的目录如下:

        # cd /usr/java/
        # ls
        jdk1.7.0_67-cloudera

创建软链接:

        # ln -s jdk1.7.0_67-cloudera latest
        # ln -s /usr/java/latest default

再次查看:

        # ls -l
        lrwxrwxrwx 1 root root   16 Apr  7 09:34 default -> /usr/java/latest
        drwxr-xr-x 8 root root 4096 Apr  8 11:09 jdk1.7.0_67-cloudera
        lrwxrwxrwx 1 root root   30 Apr  7 09:34 latest ->
    /usr/java/jdk1.7.0_67-cloudera

配置Java的环境变量,添加如下内容到/etc/profile文件的末尾:

        export JAVA_HOME=/usr/java/default
        export PATH=$JAVA_HOME/bin/:$PATH
        export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

查看目前系统的JDK版本号:

        # java -version
        java version "1.7.0_67"
        Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
        Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

4.安装配置MySQL(SZB-L0020040, SZB-L0020041)

提示

SZB-L0020040存储CM监控等元数据,SZB-L0020041存储Hive元数据。

这里只演示在SZB-L0020041部署MySQL数据库的步骤,SZB-L0020040同理。

(1)从Oracle官网上下载MySQL的安装包放到/usr/local目录下,解压缩和创建日志目录。

MySQL的安装目录根据实际情况,决定部署在什么地方。

        # pwd
        /usr/local

解压缩:

# tar -zxvf mysql-advanced-5.6.21-linux-glibc2.5-x86_64.tar.gz

设置软链接:

# ln -s mysql-advanced-5.6.21-linux-glibc2.5-x86_64 mysql

创建日志目录:

        #cd mysql
        # mkdir logs

(2)生成my.cnf配置文件。

# cp mysql/support-files/my-default.cnf /etc/my.cnf

配置my.cnf内容为:

        [mysqld]
        transaction-isolation = READ-COMMITTED
        # Disabling symbolic-links is recommended to prevent assorted
    security risks;
        # to do so, uncomment this line:
        # symbolic-links = 0
        key_buffer_size = 32M
        max_allowed_packet = 32M
        thread_stack = 256K
        thread_cache_size = 64
        query_cache_limit = 8M
        query_cache_size = 64M
        query_cache_type = 1
        max_connections = 550
        #expire_logs_days = 10
        #max_binlog_size = 100M
        #log_bin should be on a disk with enough free space. Replace
    '/var/lib/mysql/mysql_binary_log' with an appropriate path for your
    system
        #and chown the specified folder to the mysql user.
        log_bin=/usr/local/mysql/logs/mysql_binary_log
        # For MySQL version 5.1.8 or later. Comment out binlog_format for
    older versions.
        binlog_format = mixed
        read_buffer_size = 2M
        read_rnd_buffer_size = 16M
        sort_buffer_size = 8M
        join_buffer_size = 8M
        # InnoDB settings
        innodb_file_per_table = 1
        innodb_flush_log_at_trx_commit  = 2
        innodb_log_buffer_size = 64M
        innodb_buffer_pool_size = 4G
        innodb_thread_concurrency = 8
        innodb_flush_method = O_DIRECT
        innodb_log_file_size = 512M
        explicit_defaults_for_timestamp
        [mysqld_safe]
        log-error=/usr/local/mysql/logs/mysqld.log
        pid-file=/usr/local/mysql/data/mysqld.pid
        sql_mode=STRICT_ALL_TABLES

(3)正式创建数据库。

        # pwd
        /usr/local/mysql
        # scripts/mysql_install_db --user=root

(4)修改/etc/profile文件,添加MySQL环境变量。

        export MYSQL_HOME=/usr/local/mysql
        export PATH=$MYSQL_HOME/bin:$PATH

使环境变量生效:

# source /etc/profile

(5)启动数据库。

mysqld_safe --user=root &

(6)修改MySQL数据库的root密码。

        # mysqladmin -u root password 'xxxxxx'
        # mysqladmin -u root -h SZB-L0020041  password 'xxxxxx'

(7)删除test数据库和匿名用户等,尤其对于生产环境更要操作。

    # mysql_secure_installation

按照提示一步一步操作,此处略。

(8)安装MySQL的JDBC驱动。

对于MySQL 5.6版本的数据库需要5.1.26或更高版本的JDBC驱动。

下载地址:http://dev.mysql.com/downloads/connector/j/5.1.html

当然我们也可以在Linux环境下,直接使用wget下载:

        # wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-
    connector-java-5.1.38.tar.gz

解压缩:

    # tar -zxvf mysql-connector-java-5.1.38.tar.gz

将JDBC驱动复制到指定的位置:

        # cp mysql-connector-java-5.1.38/mysql-connector-java-5.1.38-bin.jar
    /usr/share/java/mysql-connector-java.jar

(9)为CM管理的各个组件创建对应的数据库、用户等,如表4-3所示。

表4-3

创建metastore数据库和用户,其他用户类似:

        mysql> create database metastore DEFAULT CHARACTER SET latin1;
        mysql> grant all on metastore.* TO 'hive'@'%' IDENTIFIED BY 'xxxxxx';
        mysql> flush privileges;

具体详细信息请参考MySQL官方配置文档:

        http://www.cloudera.com/documentation/enterprise/latest/topics/cm_ig_
    mysql.html? scroll=cmig_topic_5_5_2_unique_1

5.关闭防火墙和SELinux

提示

需要在所有的节点上执行,因为涉及的端口太多了,临时关闭防火墙是为了安装起来更方便,安装完毕后可以根据需要设置防火墙策略,保证集群安全。

关闭防火墙:

      service iptables stop(临时关闭)
      chkconfig iptables off(重启后生效)

关闭SELINUX:

setenforce 0(临时生效)

修改 /etc/selinux/config下的SELINUX=disabled(重启后永久生效)。

6.所有节点配置NTP服务

要求CDH集群的每个节点时间保持同步,请配置集群的NTP服务。

7.配置操作系统内核参数

(1)参数1:kernel.mm.redhat_transparent_hugepage.defrag

该参数默认值为always,这可能带来CPU利用率过高的问题,需要将其设置为never,使用如下的linux命令:

# echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

为了保证重启生效,可以把这个命令写到/etc/rc.local文件中,保证每次开机都能调用。

(2)参数2:vm.swappiness

该参数默认值为60,这里将其设置为0,让操作系统尽可能不使用交互分区,有助于提高集群的性能。将该配置参数写入配置文件/etc/sysctl.conf,可以执行下面的命令:

# echo "vm.swappiness = 0" >> /etc/sysctl.conf

运行如下命令使配置参数生效:

# sysctl -p