一、CDH的搭建
1.1 ip
reboot (重启)
网络服务器 service network start|stop|restart
OS7: systemctl restart network
ip:
查看:
ip addr
ifconfig
ifconfig eth0 具体查看某一块网卡的ip信息
修改:
临时修改
ifconfig eth0 192.168.111.3 关机 重启 ip将消失。
永久修改(静态网卡):
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.134.21
NETMASK=255.255.255.0
GATWAY=192.168.134.0
动态网卡:
network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
1.2 防火墙
基本使用:
service iptables status
service iptables start
service iptables stop
service iptables restart
OS7:
状态 firewall-cmd --state
停止:systemctl stop firewalld.service
禁止firewall开机启动:systemctl disable firewalld.service
关闭防火墙_开机自启:
chkconfig iptables off|on
关闭selinux :
红帽子、centos公司定制的一种安全服务
vi /etc/selinux/config
SELINUX=disabled
SELinux模式:
只能有 root 用户进行设置和修改
可设置为enforcing,permissive或disabled
RedHat linux操作系统中默认开启了防火墙,SELinux也处于启动状态,
一般状态为enforing。致使很多服务端口默认是关闭的。等验证时有时连ping也ping不通.
1.3 主机名及映射
主机名:
修改:
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop21.**.com
SO7:hostnamectl set-hostname
linux 映射:
vi /etc/hosts
windows 映射 :
C:\Windows\System32\drivers\etc\hosts
192.168.111.3 hadoop1.**.com
1.4 服务器clone
集群搭建
1.1 通过虚拟机软件,进行clone
1.2 删除老机器的mac地址
rm -rf /etc/udev/rules.d/70-persistent-net.rules
修改ip地址:vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改主机名:vi /etc/sysconfig/network
修改主机映射:vi /etc/hosts
远程复制
scp /etc/hosts root@192.168.111.4:/etc
scp 远程复制 文件夹 -r
scp -r
1.5、SSH
[root@CentOSX ~]# ssh-keygen -t rsa
[root@CentOSX ~]# ssh-copy-id CentOSA
[root@CentOSX ~]# ssh-copy-id CentOSB
[root@CentOSX ~]# ssh-copy-id CentOSC
1.6、NTP时钟同步
方案
该方案目的:同步node1的时间为外部授时时间,然后node、node3的时间为同步node1的时间
先安装 ntp 再使用命令同步外部授时中心:ntpdate -u cn.pool.ntp.org 或 ntpdate -u ntp6.aliyun.com
1.ntp
安装 yum install ntp
启动服务 systemctl start ntpd
查看是否启动 ps -ef | grep ntpd
开机启动 systemctl enable ntpd.service
查看当前时间 date
查看当前时间和NTP服务的同步状态 timedatectl
2.node1作为NTP Server,node2和node3作为NTP Client,node2和node3要跟node1同步时间,node1要去外部授时中心同步时间
1.配置 node1:
1.配置前先使用命令同步外部授时中心:ntpdate -u cn.pool.ntp.org 或 ntpdate -u ntp6.aliyun.com
2.vim /etc/ntp.conf
注释以下配置
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
增加如下配置:
# 允许内网其他机器同步时间,如果不添加该约束默认允许所有IP访问本机同步服务。192.168.88.0为本局域网内的子网IP
restrict 192.168.88.0 mask 255.255.255.0 nomodify notrap
# 配置和上游标准时间同步
server 210.72.145.44 # 中国国家授时中心
server 133.100.11.8 #日本[福冈大学]
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 2.cn.pool.ntp.org
server 3.cn.pool.ntp.org
# 配置允许上游时间服务器主动修改本机(内网ntp Server)的时间
restrict 210.72.145.44 nomodify notrap noquery
restrict 133.100.11.8 nomodify notrap noquery
restrict 0.cn.pool.ntp.org nomodify notrap noquery
restrict 1.cn.pool.ntp.org nomodify notrap noquery
restrict 2.cn.pool.ntp.org nomodify notrap noquery
restrict 3.cn.pool.ntp.org nomodify notrap noquery
# 确保localhost有足够权限,使用没有任何限制关键词的语法。
# 外部时间服务器不可用时,以本地时间作为时间服务。
# 注意:这里不能改,必须使用127.127.1.0,否则会导致无法
#在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronization found的错误。
#在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。
#这是因为NTP server还没有和其自身或者它的server同步上。
#以下的定义是让NTP Server和其自身保持同步,如果在ntp.conf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。
#下面这个配置,建议NTP Client关闭,建议NTP Server打开。因为Client如果打开,可能导致NTP自动选择合适的最近的NTP Server、也就有可能选择了LOCAL作为Server进行同步,而不与远程Server进行同步。
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
2.配置 node2、node3:
1.vim /etc/ntp.conf
注释以下配置
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
增加如下配置:
#配置上游时间服务器为本地的ntpd Server服务器
server 192.168.88.100
# 配置允许上游时间服务器主动修改本机的时间
restrict 192.168.88.100 nomodify notrap noquery
1.7、mysql
11.MySQL
安装、配置 MySQL:(推荐该种安装方法)
1.查看是否安装了自带mysql:rpm -qa | grep mysql
2.把64位的MySQL(centOS 7 版本MySQL:mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz)解压到 /opt/model目录文件夹下
cd /opt/model
tar zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /opt/model
mv mysql-5.7.24-linux-glibc2.12-x86_64 /opt/model/mysql
rm -f mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
3.mkdir -p /opt/model/mysql/data
mkdir -p /opt/model/mysql/database
mkdir -p /opt/model/mysql/data/relay
mkdir -p /opt/model/mysql/data/binlog
mkdir -p /opt/model/mysql/data/tmp
chmod -R 777 /opt/model/mysql/data
touch /opt/model/mysql/data/error.log
touch /opt/model/mysql/data/mysql.sock
touch /opt/model/mysql/data/mysql.pid
4.(可以忽略)创建 mysql 用户组和 mysql 用户 , 把 mysql 目录所有者赋给 mysql 用户
groupadd mysql
useradd -r -g mysql mysql
chown -R mysql:mysql mysql
cd mysql
主目录权限处理(查看是否有就得用户,有删除并新建用户)
查看组和用户情况:cat /etc/group | grep mysql
查看组和用户情况:cat /etc/passwd |grep mysql
若存在,则删除原mysql用户:userdel -r mysql,会删除其对应的组和用户并在次查看。
创建mysql组:groupadd mysql
创建mysql用户:useradd -r -g mysql mysql
修改目录拥有者:chown -R mysql:mysql /opt/model/mysql
5.配置 vim /etc/my.cnf:my.cnf配置看另外一页,先删除原有的所有配置信息,然后添加新的进去
6.初始化数据库 使用 mysqld 安装
cd /opt/model/mysql/bin
root 用户(目前这个用户):./mysqld --initialize --user=root --basedir=/opt/model/mysql --datadir=/opt/model/mysql/database
mysql 用户:./mysqld --initialize --user=mysql --basedir=/opt/model/mysql --datadir=/opt/model/mysql/database
注意:
1.执行上述语句进行初始化时,有可能打印出的显示信息中包括默认的登录密码:root@localhost:(该随机数字字母为自动生成的登录密码)
如果执行上述语句进行初始化时,没有任何打印信息的话,那么cat /opt/model/mysql/data/error.log文件中即能找到:root@localhost:(该随机数字字母为自动生成的登录密码)
2.如果使用随机密码也无法登录mysql的话,那么需要重新执行如下步骤:
1.删除 /opt/model/mysql 目录下的 database文件夹,然后执行 mkdir /opt/model/mysql/database
2.cd /opt/model/mysql/bin
重新初始化 ./mysqld --initialize --user=root --basedir=/opt/model/mysql --datadir=/opt/model/mysql/database
3.service mysql restart重启mysql后,再使用新的随机密码登录mysql
3.如果执行上述语句时报错:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
需要安装命令: yum install -y libaio
再执行 ./mysqld --initialize --user=root --basedir=/opt/model/mysql --datadir=/opt/model/mysql/database
7./etc/profile环境变量配置
vim /etc/profile
export PATH="$PATH":/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export MYSQL_HOME=/opt/model/mysql
export PATH="$PATH":"$MYSQL_HOME"/bin
source /etc/profile
8.开机服务启动设置:
1.(第一种方法:目前使用这种即可)cp -a /opt/model/mysql/support-files/mysql.server /etc/init.d/mysql
(第二种方法)cp /opt/model/mysql/support-files/mysql.server /etc/init.d/mysqld
2.(第一种方法:目前使用这种即可)chmod 777 /etc/init.d/mysql
(第二种方法)chmod 777 /etc/init.d/mysqld
cd /etc/init.d
ll 查看到有mysql文件
3.chkconfig --list mysql 查看mysql服务是否在服务配置中
最后一行 显示 service mysql supports chkconfig, but is not referenced in any runlevel (run 'chkconfig --add mysql')
翻译为 服务mysql支持chkconfig,但没有在任何运行级别中引用(运行'chkconfig --add mysql')
因此需要把mysql注册为开机启动的服务
(第一种方法:目前使用这种即可)chkconfig --add mysql
(第二种方法)chkconfig --add mysqld
然后再进行查看 chkconfig --list
显示 mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则键入
chkconfig --level 2345 mysql on
chkconfig --level 2345 mysqld on
9.mysql服务注册成功后,便可以使用以下命令进行启动 或 停止mysql
service mysql start 显示 Starting MySQL. SUCCESS!
service mysql stop
service mysql status
service mysql restart
或者也可以使用 安全启动 方式
cd /opt/model/mysql/bin
./mysqld_safe --user=root &
查看mysql进程是否启动成功:ps -ef | grep mysql
10.创建快捷方式
(已把mysql的bin目录路径配置到环境变量/etc/profile中后则不需要再创建快捷方式)ln -s /opt/model/mysql/bin/mysql /usr/bin
服务启动后,直接运行 mysql -u root -padmin 即可登录,不需要进入到/opt/model/mysql/bin目录
8.默认登录密码可以在两处地方找到
1.可以在执行初始化数据库语句(./mysqld --initialize)显示的信息中查看到:root@localhost:(该随机数字字母为自动生成的登录密码)
2.可以在 error.log日志(cat /opt/model/mysql/data/error.log)里查看
cat /opt/model/mysql/data/error.log
root@localhost: 后面的随机数字字母就是默认登录密码
如果找不到可能默认是空,登录时无需密码直接回车
3.如果使用随机密码也无法登录mysql的话,那么需要重新执行如下步骤:
1.删除 /opt/model/mysql 目录下的 database文件夹
2.重新初始化 ./mysqld --initialize --user=root --basedir=/opt/model/mysql --datadir=/opt/model/mysql/database
3.service mysql restart重启mysql后,再使用新的随机密码登录mysql
9.登录mysql
cd /opt/model/mysql/bin
./mysql -u root -p(该随机数字字母为自动生成的登录密码)
set password = password('admin');
grant all privileges on *.* to 'root' @'%' identified by 'admin';
flush privileges;
exit
4.建立CM、Hive等需要的表(可以一次性粘贴执行完所有句子)
drop user 'hive'@'%';
FLUSH PRIVILEGES;
create database hive default character set utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON hive. * TO 'hive'@'%';
FLUSH PRIVILEGES;
create database cm default character set utf8;
CREATE USER 'cm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON cm. * TO 'cm'@'%';
FLUSH PRIVILEGES;
create database am default character set utf8;
CREATE USER 'am'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON am. * TO 'am'@'%';
FLUSH PRIVILEGES;
create database rm default character set utf8;
CREATE USER 'rm'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON rm. * TO 'rm'@'%';
FLUSH PRIVILEGES;
create database hue default character set utf8;
CREATE USER 'hue'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON hue. * TO 'hue'@'%';
FLUSH PRIVILEGES;
create database oozie default character set utf8;
CREATE USER 'oozie'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON oozie. * TO 'oozie'@'%';
FLUSH PRIVILEGES;
create database sentry default character set utf8;
CREATE USER 'sentry'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON sentry. * TO 'sentry'@'%';
FLUSH PRIVILEGES;
create database nav_ms default character set utf8;
CREATE USER 'nav_ms'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_ms. * TO 'nav_ms'@'%';
FLUSH PRIVILEGES;
create database nav_as default character set utf8;
CREATE USER 'nav_as'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON nav_as. * TO 'nav_as'@'%';
FLUSH PRIVILEGES;
5.jdbc驱动
mkdir -p /usr/share/java
cd /usr/share/java 把 mysql-connector-java-5.1.46.jar 拷贝到该目录下
chmod 777 mysql-connector-java-5.1.46.jar
ln -s mysql-connector-java-5.1.46.jar mysql-connector-java.jar
GRANT ALL on gateway.* to 'gateway'@'%' identified by 'gateway' with grant option;
却报了一个错误 Access denied for user 'root'@'%' to database 'gateway'
解决方法
最后发现是user表中’root’@’%’没有grant的权限
可以用如下命令查看:
可以看到现在这两个权限都是N
然后我们更新它们为Y,然后重启mysql
update mysql.user set Grant_priv='Y',Super_priv='Y' where user = 'root' and host = '%';
flush privileges;
1.8、CDH安装
启动停止-查看日志
service mysql start 显示 Starting MySQL. SUCCESS!
service mysql stop
service mysql status
service mysql restart
启动cloudera-scm-server 命令
systemctl start cloudera-scm-server
systemctl stop cloudera-scm-server
systemctl restart cloudera-scm-server
分别执行启动cloudera-scm-agent 命令
systemctl start cloudera-scm-agent
systemctl stop cloudera-scm-agent
systemctl restart cloudera-scm-agent
查看cm server 和 server agent 的启动日志 来排除启动失败的报错
cd /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-agent
cd /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server
tail -f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server/cloudera-scm-server.log
主节点查看 cloudera-scm-server 状态
systemctl status cloudera-scm-server #正常显示Active: active (running)
ps -ef | grep cloudera-scm-server
netstat -antlp |grep cloudera-scm-server
主节点和从节点分别查看 cloudera-scm-agent 状态
systemctl status cloudera-scm-agent #正常显示Active: active (running)
ps -ef | grep cloudera-scm-agent
netstat -antlp |grep cloudera-scm-agent
安装方案一(对应下载方案一):
主节点和从节点都要解压安装cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz
主节点的parcel仓库目录需要放置
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel、
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha、
manifest.json
1.主节点
1.mkdir -p /opt/cloudera-manager
tar -zxvf cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz -C /opt/cloudera-manager
mkdir -p /var/cloudera-scm-server
#安装时自动会将主节点的/opt/cloudera/parcel-repo目录中的文件抽取出来,分发解压激活到全部各个节点的/opt/cloudera/parcels目录中
mkdir -p /opt/cloudera/parcel-repo
mkdir -p /opt/cloudera/parcels
2.cd /opt/cloudera/parcel-repo 目录下的安装文件如下
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel
CDH-5.16.1-1.cdh5.16.1.p0.3-el7.parcel.sha
manifest.json
3.#scm_prepare_database.sh mysql -h"mysql数据库所在机器映射域名" -u用户 -p密码 --scm-host "mysql数据库所在机器映射域名" 数据库名 用户 密码
#注意:mysql事先不能存在命令中所指定的数据库名,否则报错已存在,这是CM会自动创建该表的
#执行完 显示All done, your SCM database is configured correctly!
sh /opt/cloudera-manager/cm-5.16.1/share/cmf/schema/scm_prepare_database.sh mysql -hcdh01 -uroot -p123456 --scm-host cdh01 cdh root 123456
4.mkdir -p /opt/cloudera-manager/cm-5.16.1/run/cloudera-scm-agent
cp /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-server /etc/init.d/cloudera-scm-server
cp /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent /etc/init.d/cloudera-scm-agent
5.vim /etc/init.d/cloudera-scm-server 修改72行为CMF_DEFAULTS=/opt/cloudera-manager/cm-5.16.1/etc/default
vim /etc/init.d/cloudera-scm-agent 修改74行为CMF_DEFAULTS=/opt/cloudera-manager/cm-5.16.1/etc/default
vim /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-agent/config.ini 修改第3行 server_host=cdh01
6.#同时为了保证在每次服务器重启的时候都能启动cloudera-scm-server,应该在开机启动脚本/etc/rc.local中加入如下命令:
vim /etc/rc.local 添加 service cloudera-scm-server restart
service cloudera-scm-agent restart
7.chkconfig cloudera-scm-server on
chkconfig cloudera-scm-agent on
2.从节点
1.mkdir -p /opt/cloudera-manager
tar -zxvf cloudera-manager-centos7-cm5.16.1_x86_64.tar.gz -C /opt/cloudera-manager
#安装时自动会将主节点的/opt/cloudera/parcel-repo目录中的文件抽取出来,分发解压激活到
#全部各个节点的/opt/cloudera/parcels目录中
mkdir -p /opt/cloudera/parcels
2.mkdir -p /opt/cloudera-manager/cm-5.16.1/run/cloudera-scm-agent
cp /opt/cloudera-manager/cm-5.16.1/etc/init.d/cloudera-scm-agent /etc/init.d/cloudera-scm-agent
3.vim /etc/init.d/cloudera-scm-agent
修改74行为CMF_DEFAULTS=/opt/cloudera-manager/cm-5.16.1/etc/default
vim /opt/cloudera-manager/cm-5.16.1/etc/cloudera-scm-agent/config.ini
修改第3行 server_host=cdh01
4.#同时为了保证在每次服务器重启的时候都能启动cloudera-scm-agent,应该在开机启
#动脚本/etc/rc.local中加入命令:
service cloudera-scm-agent restart
vim /etc/rc.local 添加 service cloudera-scm-agent restart
5.chkconfig cloudera-scm-agent on
3.在CM安装之前必须保证NODE1主节点中的以下程序均已启动
1.每台机器:
根据aliyun提供的服务进行 时间同步:ntpdate -u ntp6.aliyun.com
启动服务 systemctl start ntpd、systemctl restart ntpd
查看是否启动 ps -ef | grep ntpd
开机启动 systemctl enable ntpd.service
查看时间同步状态 ntpstat
查看时间:date 或 timedatectl
2.必须保证MySQL启动了,才能正常启动cm:service mysql start 命令启动mysql
4.主节点执行启动cloudera-scm-server 命令
systemctl start cloudera-scm-server
systemctl stop cloudera-scm-server
systemctl restart cloudera-scm-server
5.主节点和从节点分别执行启动cloudera-scm-agent 命令
systemctl start cloudera-scm-agent
systemctl stop cloudera-scm-agent
systemctl restart cloudera-scm-agent
6.主节点查看 cloudera-scm-server 状态
systemctl status cloudera-scm-server #正常显示Active: active (running)
ps -ef | grep cloudera-scm-server
netstat -antlp |grep cloudera-scm-server
7.主节点和从节点分别查看 cloudera-scm-agent 状态
systemctl status cloudera-scm-agent #正常显示Active: active (running)
ps -ef | grep cloudera-scm-agent
netstat -antlp |grep cloudera-scm-agent
8.查看cm server 和 server agent 的启动日志 来排除启动失败的报错
cd /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-agent
cd /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server
tail -f /opt/cloudera-manager/cm-5.16.1/log/cloudera-scm-server/cloudera-scm-server.log
9.cm server 和 server agent 的启动日志如果出现以下报错信息
1.报错信息中只要是包含 at com.mysql.jdbc.xxx包 或 com.mysql.jdbc.exceptions 等信息,
就表示mysql没启动
2.报错:Failed to connect to previous supervisor
ps ax | fgrep supervisord 把可能以前的 supervisord 进程kill掉,
然后重启cloudera-scm-server、cloudera-scm-agent
10.cloudera-scm-server 默认使用的端口 7180,那么就可以通过 192.168.88.100:7180/cmf/login 访问 CM
1.netstat -lnpt | grep 7180 显示 tcp 0 0 0.0.0.0:7180 0.0.0.0:* LISTEN 68289/java
启动之后需要一段时间才能完全整个启动(一般一分钟之内),才可以访问得到 192.168.88.100:7180/cmf/login
2.cloudera-scm-server 默认使用的端口 7180,那么就可以通过 IP:7180/cmf/login 访问 CM
netstat -lnpt | grep 7180
netstat -lnpt | grep 7182
netstat -an | grep 7180
netstat -an | grep 7182