- 基于Apache Kylin构建大数据分析平台
- 蒋守壮
- 2183字
- 2021-01-07 17:48:01
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