1 说明
该操作书适用于 CDH6.X+CentOS7.X。
2 准备
◎CDH安装包
◎操作系统
i)完成安装;
ii)完成搭建CentOS操作系统yum源,详见其他参考文档;
◎数据库
Mysql数据库已完成安装,详见其他参考文档;
说明:以下操作都是在root用户下进行的。
3 环境准备
3.1 服务器规划
IP | hostname | 角色 |
---|---|---|
10.19.151.141 | cdhcluster-node-141 | clouder-manager |
10.19.151.142 | cdhcluster-node-142 | |
10.19.151.143 | cdhcluster-node-143 | |
10.19.151.144 | cdhcluster-node-144 |
以四台机器作为集群为例进行说明,clouder-manager选取其中一台机器即可。
3.2 配置/etc/hosts、主机名(所有节点)
i) 修改主机的解析名
hostnamectl set-hostname cdhcluster-node1 --static
ii) 修改ip与主机名对应关系
vi /etc/hosts
添加以下内容 ip + 主机名
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.19.151.141 cdhcluster-node-141
10.19.151.142 cdhcluster-node-142
10.19.151.143 cdhcluster-node-143
10.19.151.144 cdhcluster-node-144
注意:注释掉第一行;
iii)配置本机的hosts
修改C:\Windows\System32\drivers\etc\hosts 在文件末尾添加如下内容
Tips:(Win10修改编辑hosts文件无法保存怎么办
3.3关闭防火墙、禁止防火墙开机自启(所有节点)
i)关闭防火墙
systemctl stop firewalld
ii)禁止防火墙开机自启
systemctl disable firewalld
iii)关闭SELINUX
vim /etc/selinux/config —> SELINUX=disabled (修改)
(检查SELinux模式:getenforce,如果输出permissive或者disabled,你可以跳过该步骤)
3.4 SSH无密码登陆(所有节点)
clouder-manager节点执行命令,一路回车到结束,在/root/.ssh/下面会生成一个公钥文件id_rsa.pub
ssh-keygen -t rsa
将公钥追加到authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
修改权限
chmod 600 ~/.ssh/authorized_keys
将~/.ssh从当前节点分发到其他各个节点。如:
scp -r ~/.ssh/ root@cdhcluster-node-142:~
ssh 各个节点互相登陆
3.5配置CentOS源(所有节点)
- 先把原来的源文件删除,把每台机器上的都删除
for a in {1..4} ; do ssh cdhcluster-node-14$a rm -rf /etc/yum.repos.d/* ; done
- 创建文件/etc/yum.repos.d/os-iso.repo,文件内容如下:
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
[base]
name=CentOS-\$releasever - Base
baseurl=http://10.19.151.134/centos/\$releasever/os/\$basearch/
gpgcheck=1
enabled=1
gpgkey=http://10.19.151.134/RPM-GPG-KEY-CentOS-7
[updates]
name=CentOS-\$releasever - Updates
baseurl=http://10.19.151.134/centos/\$releasever/updates/\$basearch/
gpgcheck=1
enabled=1
gpgkey=http://10.19.151.134/RPM-GPG-KEY-CentOS-7
说明:10.19.151.134为已经的搭建CentOS操作系统yum源服务器。
- 机器输入yum list 会显示文件列表
说明数据源已经搭建完成。
- 给每台机器拷贝一份
for a in {1..4} ; do scp /etc/yum.repos.d/os.repo cdhcluster-node-14$a:/etc/yum.repos.d/ ; done
3.6配置NTP服务(所有节点)
1)时区(改为中国标准时区)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2)安装ntp
yum -y install ntp
3)ntp配置
ntp服务器配置
添加如下一行
restrict 10.19.151.0 mask 255.255.255.0 nomodify
注释原有server,指向本机
server 127.127.1.0
fudge 127.127.1.0 stratum 0
ntp客户端配置
注释原有server,指向ntp服务器
server 10.19.151.131
4)启动 ntp 服务
service ntpd restart
5)设置开机自启
systemctl enable ntpd.service
6)查看与时间同步服务器的时间偏差
ntpdc -c loopinfo
7)查看当前同步的时间服务器
配置成功状态(服务开启后前面出现*说明成功)
8)查看状态
ntpstat
注意:配置完启动ntp服务后,不会立即进行同步,ntp服务会根据自己的算法来逐步同步,可以在配置完过一段时间后再来确认同步的时间服务器以及同步状态等信息。
3.7修改Linux swappiness参数(所有节点)
通过命令查询出后,依次修改
find /usr/lib/tuned -name '*.conf' -type f -exec grep "vm.swappiness" {} \+
如下
3.8禁用透明页(所有节点)
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久生效 在/etc/rc.local 添加上面命令
给与可执行权限
chmod +x /etc/rc.d/rc.local
3.9 JDK安装(所有节点)
卸载&安装JDK
rpm -qa \| grep java \# 查询已安装的java
yum remove java\* \# 卸载
rpm -ivh oracle-j2sdk1.8-1.8.0+update181-1.x86_64.rpm
配置环境变量
vi /etc/profile 末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=.:\$CLASSPATH:\$JAVA_HOME/lib/
export JRE_HOME=/usr/java/jdk1.8.0_181-cloudera/jre
3.10 mysql驱动包部署(所有节点)
创建/usr/share/java目录,将mysql-jdbc包放过去(所有节点)
mkdir -p /usr/share/java
mv /opt/mysql-j/mysql-connector-java-5.1.34.jar /usr/share/java/
mysql-connector-java-5.1.34.jar 一定要命名为mysql-connector-java.jar
3.11 重启Reboot(所有节点)
为保证防火墙、虚拟机参数修改后生效,各节点机器需要重启 reboot。
3.12 MySql数据建库
在Mysql数据库所在服务器,创建如下数据库:
服务名 | 数据库名 | 用户名 | 密码 |
---|---|---|---|
Cloudera Manager Server | scm | scm | password |
Activity Monitor | amon | amon | password |
Reports Manager | rman | rman | password |
Hue | hue | hue | password |
Hive Metastore Server | metastore | hive | password |
Sentry Server | sentry | sentry | password |
Cloudera Navigator Audit Server | nav | nav | password |
Cloudera Navigator Metadata Server | navms | navms | password |
Oozie | oozie | oozie | password |
初始化语句
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'password';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'password';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'password';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'password';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'password';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'password';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'password';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'password';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'password';
3.13 安装Httpd服务(manger节点)
yum install httpd
service httpd start
systemctl enable httpd.service \#设置httpd服务开机自启
3.14 配置Cloudera Manager包yum源(manager节点)
创建发布目录
mkdir -p /var/www/html/cloudera-repos/
将下载的cm包文件移到此目录下:
mv cm6 /var/www/html/cloudera-repos/
cd /var/www/html/cloudera-repos/cm6/
创建repodata:
createrepo .
vim /etc/yum.repos.d/cloudera-manager.repo
注意路径:http://manager/cloudera-repos/cm6/,其中manager请替换对应主机的名称或IP。
yum clean all
yum makecache
3.15 导入GPG key(manager节点)
如果没有这步操作,很可能cloudera服务安装失败
rpm -import
3.16 安装 Cloudera Manager(manager节点)
yum install cloudera-manager-daemons cloudera-manager-agent
cloudera-manager-server
安装完CM后/opt/ 下会出现cloudera目录。
1)配置本地Parcel存储库
mv /opt/parcels/* /opt/cloudera/parcel-repo # 将parcel包移动到指定位置
在/opt/cloudera/parcel-repo执行以下命令:
sha1sum CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel | awk ‘{ print $1 }’ > CDH-6.2.0-1.cdh6.2.0.p0.967373-el7.parcel.sha
2)设置Cloudera Manager 数据库
a、mysql数据库与CM Server是同一台主机
执行命令:
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
b、mysql数据库与CM Server不在同一台主机上
执行命令:
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql -h --scm-host scm scm
3)打开Server服务
service cloudera-scm-server start
然后等待Cloudera Manager
Server启动,需要等待约3-5分钟时间,此过程中scm会在上一步指定的mysql数据库中创建SCM相关的表。同时也可通过如下命令读取启动日志,若看到关于表不存在的warning时可忽略。
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
去监控服务启动状态。
当看到INFO WebServerImpl:com.cloudera.server.cmf.WebServerImpl: Started Jetty
server.日志打印出来后,说明服务启动成功,可以通过浏览器访问Cloudera Manager
WEB界面了,静候几分钟,打开http://manager:7180。
4 大数据组件安装
4.1 登陆cm web界面
打开浏览器,访问地址:http://
4.2 具体安装步骤
欢迎页面
首先是Cloudera Manager的欢迎页面,点击页面右下角的【继续】按钮进行下一步:
接受条款
勾选接受条款,点击【继续】进行下一步:
版本选择
这里选择免费版
设置集群名称
选择主机
这一步是要搜索并选择用于安装CDH集群的主机,在主机名称后面的输入框中输入各个节点的hostname,中间使用英文逗号分隔开,然后点击搜索,在结果列表中勾选要安装CDH的节点即可:
指定存储库
Cloudera Manager Agent
这里选择自定义,填写上面使用httpd搭建好的Cloudera Manager YUM 库URL:
CDH and other software
如果我们之前的【配置本地Parcel存储库】步骤操作无误的话,这里会自动选择【使用Parcel】,并加载出CDH版本,确认无误后点击【继续】。
JDK安装选项
这一步骤我就不再勾选安装JDK了,因为我在环境准备部分已经安装过了。取消勾选,然后继续:
SSH登录配置
用于配置集群主机之间的SSH登录,填写root用户的密码,根据集群配置填写合适的【同时安装数量】值即可。
安装Agent
到这一步会自动进行节点Agent的安装,稍等一会儿,即可安装完成:
安装Parcels
这一步同样是自动安装,分配步骤的速度主要取决于网络环境,耐心等待即可
主机检查
安装CDH集群,选择服务类型
审核更改
将Kafka配置的ZooKeeper Root修改为/kafka,如下
数据库设置
命令详细信息&汇总
到这里CDH集群的安装基本上就已经完成了。
5 其他操作
5.1 启用HDFS的HA
在HDFS集群中NameNode存在单点故障(SPOF),对于只有一个NameNode的集群,如果NameNode机器出现意外,将导致整个集群无法使用。为了解决NameNode单点故障的问题,Hadoop给出了HDFS的高可用HA方案,HDFS集群由两个NameNode组成,一个处于Active状态,另一个处于Standby状态。
Active NameNode可对外提供服务,而Standby NameNode则不对外提供服务,仅同步Active
NameNode的状态,以便在Active
NameNode失败时快速的进行切换。这里主要介绍如何使用Cloudera Manager启用HDFS的HA。
前置条件
1.拥有Cloudera Manager的管理员账号
2.CDH集群已安装成功并正常使用
启用HDFS的HA
1.使用管理员用户登录Cloudera Manager的Web管理界面,进入HDFS服务。
2. 点击“启用High Avaiability”,设置NameService名称
3.点击“继续”,选择NameNode主机及JouralNode主机
JouralNode主机选择,一般与Zookeeper节点一致即可(至少3个且为奇数)
4.点击“继续”,设置NameNode的数据目录和JouralNode的编辑目录
NameNode的数据目录默认继承已有NameNode数据目录。
5.点击“继续”,启用HDFS的High Availability,如果集群已有数据,格式化NameNode会报错,不用理。
6.点击“继续”,完成HDFS的High Availability
7.HDFS实例查看
通过实例列表可以看到启用HDFS HA后增加了NameNode、Failover
Controller及JouralNode服务并且服务都正常启动,至此已完成了HDFS HA的启用。
更新Hive MetaStore NameNode
1.进入Hive服务并停止Hive的所有服务
2.确认Hive服务停止后,点击“更新Hive Metastore NameNode”
3.更新Hive Metastore NameNode
4.更新成功
5.启动Hive服务
完成HiveMetastore NameNode更新。
5.2 启用Kerberos
安装环境:OS:CentOS7.5 CDH6.2
备注:因CentOS7.5的krb相关组件存在Bug,需要升级版本,请在安装前部署krb5-1.15.1-34.el7版本的源,并在yum安装时指定版本。
1. KDC服务安装及配置
将KDC服务安装在Cloudera Manager
Server所在服务器上(KDC服务可根据自己需要安装在其他服务器)。
- 在CM服务器上安装KDC服务
yum install krb5-server-1.15.1-34.el7.x86_64 krb5-libs-1.15.1-34.el7.x86_64
krb5-workstation-1.15.1-34.el7.x86_64
- 配置/etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = HADOOP.COM
#default_ccache_name = KEYRING:persistent:%{uid}
[realms]
HADOOP.COM = {
kdc = cdhcluster-node-141
admin_server = cdhcluster-node-141
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
其中,kdc&admin_server修改为当前kdc所在的主机名。
- 配置/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.COM = {
#master_key_type = aes256-cts
max_renewable_life= 7d 0h 0m 0s
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal
arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal
des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
- 配置/var/kerberos/krb5kdc/kadm5.acl
*/[email protected]
(5) 创建Kerberos数据库
kdb5_util create -r HADOOP.COM -s
注意:此处需要输入Kerberos数据库的密码,请务必记清密码。
(6)创建Kerberos的管理账号(database administrator)
kadmin.local -q "addprinc admin/admin"
输入并记住密码。
(7)将Kerberos服务添加到自启动服务,并启动krb5kdc和kadmin服务
systemctl enable krb5kdc
systemctl enable kadmin
systemctl start krb5kdc
systemctl start kadmin
(8)测试Kerberos的管理员账号
kinit admin/admin\@HADOOP.COM
klist -e
(9)集群所有节点安装Kerberos客户端(包括CM)
yum -y install krb5-libs-1.15.1-34.el7.x86_64
krb5-workstation-1.15.1-34.el7.x86_64
(10)CM节点安装额外组件
yum -y install openldap-clients
(11)拷贝配置文件
将KDC Server上的krb5.conf文件拷贝到所有Kerberos客户端(即集群所有节点)
scp /etc/krb5.conf 10.19.151.142:/etc/
2.CDH集群启用Kerberos
(1)配置集群JDK
下载jce_policy-8.zip
链接: http://www.oracle.com/technetwork/java/javase/downloads/index.html
unzip jce_policy-8.zip
cp UnlimitedJCEPolicyJDK8/*.jar
/usr/java/jdk1.8.0_181-cloudera/jre/lib/security/
(2)KDC添加Cloudera Manager管理员账号
kadmin.local -q "addprinc cloudera-scm/admin"
输入并记住密码。
(3)进入Cloudera Manager的“管理”->“安全”界面
(4) 选择“启用Kerberos”,进入如下界面,
确保如下列出的所有检查项都已完成,然后全部点击勾选
(5) 点击“继续”,配置相关的KDC信息,包括类型、KDC服务器、KDC
Realm、加密类型以及待创建的Service
Principal(hdfs,yarn,,hbase,hive等)的更新生命期等.
加密类型与/var/kerberos/krb5kdc/kdc.conf配置的保持一致。
(6) 不建议让Cloudera Manager来管理krb5.conf, 点击“继续”
(7) 输入Cloudera
Manager的Kerbers管理员账号,一定得和之前创建的账号一致,点击“继续”
(8) 点击“继续”启用Kerberos
(9)点击“继续, Kerberos启用完成。
5.3 Impala负载均衡(haproxy)
这里以集群已启用Kerberos的情况进行说明。
HAProxy安装以及启停
- 在集群中选择一个节点,使用yum方式安装HAProxy服务。
yum -y install haproxy
- 启动与停止HAProxy服务,并将服务添加到自启动列表
service haproxy start
service haproxy stop
chkconfig haproxy on
HAProxy配置Impala负载均衡
- 将/etc/haproxy目录下的haproxy.cfg文件备份,新建haproxy.cfg文件,添加如下配置
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
#option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 5000
stats refresh 30s
stats uri /stats
listen impalashell
bind 0.0.0.0:25003
mode tcp
option tcplog
balance leastconn
server cluster-node-131 cluster-node-131:21000 check
server cluster-node-132 cluster-node-132:21000 check
server cluster-node-133 cluster-node-133:21000 check
server cluster-node-134 cluster-node-134:21000 check
listen impalajdbc
bind 0.0.0.0:25004
mode tcp
option tcplog
balance leastconn
server cluster-node-131 cluster-node-131:21050 check
server cluster-node-132 cluster-node-132:21050 check
server cluster-node-133 cluster-node-133:21050 check
server cluster-node-134 cluster-node-134:21050 check
主要配置了HAProxy的http状态管理界面、impalashell和impalajdbc的负载均衡。
2.重启HAProxy服务
service haproxy restart
3.浏览器访问http://{hostname}:1080/stats
看到以上截图说明,已经成功配置了Impala服务的负载均衡。
Impala配置
- 使用管理员账号登录Cloudera Manager,进入Impala服务,在“配置”下面搜索“Load
Balancer”
- 保存配置,回到CM主页根据提示,重启相应服务
Impala shell访问
获取Kerberos令牌
使用Impala shell访问HAProxy服务的25003端口,命令如下
impala-shell -i :25003
Impala JDBC访问
CONNECTION_URL =
"jdbc:impala://10.19.151.131:25004/default;AuthMech=1;KrbRealm=HADOOP.COM;KrbHostFQDN=cluster-node-131;KrbServiceName=impala"
JDBC访问需要修改为haproxy部署服务的IP和端口,kerberos认证采用相关的凭据。