前言


搭建小型BI大数据计算集群,由于资源有限(你懂的)部署的模式为CDH官方建议的最低配版本,没有配备HA。

CDH背景

CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。

系统环境

Master * 1: 128G + 16C + 1T

Slave * 9:64G + 16C + 1T

Cloudera Manager:5.12.1

CDH: 5.12.1

安装说明

官方参考文档:

https://www.cloudera.com/documentation/enterprise/latest/topics/installation.html

官方共给出了3种安装方式:

方法一:必须要求所有机器都能连网,由于各种国外的网站被墙的厉害,尝试了几次各种超时错误,耽误时间不说,一旦失败,重装非常痛苦。

方法二:下载很多包,不方便容易迷路。

方法三:对系统侵入性最小,可实现全离线安装,而且重装非常方便。后期的集群统一包升级也非常好。(本篇采用该方法安装)

相关包的下载地址

Cloudera Manager下载地址:

http://archive.cloudera.com/cm5/cm/5/cloudera-manager-el6-cm5.12.1_x86_64.tar.gz

CDH安装包地址:http://archive.cloudera.com/cdh5/parcels/latest/,由于我们的操作系统为CentOS6.5,需要下载以下文件:

CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el6.pacel.sha1
manifest.json

1567936410

manifest.json下载方法如下图所示

1567936451

准备工作(系统环境准备)##


建议:以下所有操作均在root下完成,否侧,出现错误,10个有9个都是目录权限问题,根据log查错即可。

1.网络配置(所有节点)
vi /etc/sysconfig/network修改hostname:

1567936508

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

因为节点太多逐一修改需要很多时间,所以我们用scp推给其他节点,这样既保证了效率,又保证了准确。(当然节点更多的时候我们可以通过shell脚本来帮助我们完成这些工作)

1567936547

2.打通SSH,设置ssh无密登陆(所有节点)
(1)进入到我的home目录

cd ~/.ssh

(2)生成公钥和私钥:

ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到要免密登录的目标机器上(别忘了copy给本机一份噢)

ssh-copy-id dt013190
ssh-copy-id dt013191

ssh-copy-id dt013199

最后通过ssh ip 命令可以登录到其他服务节点及视为成功。(提示:退出使用 exit 命令)

3.安装Java(所有节点)
通过阅读官方文档我们可以发现如下信息

1567936615

所以首先卸载自带的OpenJdk,有些linux会默认自带较低版本的jdk如Centos。

使用命令rpm -qa | grep java查询java相关的包,命令rpm -e –nodeps包名并卸载它们,如果什么都没有则没有默认安装的jdk,直接进行下一步即可。

去Oracle的官网下载jdk的rpm安装包,并使用rpm -ivh 包名安装之。

这里不建议使用最新版本的jdk,因为oracle官网更新的jdk版本要高于CDH官方推荐的最高版本,会出现兼容性警告。

1567936639

这里我们选择小版本121的rpm安装包进行安装。

选择rpm软件包的安装方式好处有二。

第一:rpm安装的默认路径即是CDH安装时会去寻找jdk的路径,否则在CM的安装中会报错。

(如果用tar包手动的方式安装可以创建软连接 进入/usr/java目录[没有就手动创建之]:ln -s你的jdk安装目录 /usr/java/default,运用此方法别忘记手动配置环境变量)

第二:rpm安装会自动创建环境变量。

将我们下载好的软件包上传至其中一台节点

1567936680

使用rpm -ivh 包名 安装之

1567936929

由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可
由于是rpm包并不需要我们来配置环境变量,我们只需要配置一个全局的JAVA_HOME变量即可
最后执行命令java -version出现如下画面即安装成功

1567936808

最后,重复如上动作,给剩余其他节点都安装好jdk。

(温馨提示:在安装CDH的过程中每做完一步就检测一次,任何一步出错或者疏忽都有可能导致集群安装不成功,别问我是怎么知道的 -.-)

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

关闭防火墙(重启生效)(所有节点)

chkconfig iptables off

1567936872

关闭SELinux(重启生效)(所有节点)

(SELinux主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则))

vi /etc/selinux/config
SELINUX=disabled

1567936900

重启后使用如下命令检查一下:
sestatus -v
123

出现disable即为成功

5.设置用户最大可打开文件数,进程数,内存占用
使用命令:ulimit -a,查看当前系统的配置的上限,unlimited为无上限,如图

1567936955

修改参数 (重启生效)(所有节点)

vi /etc/security/limits.conf

1567936979

(提示:*代表所有用户,@表示对某个用户组生效,直接写用户名表示对某个用户生效)

