文章目录
01、服务器环境
云主机,CentOS版本版本3.10.0-1160.31.1.el7.x86_64
02、集群规划
| 集群规划 | hadoop102 | hadoop103 | hadoop104 |
|---|---|---|---|
| cloudera-scm-server | 1 | ||
| cloudera-scm-agent | 1 | 1 | 1 |
03、hostname
hostnamectl --static set-hostname hadoop102
hostnamectl --static set-hostname hadoop103
hostnamectl --static set-hostname hadoop104
04、hosts
vim /etc/hosts
添加内网IP映射
内网IP hadoop102 hadoop102
内网IP hadoop103 hadoop103
内网IP hadoop104 hadoop104
05、WIN10网络映射配置
去到C:\Windows\System32\drivers\etc以管理员身份编辑hosts文件,添加外网IP映射
外网IP hadoop102
外网IP hadoop103
外网IP hadoop104
06、关闭防火墙
每台机执行
# 保存当前防火墙规则
iptables-save > ~/firewall.rules
# 禁用防火墙
systemctl disable firewalld
# 停止防火墙
systemctl stop firewalld
# 查看防火墙状态
systemctl status firewalld
07、集群之间SSH免密登录
每台机执行:生成公钥和密钥
ssh-keygen
每台机执行:把自己的公钥发到所有节点,填yes和密码
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop102
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop103
ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop104
08、Python版本确认
Hue需要用到Python2.7;CentOS7默认装好了Python2.7,用下面命令确认一下
python --version
09、集群分发脚本
mkdir ~/bin
touch ~/bin/rsync.py
chmod 777 ~/bin/rsync.py
vim ~/bin/rsync.py
#!/usr/bin/python2
# coding:utf-8
import os, re, socket
# 获取第一个参数
a = os.sys.argv
if len(a) != 2:
print a
exit('使用方法:rsync.py $HADOOP_HOME')
a = a[1]
# 补全路径
if not a.startswith('/'):
a = os.path.join(os.getcwd(), a)
if os.path.isdir(a) and not a.endswith('/'):
a += '/'
if not os.path.exists(a):
print a
exit('路径不存在')
# 文件分发
hostname = socket.gethostname()
with open('/etc/hosts') as f:
for i in set(re.findall('hadoop[0-9]+', f.read())):
if i == hostname:
continue
aa = 'rsync -a %s %s:%s' % (a, i, a)
print aa
os.system(aa)
分发
rsync.py ~/bin
10、集群操作脚本
touch ~/bin/cluster.py
chmod 777 ~/bin/cluster.py
vim ~/bin/cluster.py
#!/usr/bin/python2
import os, re
# command
a = os.sys.argv
if len(a) < 2:
print a
exit('Usage: cluster.py python --version')
cmd = ' '.join(a[1:])
# cluster operation
with open('/etc/hosts') as f:
for h in sorted(set(re.findall('hadoop[0-9]+', f.read()))):
c = "ssh %s '%s'" % (h, cmd)
print '\033[033m{}\033[0m'.format(c)
os.system(c)
另外,还有在每台机执行:将/etc/profile文件内容追加到~/.bashrc,只执行一次
cat /etc/profile >> ~/.bashrc
cat ~/.bashrc
.bashrc是针对特定用户的环境变量配置
11、禁用SELinux模式
注:安全增强的Linux(SELinux)允许通过策略设置访问控制。如果在部署CDH时遇到困难,请在将CDH部署到集群之前,在每个主机上将SELinux设置为permissive模式。
每台机执行:检查当前SELinux mode状态
getenforce
如果输出为Disabled或Permissive ,进入下一步
如果输出结果为enforcing,则需要额外4步:
1、vim /etc/selinux/config
2、将SELINUX=enforcing改为SELINUX=permissive
3、保存并关闭文件
4、重新启动系统或运行setenforce 0命令来立即禁用SELinux
12、禁用透明大页配置
Cloudera公司建议关闭透明大页;如果未关闭,就会在后面的环境检测中报错
每台机执行
# 前两行代码:暂时生效,当重启后配置会消失
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
# 后两行代码:把信息加到启动项中,使其永久生效
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
13、集群时间同步
云服务本身已经提供时间服务,我们可用下面命令检查集群时间是否一致
cluster.py date
14、CDH平台权限与命令概览
| 任务 | 需要的权限 |
|---|---|
| 安装Cloudera Manager Server | 安装CM Server的主机需要有root或sudo权限 |
| 使用service或systemctl工具启动、停止或重新启动Cloudera Manager服务器 | Cloudera Manager Server 的主机需要有root或sudo权限;默认情况下服务运行在cloudera-scm用户下 |
| 使用CM安装CDH组件 | 在Cloudera Manager初始安装时配置的如下之一: 有密码或者ssh秘钥的方式访问root用户的权限 为特定用户提供无密码的sudo访问 对于此任务,不支持使用另一个提供root或sudo访问的系统(例如PowerBroker) |
| 使用CM安装CM Agent | 在Cloudera Manager初始安装时配置的如下之一: 有密码或者ssh秘钥的方式访问root用户的权限 为特定用户提供无密码的sudo访问 对于此任务,不支持使用另一个提供root或sudo访问的系统(例如PowerBroker) |
| 自动启动CM Agent进程 | 在运行时访问root帐户,通过以下场景之一: 在Cloudera Manager和CDH安装期间,如果安装成功,代理将自动启动。然后使用以下其中一种启动它,这与Cloudera Manager初始安装期间的配置相同: 有密码或者ssh秘钥的方式访问root用户的权限 为特定用户提供无密码的sudo访问. 对于此任务,不支持使用另一个提供root或sudo访问的系统(例如PowerBroker)。 在系统启动过程中使用init自动启动 |
| 手动启动、停止或重新启动Cloudera Manager Agent进程 | root或sudo 权限。 该权限要求确保Cloudera Manager代理管理的服务可以作为适当的用户运行(例如hdfs服务的hdfs用户)。在CDH服务的Cloudera Manager中运行命令不需要root或sudo访问,因为操作是由Cloudera Manager Agent处理的,它已经作为root在运行了 |
-
如果您想为Cloudera Manager用户配置特定的sudo访问(默认情况下是Cloudera -scm),您可以使用以下列表来完成(CM运行的sudo命令有下面这些):
-
yum (RHEL/CentOS/Oracle)
sed
service
/sbin/chkconfig(RHEL/CentOS/Oracle)
id
rm
mv
chown
install
15、创建用于安装CM的本地 yum源
1、安装httpd服务
创建本地yum源需要指定一台主机提供http服务(在hadoop102)
yum -y install httpd
设置httpd开机自启服务,启动httpd服务,查看httpd服务状态(在hadoop102)
systemctl enable httpd.service
systemctl start httpd
systemctl status httpd
2、安装yum源工具
每台机执行
yum -y install yum-utils createrepo
3、上传CM资源包
CM资源包下载地址:https://pan.baidu.com/s/154WGhMayNRcra-P3RG0jDg?pwd=yyds
在hadoop102创建文件夹,将CM资源包放到这
mkdir -p /var/www/html/cm
4、创建本地yum源
在hadoop102执行,使用createrepo命令创建本地yum源
createrepo /var/www/html/cm/

