大家好,我是小轩
最近比较忙,想整理的比较多,从这篇开始吧!
硬件配置需求
1、所需硬件
- 服务器(台式机)4台
- 路由器1台,千兆。
- 显示器1台
- 键盘鼠标1套
- 网线5条
- 接线板1个
2、服务器硬件配置
- 内存:16G
- CPU:4核
- 硬盘:500Gb
- 网卡:千兆网卡1个
- USB接口:可使用
3、操作系统
- 1台Windows 10
- 3台Linux Centos 7
4、软件配置
所需软件:
- window 10,centos 7,UltraISO
- Xshell,Xftp:在windows上,用于远程连接
- Cloudera Manager 6.3.1,CDH 6.3.2
- JDK1.8,MySQL5.7
大数据服务器安装方案
此方案为暂定方案,有可能会变更。如果直接使用CDH会更加方便,但是如果进行自行配置,需要做实验。
安装操作系统
使用U盘安装Windows和Linux Centos7操作系统
使用工具UltralSO的试用版制作U盘启动盘,版本如下所示。并不是所有的版本都可以制作。
Windows下载windows 10 Pro版本(系统之家下载)(FQHY_WIN10_X64_Q8_V2021.08T.iso),然后使用U盘制作Windows PE启动盘。对于Dell电脑,启动电脑,按F12,选择Windows PE,之后对操作系统进行格式化,并进行安装。设置用户名密码。Administrator:root
Linux CentOS7的安装。下载ISO安装文件CentOS-7-x86_64-DVD-1804.iso。使用UltraISO制作U盘(打开软件,选择要处理的文件,制作硬盘映射,选择目标U盘,直接制作)。将制作后的U盘插入电脑,启动时F12,选择U盘启动,安装Linux操作系统(格式化硬盘,选择时区,选择安装的类型-数据中心等不同模式,安装的部件不同),设置用户名密码。root:root
查看硬件配置
Windows 10:电脑--》计算机管理--》设备管理器(CPU核数),磁盘管理(磁盘大小)。电脑--》属性(内存,CPU型号,磁盘,操作系统)。任务管理器(处理器核数,线程——对于Intel处理器可能存在超线程,1核2线程)。
CentOS7:
操作系统:cat /proc/version;uname;cat /etc/issue; cat /etc/redhat-release。CentOS7.5
机器位数:getconf LONG_BIT。64位
CPU: cat /etc/cpuinfo。4核
内存:cat /etc/meminfo。12Gb
磁盘:df -h;du (disk usage)
组建局域网
设置IP
路由器(AirStation,一个WAN口,四个LAN口,IP:192.168.11.1,用户名:root,密码空):100M/s;
Windows 10 Pro为client有,设置IP:192.168.11.2,子网掩码255.255.255.0;
CentOS7,设置静态IP:192.168.11.3,192.168.11.4,192.168.11.5;
查看ip信息,ifconfig。物理网卡为P4P1;
设置静态IP:
代码语言:javascript复制vi /etc/sysconfig/network-scripts/ifcfg-p4p1(此处为物理网卡名称)
#设置如下
bootproto=static(dhcp-动态获取,static-静态ip,pppoe-拨号)
onboot=yes
IPADDR=192.168.11.3/4/5
NETMASK=255.255.255.0
GATEWAY=192.168.11.1
#重启网络服务
systemctl restart network
#确认IP
ifconfig
组网连接
四台机器插入四个LAN
Windows:安装Xshell,Xftp。个人免费版。ping通,然后使用它们访问其他三台服务器,确认没有问题。
CM和CDH安装步骤
选择安装版本
CM6.3.1,CDH6.3.2。对于CM,只有主版本和次版本大于等于CDH即可使用CM6.3.1:
代码语言:javascript复制cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm
cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm
allkeys.asc
其中(allkeys.asc非常重要,是配置文件,如果没有的话,在后期使用CM创建客户端时需要手动在各个服务器上配置,操作方式根据官方操作手册)
CDH6.3.2:
代码语言:javascript复制CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
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
其中manifest.json是配置文件,重要
相关文件下载地址在csdn上有“cdh6.3.2 cm6.3.1下载“,或者官网上下载(需要账号)
环境准备
修改主机名(所有节点)
此为临时修改
代码语言:javascript复制hostnamectl set-hostname cdh1
hostnamectl set-hostname cdh2
hostnamectl set-hostname cdh3
设置主机名映射(所有节点及客户端)
windows 10:c:/windows/system32/driver/etc/hosts(查看,更多项目,显示文件后缀,显示隐藏文件,如果没有hosts文件,则新建该文件),添加
192.168.11.3 cdh1
CentOS7(三台服务器都修改):/etc/hosts
代码语言:javascript复制192.168.11.3 cdh1
192.168.11.4 cdh2
192.168.11.5 cdh3
关闭并禁用防火墙(所有节点)
代码语言:javascript复制#关闭防火墙
systemctl stop firewalld.service
#禁止开机启动防火墙
systemctl disable firewalld.service
#验证防火墙状态
systemctl status firewalld.service
关闭Linux核心安全模块selinux(所有节点)
代码语言:javascript复制#临时关闭selinux
setenforce 0
#永久关闭selinux
vi /etc/selinux/config
SELINUX=disabled
#验证selinux
cat /etc/selinux/config
设置ssh免密登录(所有节点)
代码语言:javascript复制#生成公钥和私钥,无需指定口令密码,直接回车
ssh-keygen -t rsa
#进入到.ssh/目录
cd ~/.ssh
#将公钥拷贝到要免密登录的目标机器上
ssh-copy-id cdh1
ssh-copy-id cdh2
ssh-copy-id cdh3
#验证,在任意机器上对集群其他节点进行进行ssh登陆
ssh cdh2/cdh3
禁用透明大页面(所有节点)
内存管理相关配置
代码语言:javascript复制cat /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
#以下是关闭操作
#临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
#永久关闭
#将临时关闭的命令添加到/etc/rc.d/rc.local文件中,并赋予执行权限
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local
chmod x /etc/rc.d/rc.local
#验证
cat /etc/rc.d/rc.local
修改Linux swappiness(所有节点)
Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10,虚拟内存
代码语言:javascript复制#临时修改
sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness
#永久修改,在/etc/sysctl.conf 文件里添加如下参数
vm.swappiness=10
配置linux本地yum源
在/opt/下面新建linux
上载linux操作系统的iso文件至/opt/linux
在/media下新建centos7
在/media下mount该iso文件
这里是临时挂载,mount /opt/linux/CentOS-7-x86_64-DVD-1804.iso /media/centos7/
如果需要永久挂载:
先对/etc/yum.repos.d/下相关的repo文件做好备份,删除/etc/yum.repos.d/下除了CentOS-Media.repo的文件;
然后配置CentOS-Media.repo的文件,和上面挂在的目录一样:mount /opt/linux/CentOS-7-x86_64-DVD-1804.iso /media/centos7/;
最后需要激活一下:yum-config-manager --enable c7-media;
也可以重新建一个yum-centos7.repo,配置urlbase连接,这里没试过;
安装jdk
jdk不同于jre,前者具有开发相关的包,后者只是运行java的环境,前者包含后者
rpm看一下是否已经完成了安装,如果安装了,卸载,重新安装
代码语言:javascript复制rpm -qa | grep java
rpm -qa | grep jdk
如果之前安装过Java组件,先将其卸载
代码语言:javascript复制yum remove XXX
!将上面查出来的全部删除,删完再次查询,查到没有为止;
yum安装
查看有哪些包
这里下载:java-1.8.0-openjdk-devel.x86_64
代码语言:javascript复制yum install java(需要指定版本号,使用的是CentOS7自带的java8的rpm包)
#或者rpm -ivh oracle-j2sdk1.8-1.8.0 update181-1.x86_64.rpm
#查找java安装路径
find / -name java
安装好的目录在:/usr/lib/jvm
配置环境变量
代码语言:javascript复制#修改配置文件
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
#刷新并验证是否安装成功
source /etc/profile
java -version
javac -version
jdk的安装本次选择rpm安装,并没有使用java的tar包安装,原因是如果使用tar包安装,在后期CM的环境确认时,不能自动发现安装的jdk,从而可能导致返工,使用java的tar包安装的方式查看“参考内容”中的[java tar包安装方式]
部署NTP服务器进行时间同步
大数据平台使用时间进行验证是否运行正常,如果系统时间相差超过一定时间,会预警甚至报错,因此需要定期同步时间
时间同步的方式:找一个机器, 作为时间服务器, 所有的机器与这台集群时间进行定时的同步, 比如, 每隔十分钟, 同步一次时间。时间服务器为cdh1(192.168.11.3)
检查ntp是否安装(所有节点)
代码语言:javascript复制rpm -qa | grep ntp
#如果没有,则安装ntp
yum install ntp ntpdate
如果出现安装失败问题,如下解决办法:
解决方法:
代码语言:javascript复制vi /etc/yum/pluginconf.d/fastestmirror.conf修改enable=1为enable=0
vi /etc/yum.conf将plugin=1/改为0
yum clean all
rm -rf /var/cache/yum
yum makecache
以下表示已经安装
修改ntp配置文件
代码语言:javascript复制vi /etc/ntp.conf
#1 授权可以访问此时间服务器的网段
restrict 192.168.11.0 mask 255.255.255.0 nomodify notrap
#2 禁止使用互联网时间,注释掉使用的互联网服务器
#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
#3 当该节点丢失网络连接, 依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 修改/etc/sysconfig/ntpd 文件,增加内容如下(让硬件时间与系统时间一起同步)
vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
查看ntpd服务,重启ntpd服务,并设置开机启动
代码语言:javascript复制systemctl status ntpd.service
systemctl restart ntpd.service
systemctl enable ntpd.service
其他机器配置(root用户)
配置与时间服务器10分钟同步一次,编写定时任务
代码语言:javascript复制crontab -e
*/10 * * * * /usr/sbin/ntpdate cdh1
crontab -l
在时间服务器cdh1上设置任意时间,10分钟后查看其他服务器的时间同步情况
代码语言:javascript复制#时间服务器cdh1上设置任意时间
timedatectl set-time '2010-01-01 12:01:01'
#10分钟后查看其他服务器的时间同步情况
timedatectl
如果不同步,先同步网络时间,然后同步本地时间,最后启动ntpd服务器
代码语言:javascript复制systemctl stop ntpd.service
ntpdate ntp1.aliyun.com
hwclock --systohc
systemctl start ntpd.service
其他节点操作2
完成以上步骤,时间可以同步,但是在CM配置时会提示时间不同步,原因是使用的命令为
代码语言:javascript复制ntpdc -np
会发现它们无法连接时间服务器,所以需要其他节点也做一下配置;
设置/ntp.conf,添加将server 改成cdh1
启动ntpd服务并设置开机启动
代码语言:javascript复制vi /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
server cdh1
#启动ntpd服务
systemctl status ntpd.service
systemctl restart ntpd.service
systemctl enable ntpd.service
安装mysql
mysql安装在cdh1上
下载安装包
从官网上下载,mysql的操作系统选择Redhat(CentOS没有显示,本质上是Redhat)。没有选择Linux通用的tar包(需要编译和配置),使用的是rpm bundle包。
上载至/opt/mysql目录下,解压出5个rpm文件
安装mysql
安装mysql依赖
代码语言:javascript复制cd /opt/mysql/
rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.35-1.el7.x86_64.rpm
安装mysql客户端
代码语言:javascript复制rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm
安装mysql服务器端
代码语言:javascript复制rpm -ivh mysql-community-server-5.7.35-1.el7.x86_64.rpm
启动mysql
代码语言:javascript复制systemctl start mysqld
查看首次启动密码
代码语言:javascript复制cat /var/log/mysqld.log | grep password
配置mysql
用刚刚查到的密码进入 mysql,不需要引号
代码语言:javascript复制mysql -uroot -p')tD47_.H(9gu'
设置复杂密码(由于 mysql 密码策略, 此密码必须足够复杂)
代码语言:javascript复制mysql> set password=password("Qs23=zs32");
更改密码策略
代码语言:javascript复制mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
设置简单密码
代码语言:javascript复制mysql> set password=password("root");
进入mysql,更新user表,将Host字段改为‘%’,并刷新,然后退出mysql
代码语言:javascript复制use mysql;
select user,host from user;
update user set host='%' where user='root';
flush privileges;
quit;
mysql权限控制的信息参考mysql.user说明
更改mysql的配置文件 /etc/my.conf
代码语言:javascript复制cp /etc/my.cnf /etc/my.cnf.bak
vi /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 = 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=/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
重启mysql,设置开机自动启动
代码语言:javascript复制systemctl restart mysqld
systemctl enable mysqld
重启之后,有可能自己的密码管理策略变更成之前的策略,如果是这样,需要更新mysql的密码策略
代码语言:javascript复制mysql> show variables like 'validate_password%'
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
登录mysql,创建数据库和用户(CM后面会用到的用户和数据库)
代码语言:javascript复制这里创建存储元数据表:
mysql -uroot -proot
CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'root';
CREATE DATABASE amon DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON amon.* TO 'amon'@'%' IDENTIFIED BY 'root';
CREATE DATABASE rman DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON rman.* TO 'rman'@'%' IDENTIFIED BY 'root';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'root';
CREATE DATABASE metastore DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON metastore.* TO 'metastore'@'%' IDENTIFIED BY 'root';
CREATE DATABASE sentry DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON sentry.* TO 'sentry'@'%' IDENTIFIED BY 'root';
CREATE DATABASE nav DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON nav.* TO 'nav'@'%' IDENTIFIED BY 'root';
CREATE DATABASE navms DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON navms.* TO 'navms'@'%' IDENTIFIED BY 'root';
CREATE DATABASE oozie DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON oozie.* TO 'oozie'@'%' IDENTIFIED BY 'root';
flush privileges;
#开放mysql远程权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;
统一将密码改成了'root'
关于创建数据库的信息,查看链接;关于mysql show的用法,参看链接;关于MySQL Grant的用法,参看链接
配置数据库连接
上传jdbc依赖包(所有节点)
创建目录,上传,重命名
代码语言:javascript复制mkdir -p /usr/share/java
cp /opt/mysql/mysql-connector-java-8.0.26.jar /usr/share/java
mv /usr/share/java/mysql-connector-java-8.0.26.jar /usr/share/java/mysql-connector-java.jar
移动都其它服务器
代码语言:javascript复制scp /usr/share/java/mysql-connector-java.jar root@cdh2:/usr/share/java/
scp /usr/share/java/mysql-connector-java.jar root@cdh3:/usr/share/java/
安装CM
配置本地cloudera manager仓库
在主节点上操作,即cdh1
创建本地CM仓库文件夹,并上载安装程序
代码语言:javascript复制mkdir -p /var/www/html/cloudera-repos/cm6/
注意,需要的文件中包括四个allkeys.asc,agent.rpm,daemons.rpm,server.rpm,全称中el7表示linux7
安装httpd和createpo
代码语言:javascript复制#安装httpd和createpo
yum -y install httpd createrepo
#启动 httpd 服务并设置为开机自启动
systemctl start httpd && systemctl enable httpd
#生成 RPM,注意最后必须有 .
cd /var/www/html/cloudera-repos/cm6/ && createrepo .
通过浏览器访问了:默认端口 80
代码语言:javascript复制http://cdh1/cloudera-repos/cm6/
说明:如果使用离线下载安装rpm的方式,httpd的版本不一定要最新,最新的话有可能不满足CM的要求,所以建议使用CentOS7自带的httpd进行安装。createrepo 命令用于创建yum源(软件仓库),即为存放于本地特定位置的众多rpm包建立索引,描述各包所需依赖信息,并形成元数据,可参看链接
配置本地cdh仓库
在主节点cdh1上操作
创建目录,上载文件
代码语言:javascript复制mkdir -p /var/www/html/cloudera-repos/cdh6/
#上传下载好的 CDH 安装包放入 /var/www/html/cloudera-repos/cdh6/ 目录
#生成 RPM,注意最后必须有 .
cd /var/www/html/cloudera-repos/cdh6/ && createrepo .
#通过浏览器访问了:默认端口80
代码语言:javascript复制http://cdh1/cloudera-repos/cdh6/
构建yum源(局域网)
在所有服务器上执行
代码语言:javascript复制#删除无用repo配置文件
cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
rm -f /etc/yum.repos.d/*.repo
vi /etc/yum.repos.d/cloudera-repo.repo
[cloudera-repo]
name=cloudera-repo
baseurl=http://cdh1/cloudera-repos/cm6/
enabled=1
gpgcheck=0
yum clean all
yum makecache
安装CM Server和Agent
主节点上cdh1
代码语言:javascript复制yum install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
从节点上cdh2和cdh3
代码语言:javascript复制yum install cloudera-manager-daemons cloudera-manager-agent
建立CM数据库(参考文档:官网创建 CM 数据库教程,)
代码语言:javascript复制/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm root
启动CM Server
代码语言:javascript复制主节点上cdh1
#启动服务
systemctl start cloudera-scm-server
#查看服务的状态
systemctl status cloudera-scm-server
#查看系统日志
journalctl -xe
#默认日志存放地方
/var/log/cloudera-scm-server
访问服务
代码语言:javascript复制http://cdh1:7180
接下来我们来配置CM,由于配置的时候时间紧张,每个页面没有截图,但根据文字描述完全可以进行安装了;
配置CM
用户登录
http://cdh1:7180
用户名:admin ,密码:admin
选择版本
1、欢迎页面
2、接受最终用户许可条款和条件。
3、选择免费版本
进行配置
1、欢迎页面!大数据服务器集群配置
2、群集名称,可随便写
3、扫描主机,输入主机名称点击搜索(cdh1,cdh2,cdh3)
4、选择存储库
自定义存储库:http://cdh1/cloudera-repos/cm6/
远程 Parcel 存储库 URL :http://cdh1/cloudera-repos/cdh6/
保存更改 继续
5、JDK 安装选项,跳过不需要勾选(前面应安装过了)
6、提供 SSH 登录凭据
7、Install Agents ,自动安装
之前安装缺少allkeys.asc,所以采用手动安装的方式进行,具体的安装方式参考官网安装手册。手动安装之后,检测和更新Agent,如果没有问题,再次登录CM进行配置,可继续进行下面的安装。
这里安装直接将allkeys.asc文件放在指定的位置,所以不需要参考官网的安装手册。
8、Inspect Cluster检查集群
先点击 Inspect Network Performance 再点击 Inspect Hosts
警告,点击 显示检查器结果,对相对应的警告做相对应的措施就可以了。如果完全按照上面的教程走,是不会有警告的。
安装CDH
1、选择安装的内容和服务
这里采用自定义安装
本次是自定义安装 ,安装的内容包括HDFS,YARN,ZooKeeper,Oozie,Hive,Hue,Spark,Impala,Hbase。
2、自定义角色分配
具体角色配置可查看CM
3、数据库配置
选择各个数据库,用户名,密码,并进行测试
审核更改,默认设置(配置各个参数),命令详细信息
如果集群资源不够,可以先申请一个集群,然后依次添加服务;
4、CM管理页面
之后出现的任何告警等,都可以进行自定义配置和解决
安装的各个服务的版本,可通过cdh的mansion.json文件查看,或者根据CM上主机的部件查看
最后,因为我们当时集群资源有限,而且需要添加的服务很多,导致最后安装服务的时候因为资源配比不能成功启动服务,但艰难配置之后才成功的;
总结,没有什么事是可以一次成功的。