6.配置NTP时间同步服务
(提示:这一步暂时可以跳过,但是在集群启动以后,会提示时间不同步。集群中所有主机必须保持时间同步,如果时间相差较大会引起各种问题。)

6.1 安装NTP(每个节点):

yum install ntp

1567937122
根据提示输入Y后待到出现Complete!字样则表示为成功 。

6.2 配置NTP

先将原有的ntp.conf配置文件进行备份 cp /etc/ntp.conf /etc/ntp.conf.backup(所有节点)

修改ntp.conf文件如下

vi /etc/ntp.conf

master配置:

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0
fudge 127.127.1.0 stratum 10
slave配置:
server master(此处为master节点的hostname)

执行命令(所有节点)

设置开机启动:

chkconfig ntpd on

启动ntp:

service ntpd start

检查是否设置成功:chkconfig –list ntpd 其中2-5为on状态就代表成功。

1567937209

7.设置swap空间
(Cloudera建议将交换空间设置为0,过多的交换空间会引起GC耗时的激增,所以还是关闭的为好。)

执行命令 (所有节点)

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

8.关闭大页面压缩
执行命令 (所有节点)

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

9.安装mysql
9.1 创建系统需要用到的一些目录

安装文件下载目录:/opt/software/mysql

数据库保存位置:/data/mysql

日志保存位置:/data/log/mysql

9.2下载mysql

官网:http://dev.mysql.com/downloads/mysql/

我选择的是如下版本(具体不同版本的兼容与支持可查询官网,在此不再赘述)

1567937283

上传tar包到我们建好的安装目录下

1567937304

解压缩到/usr/local/ 目录下

tar -zxvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

然后改名 mv mysql-5.7.13XXXXXX mysql

9.3创建mysql用户用户组及目录

groupadd mysql
useradd -r -s /sbin/nologin -g mysql mysql -d
/usr/local/mysql

该用户禁止shell登录,同时修改用户目录权限

cd /usr/local/mysql# chown -R mysql .# chgrp -R mysql .
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /data/log/

1567937362

1567937368

9.4初始化MYSQL

./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

部分人的linux系统会出现如下错误

1567937404
这是因为缺少安装包libaio和libaio-devel导致的不用紧张yum来帮忙

yum install libaio*

1567937432

Complete!成功

再次执行初始化命令

1567937456

出现上述即为成功,记得把初始化的密码copy下来噢

然后再执行命令

./bin/mysql_ssl_rsa_setup  --datadir=/data/mysql

成功如下

1567937489

9.5修改系统配置文件

进入support-files目录

1567937507

执行命令:

cp my-default.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysql

修改以下内容:

vi /etc/init.d/mysql

1567937531

vi /etc/my.cnf

修改内容修改为如下:

[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysql]
no-auto-rehash
default-character-set=utf8
[mysqld]
socket = /usr/local/mysql/mysql.sock
basedir = /usr/local/mysql
max_allowed_packet = 64M
datadir = /data/mysql
explicit_defaults_for_timestamp = true
skip-ssl
secure-file-priv = NULL
lower_case_table_names = 1
back_log = 300
max_connections = 3000
max_connect_errors = 100
table_open_cache = 4096
external-locking = FALSE
max_allowed_packet = 64M
sort_buffer_size = 32M
join_buffer_size = 32M
thread_cache_size = 16
query_cache_size = 128M
query_cache_limit = 4M
thread_stack = 512K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 128M
max_heap_table_size = 128M
character-set-server=utf8
long_query_time = 6
slow_query_log_file = /data/log/mysql/slow.log
[mysqld_safe]
open-files-limit = 8192
log-error=/data/log/mysql/mysql_3306.err
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

9.6运行mysql

./bin/mysqld_safe --user=mysql &

1567937718

./bin/mysql --user=root -p

1567937738

输入9.4步我们copy下来的密码 回车

1567937754

依次输入以下命令:

mysql> set password=password('123123');--修改密码
mysql> grant all privileges on *.* to [email protected]'%' identified by '123123';--允许远程访问
mysql> flush privileges;--刷新授权表

创建CM用的数据库:

–hive数据库

create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci ;

–集群监控数据库

create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci ;

–hue数据库

create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

– oozie数据库

create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

1567937805

至此mysql数据库的安装就算完成了,但是为了方便使用,接下来我们给它配置环境变量以及开机启动。

9.7配置环境变量

vi /etc/profile

添加:export PATH=/usr/local/mysql/bin:$PATH

1567937836

执行命令

source /etc/profile

9.8配置开机启动