在hadoop102新建repo文件,这是为了告诉Linux我们自己添加的yum源的位置信息
vim /etc/yum.repos.d/cloudera-manager.repo
[cloudera-manager]
name=Cloudera Manager, Version yum
baseurl=http://hadoop102/cm
gpgcheck=0
enabled=1
分发
rsync.py /etc/yum.repos.d/cloudera-manager.repo
5、清除缓存并建立新的元数据缓存
所有节点执行
# 清理缓存
yum clean all
# 建立元数据缓存
yum makecache
# 验证源是否配置生效
yum list | grep cloudera-manager
浏览器访问
http://hadoop102/cm
16、安装Java
每台机执行:安装JDK
yum -y install oracle-j2sdk1.8.x86_64
单台机执行(含分发操作):~/.bashrc添加Java环境变量
vim ~/setjavahome.sh
sed -i '$a\# JAVA_HOME' /root/.bashrc
sed -i '$a\export JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera' /root/.bashrc
sed -i '$a\export PATH=$JAVA_HOME/bin:$PATH' /root/.bashrc
sed -i '$a\export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' /root/.bashrc
# 分发
rsync.py ~/setjavahome.sh
# 在三台上同时执行添加环境变量的和同步环境变量的操作
cluster.py bash ~/setjavahome.sh && source /root/.bashrc
# 验证java是否安装成功
cluster.py java -version
17、安装MySQL
- Cloudera建议MySQL数据库版本是
5.6 - 使用MySQL的
utf8编码,而不是utf8mb4 - 不支持基于GTID的主从复制(MySQL GTID-based replication is not supported)
1、卸载原有MySQL
service mysql stop 2>/dev/null
service mysqld stop 2>/dev/null
rpm -qa | grep -i mysql | xargs -n1 rpm -e --nodeps 2>/dev/null
rpm -qa | grep -i mariadb | xargs -n1 rpm -e --nodeps 2>/dev/null
rm -rf /var/lib/mysql
rm -rf /usr/lib64/mysql
rm -rf /etc/my.cnf
rm -rf /usr/my.cnf
2、安装MySQL
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update -y
yum install -y mysql-server
systemctl start mysqld
systemctl stop mysqld
3、备份InnoDB日志文件
Move old InnoDB log files
/var/lib/mysql/ib_logfile0and/var/lib/mysql/ib_logfile1out of/var/lib/mysql/to a backup location.
mkdir /root/backup/
mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /root/backup/
ll /var/lib/mysql/
ll /root/backup/
4、配置
vim /etc/my.cnf
覆盖原文件内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
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 = 16M
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=/var/lib/mysql/mysql_binary_log
#In later versions of MySQL, if you enable the binary log and do not set
#a server_id, MySQL will not start. The server_id must be unique within
#the replicating group.
server_id=1
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
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_ALL_TABLES
5、再次启动
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld
6、初始化
/usr/bin/mysql_secure_installation