chmod 755 /etc/init.d/mysql
chkconfig --add mysql --将MySQL添加为受chkconfig管理的服务
chkconfig --level 345 mysql on --在级别3和5上设定服务为”on”

1567937859

至此mysql安装完毕,我们的环境也基本配置完毕,接下来让我们正式开工!

安装Cloudera Manager Server和 Agent

将我们下载好的安装包上传至服务器并解压安装

主节点解压安装
cloudera manager的目录默认在/opt下,cdh5的源会默认在/opt/cloudera/parcel-repo寻找,所以不能解压到其他地方,使用命令

tar xzvf cloudera-manager*.tar.gz

CM可以按照个人喜好安装,我这里都安装在了/opt下以方便管理

1567937885

移动文件

mv cloudera /opt/
mv cm-5.12.1 /opt/

这里开始我们的cm需要与mysql进行交互,所以首先需要去MySql的官网下载JDBC驱动,http://dev.mysql.com/downloads/connector/j/,解压后找到mysql-connector-java-5.1.**-bin.jar,放到/opt/cm-5.12.1/share/cmf/lib/中,不多赘述。

在主节点初始化CM5的数据库:

/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -hlocalhost -uroot -p123123 –scm-host localhost scm scm scm

1567937926

Agent配置

修改/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的server_host为主节点的主机名。

1567937945

同步Agent到其他节点

scp…

在所有节点创建cloudera-scm用户

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

准备Parcels,用以安装CDH5

将我们提前下载好的Parcels文件上传到主节点的/opt/cloudera/parcel-repo/目录中(如果没有parcel-repo需要手动创建,这里不需要分发到所有节点)。

1567937972

注意!!最后一定要将CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel.sha1,重命名为CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel.sha,去掉末尾的1,否则系统会重新下载CDH-5.12.1-1.cdh5.12.1.p0.3-el6.parcel文件,也就不是纯离线安装了。_

相关启动脚本

通过/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start启动服务端。

通过/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start启动Agent服务(所有Agent节点)。

以上我们是通过脚本来启动的,所以需要停止服务的时候,只需要把以上的start参数改为stop就可以啦。

service服务启动需要几分钟,取决于服务器的性能,此时我们可以使用
netstat -apn|grep 7180

查询端口被占用后,就可以用浏览器打开http://masterIP:7180/进行访问了,登录用户名与密码分别为admin。

1567937999

至此基本上CM的安装己经完成,接下来就可以通过WEB界面进行安装CDH了!

安装CDH

勾选是后继续

1567938017

这里我们选择免费版本后继续

312

继续

231

各个Agent节点正常启动后,可以在当前管理的主机列表中看到对应的节点。选择要安装的节点,这里我选择全部节点,继续。

41

出现以下版本的包,说明本地Parcel包配置无误,直接点继续。

1567938091

如果配置本地Parcel包无误,那么已下载是瞬间就完成的,因为不需要下载,然后耐心等待分配过程就行了,速度由内网网速决定。完成后点击继续。

1567938091

接下来是服务器检查,如果前面严格按照步骤一步步做下来这里应该是不会出现任何问题的,全绿通过。点击完成。

312321

接下来是选择安装服务,根据需要按需选择就好,点击继续

51

服务配置,一般情况下保持默认就可以了,也可以自己手动根据节点情况进行分配,点击继续

15

接下来是数据库的设置,部分系统会通过测试,有的则像我一样

16

错误原因:

hue要存元数据库,CM的服务端是用Java编写的,而CM的客户端是Python编写的,这里测试连接时是用Python去连接数据库。

掏出准备好的安装包 , rpm之

17

再次点击测试连接,成功,点击继续

18

下面是集群设置的审查页面,保持默认就可以,因为后面还需要更多详细的改动,不建议这里完成,我们首要的任务是先将集群建立起来。所以点击继续。

19

开始安装各个服务,安装Hive的时候可能会报错,因为我们使用了MySql作为hive的元数据存储,hive默认并没有带mysql的驱动,拷贝一个就行了:
cp mysql-connector-java-5.1.46-bin.jar /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib/

这时hive通过了oozie会出现错误,错误原理与hive雷同,通过观察日志我们发现oozie会去一个默认路径下copy mysql的驱动,所以cp一个驱动过去即可,记得驱动的名称改成日志中需要的格式,否则依旧审核不通过,这点很重要。

21

全部绿色通过,然后点击继续。

12

到此为止CDH集群就算部署完毕了

14

部分linux系统会因为缺少hue的相关依赖而启动不了hue的某些进程(这个东西最矫情)具体根据自己系统的情况去安装即可。