7、下载JDBC
MySQL 5.6 requires a
5.1driver version5.1.26or higher.
下载
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
解压
tar zxvf mysql-connector-java-5.1.46.tar.gz
复制jar包到/usr/share/java/
mkdir -p /usr/share/java/
cd mysql-connector-java-5.1.46
cp mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar
分发jar包
rsync.py /usr/share/java
8、为Cloudera软件创建数据库和用户
建库的语法
CREATE DATABASE 库名 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
创建用户,设置密码,并给用户授权数据库的语法
GRANT ALL ON 库名.* TO '用户名'@'%' IDENTIFIED BY '密码';
| Service | Database | User |
|---|---|---|
| Cloudera Manager Server | scm | scm |
| Activity Monitor | amon | amon |
| Reports Manager | rman | rman |
| Hue | hue | hue |
| Hive Metastore Server | hive | hive |
| Sentry Server | sentry | sentry |
| Cloudera Navigator Audit Server | nav | nav |
| Cloudera Navigator Metadata Server | navms | navms |
| Oozie | oozie | oozie |
实际操作(注意修改密码)
mysql -u'root' -p
-- 建库
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
-- 创建用户,设置密码,并给用户授权数据库
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '密码';
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY '密码';
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY '密码';
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY '密码';
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY '密码';
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY '密码';
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY '密码';
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY '密码';
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY '密码';
-- 刷新特权
FLUSH PRIVILEGES;
-- 查看建库情况
SHOW DATABASES;
-- 查看用户情况
SHOW GRANTS FOR 'scm'@'%';
SHOW GRANTS FOR 'amon'@'%';
SHOW GRANTS FOR 'rman'@'%';
SHOW GRANTS FOR 'hue'@'%';
SHOW GRANTS FOR 'hive'@'%';
SHOW GRANTS FOR 'sentry'@'%';
SHOW GRANTS FOR 'nav'@'%';
SHOW GRANTS FOR 'navms'@'%';
SHOW GRANTS FOR 'oozie'@'%';
18、通过yum安装daemons、agent、server
hadoop102安装daemons,agent,server
yum -y install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
hadoop103和hadoop104安装daemons,agent
yum -y install cloudera-manager-daemons cloudera-manager-agent
在hadoop102执行:使用scm用户为scm数据库创建表,要输入之前设定的密码
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm

19、配置本地Parcel存储库
cd /opt/cloudera/parcel-repo/
上传4个文件到/opt/cloudera/parcel-repo/(该文件夹是刚才安装CM之后自动生成的)
下载地址同上CM资源包下载地址
cp CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
sudo chown -R cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo/*
sudo chmod u+x /opt/cloudera/parcel-repo/*
ll
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel约2G,含Hadoop、HIVE、Spark等安装包
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1、
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256、
manifest.json这三个是校验文件
20、启动cloudera-scm-server
hadoop102启动cloudera-scm-server
systemctl start cloudera-scm-server
查看cloudera-scm-server是否启动成功
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
有2个状态码401的error,不用管
ERROR ParcelUpdateService:com.cloudera.parcel.components.ParcelDownloaderImpl:
Failed to download manifest
ERROR ParcelUpdateService:com.cloudera.parcel.components.ParcelDownloaderImpl:
Could not retrieve repository info for repo
netstat -tunlp | grep 7180
日志出现
Started Jetty server表示成功;或者查看7180端口
21、网页登录
浏览器访问
http://hadoop102:7180
初始的用户:admin
初始的密码:admin
勾选接受许可,继续
选择免费版,继续
22、集群安装
欢迎(一个CM可以装多个集群),继续
填写集群名称,继续
搜索主机并勾选(初次的
当前受管全是否),继续
填写CM库地址及选择CDH parcel包,继续
之前已经装了JDK,此处不勾选,继续
提供 SSH 登录凭据,输入Linux的root用户的密码,继续
安装Agents和Parcels,自动装好的
然后进入检查集群界面
检测通过,继续
22、集群组件安装
选择自定义服务,勾选想要装的组件,继续
角色分配
按主机查看(注意NN和2NN要分开,内存占用大的要错开,ZooKeeper全选)
配置数据库密码
配置组件的初始参数(
审核更改)
改下Kafka,其它默认即可
安装(
命令详细信息)
安装完成(
汇总)
23、进入集群
主界面
修改语言
修改密码
配置HDFS域名访问
dfs.client.use.datanode.hostname


























1964



被折叠的 条评论
为什么被折叠?



