前言:一、集群准备安装
1.1 修改服务器hosts文件(所有节点)1.2 防火墙设置(所有节点)1.3 selinux关闭(所有节点)1.4 时间同步
1.4.1 安装ntp时间同步服务器(所有节点)1.4.2 修改主机名1.4.3 所有从节点 1.5 编写集群分发脚本xsync1.6 SSH无密登录配置1.7 JDK准备1.8 MySQL安装(主节点)
1.8.1 安装包准备1.8.2 安装MySQL1.8.3 配置MySQL1.8.4 创建CM用的数据库1.8.5 jdbc连接 1.9 CM部署
1.9.1 下载第三方依赖(所有节点)1.9.2 主节点安装daemons, server, agent1.9.3 子节点安装daemons, agent1.9.4 所有节点启动 agent1.9.5 页面配置1.9.6 Hdfs Web UI访问端口查询1.9.7 Hdfs Web UI文件夹创建
前言:最近接到搭建CDH集群的任务
在集群搭建过程中一直在网上查询搭建流程,资料千奇百怪。
总体来说网上提供的资料总会在关键部分缺斤少两,对新手很不友好,中间踩坑无数
碰到了不少问题并总结了一套搭建平滑的流程
在这里进行总结,方便下次再次进行集群搭建
服务器是aliyun服务器,新租的服务器从头开始搭建。
搭建过程中的错漏或者隐患欢迎大家指出
[root@hadoop001 ~]# vim /etc/hosts
127.0.0.1 localhost localhost ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.17.138.24 hadoop001 172.17.138.25 hadoop002 172.17.138.23 hadoop003
注意:这里每个人不一样,ip填写的是私有ip,做完后ping一下。
1.2 防火墙设置(所有节点)#关闭防火墙 [atguigu@hadoop102 ~]$ systemctl stop firewalld #禁用防火墙 [atguigu@hadoop102 ~]$ systemctl disable firewalld #清空防火墙规则 [atguigu@hadoop102 ~]$ iptables -F1.3 selinux关闭(所有节点)
[atguigu@hadoop102 ~]$ cat /etc/selinux/config
修改
SELINUX=disabled
安装ntpd服务 检查ntp是否已安装,否则安装 [root@hadoop001 ~]# rpm -qa|grep ntp 安装ntp [root@hadoop001 ~]# yum install ntp 激活ntp服务 [root@hadoop001 ~]# systemctl enable ntpd 永久开启ntpd业务 [root@hadoop001 ~]# systemctl start ntpd 查看ntp服务状态,切记要reboot重启服务器,否则下面指令执行后无法时间同步 [root@hadoop001 ~]# systemctl status ntpd
所有节点设置时区,中国上海:
[root@hadoop001 ~]# timedatectl set-timezone Asia/Shanghai
[root@hadoop001 ~]# hostnamectl set-hostname "hadoop102" 在主节点hadoop102编辑ntp.conf文件,其它4台服务器同步即可 [root@hadoop001 ~]# vim /etc/ntp.conf server 127.127.1.0 fudge 127.127.1.0 startum 10
server注释掉
添加主节点
[atguigu@hadoop102 ~]$ vi /etc/ntp.conf
在其它节点上手动同步rjtx221的时间
[atguigu@hadoop102 ~]# ntpdate -u hadoop102
所有节点启动时间同步
[atguigu@hadoop102 ~]# timedatectl set-ntp yes
查看同步状态
[atguigu@hadoop102 ~]# ntpstat1.5 编写集群分发脚本xsync
①在用的家目录/home/atguigu下创建bin文件夹
[atguigu@hadoop102 ~]$ mkdir bin
②在/home/atguigu/bin目录下创建xsync文件,以便全局调用
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin [atguigu@hadoop102 ~]$ vim xsync
在该文件中编写如下代码
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
③修改脚本xsync具有执行权限
[atguigu@hadoop102 bin]$ chmod +x xsync
④测试脚本
[atguigu@hadoop102 bin]$ xsync xsync
如果报错是缺少rsync
如果该命令执行依然无法安装rsync
[atguigu@hadoop102 bin]$ yum install rsync -y
下载rsync的rpm包,依赖包下载网页:
https://centos.pkgs.org/7/centos-x86_64/
红框处直接搜索需要的依赖包 rsync
根据当前系统选择对应的rsync包
复制红框出网址,在网址下载依赖
将依赖包通过xshell拖入服务器,通过rpm安装
[root@cdh3 software]# rmp -ivh rsync-3.1.2-10.el7.x86_64.rpm1.6 SSH无密登录配置
(1)hadoop102上生成公钥和私钥:
[atguigu@hadoop102 .ssh]# ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(2)将hadoop102公钥拷贝到要免密登录的目标机器上
[atguigu@hadoop102 .ssh]$ ssh-copy-id cdh0 [atguigu@hadoop102 .ssh]$ ssh-copy-id cdh1 [atguigu@hadoop102 .ssh]$ ssh-copy-id cdh2 [atguigu@hadoop102 .ssh]$ ssh-copy-id cdh3
(3)hadoop103上生成公钥和私钥:
[atguigu@hadoop103 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
(4)将hadoop103公钥拷贝到要免密登录的目标机器上
[atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop103 [atguigu@hadoop103 .ssh]$ ssh-copy-id hadoop1041.7 JDK准备
1)卸载现有JDK(3台节点)
[atguigu@hadoop102 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps [atguigu@hadoop103 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps [atguigu@hadoop104 opt]# sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps (1)rpm -qa:表示查询所有已经安装的软件包 (2)grep -i:表示过滤时不区分大小写 (3)xargs -n1:表示一次获取上次执行结果的一个值 (4)rpm -e --nodeps:表示卸载软件
2)用XShell工具将JDK导入到hadoop102的/opt/software文件夹下面
3)解压JDK到/opt/module目录下
[atguigu@hadoop102 software]# mkdir /usr/java [atguigu@hadoop102 software]# tar -zxvf jdk-8u212-linux-x64.tar.gz -C /usr/java
修正用户组/用户权限:
[atguigu@hadoop102 software]# chown -R root:root /usr/java/jdk1.8.0_212/ [atguigu@hadoop102 software]# xsync /usr/java/jdk1.8.0_212
4)配置JDK环境变量(三台节点)
(1)配置/etc/profile
[atguigu@hadoop102 module]# vim /etc/profile
添加如下内容,然后保存(:wq)退出
#JAVA_HOME export JAVA_HOME=/usr/java/jdk1.8.0_212 export PATH=$PATH:$JAVA_HOME/bin
(2)让环境变量生效(所有节点)
[atguigu@hadoop102 software]$ source /etc/profile
(3)查看是否安装成功
[atguigu@hadoop102 software]$ java -version1.8 MySQL安装(主节点) 1.8.1 安装包准备
1)将安装包和JDBC驱动上传到/opt/software,共计6个
01_mysql-community-common-5.7.16-1.el7.x86_64.rpm 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm mysql-connector-java-5.1.27-bin.jar
2)如果是虚拟机按照如下步骤执行
(1)卸载自带的Mysql-libs(如果之前安装过MySQL,要全都卸载掉)
[atguigu@hadoop102 software]$ rpm -qa | grep -i -E mysql|mariadb | xargs -n1 sudo rpm -e --nodeps
3)如果是阿里云服务器按照如下步骤执行
说明:由于阿里云服务器安装的是Linux最小系统版,没有如下工具,所以需要安装。
(1)卸载MySQL依赖,虽然机器上没有装MySQL,但是这一步不可少
[atguigu@hadoop102 software]# sudo yum remove mysql-libs
(2)下载依赖并安装
[atguigu@hadoop102 software]# sudo yum install libaio [atguigu@hadoop102 software]# sudo yum -y install autoconf1.8.2 安装MySQL
1)安装MySQL依赖
[atguigu@hadoop102 software]$ sudo rpm -ivh 01_mysql-community-common-5.7.16-1.el7.x86_64.rpm [atguigu@hadoop102 software]$ sudo rpm -ivh 02_mysql-community-libs-5.7.16-1.el7.x86_64.rpm [atguigu@hadoop102 software]$ sudo rpm -ivh 03_mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
2)安装mysql-client
[atguigu@hadoop102 software]$ sudo rpm -ivh 04_mysql-community-client-5.7.16-1.el7.x86_64.rpm
3)安装mysql-server
[atguigu@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm
注意:如果报如下错误,这是由于yum安装了旧版本的GPG keys所造成,从rpm版本4.1后,在安装或升级软件包时会自动检查软件包的签名。
warning: 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY error: Failed dependencies: libaio.so.1()(64bit) is needed by mysql-community-server-5.7.16-1.el7.x86_64
解决办法
[atguigu@hadoop102 software]$ sudo rpm -ivh 05_mysql-community-server-5.7.16-1.el7.x86_64.rpm --force --nodeps
4)启动MySQL
[atguigu@hadoop102 software]$ sudo systemctl start mysqld
5)查看MySQL密码
[atguigu@hadoop102 software]$ sudo cat /var/log/mysqld.log | grep password1.8.3 配置MySQL
配置只要是root用户 + 密码,在任何主机上都能登录MySQL数据库。
创建用户组及用户(未实践)
[atguigu@hadoop102 local]$ groupadd -g 101 dba [atguigu@hadoop102 local]$ useradd -u 514 -g dba -G root -d /local/mysql mysqladmin [atguigu@hadoop102 local]$ id mysqladmin [atguigu@hadoop102 local]$ cp /etc/skel/.* /usr/local/mysql [atguigu@hadoop102 local]$ su - mysqladmin [atguigu@hadoop102 local]$ vi .bashrc
添加
export MYSQL_base=/usr/local/mysql
export PATH=${MYSQL_base}/bin:$PATH
赋权限和用户组
[atguigu@hadoop102 mysql]$ chown -R mysqladmin:dba /etc/my.cnf [atguigu@hadoop102 mysql]$ chown -R 755 /usr/local/mysql [atguigu@hadoop102 mysql]$ cp support-flies/mysql.server /etc/rc.d/init.d/mysql [atguigu@hadoop102 mysql]$ chmod +x /etc/rc.d/init.d/mysql [atguigu@hadoop102 mysql]$ chkconfig –add mysql [atguigu@hadoop102 mysql]$ bin/mysqld --defaults-file=/etc/my.cnf --user=mysqladmin --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize [atguigu@hadoop102 mysql]$ cd data
1)用刚刚查到的密码进入MySQL(如果报错,给密码加单引号)
[atguigu@hadoop102 software]$ mysql -uroot -p'password'
2)设置复杂密码(由于MySQL密码策略,此密码必须足够复杂)
mysql> set password=password("Qs23=zs32");
3)更改MySQL密码策略
mysql> set global validate_password_length=4; mysql> set global validate_password_policy=0;
4)设置简单好记的密码
mysql> set password=password("88888888");
5)进入MySQL库
mysql> use mysql
6)查询user表
mysql> select user, host from user;
7)修改user表,把Host表内容修改为%
mysql> update user set host="%" where user="root";
8)刷新
mysql> flush privileges;
9)退出
mysql> quit;1.8.4 创建CM用的数据库
在MySQL中依次创建监控数据库、Hive数据库、Oozie数据库、Hue数据库
1)启动数据库
[root@hadoop102 ~]# mysql -uroot -p88888888
2)集群监控数据库
mysql> create database cmf DEFAULT CHARSET utf8 COLLATE utf8_general_ci; mysql> create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci; mysql> set global validate_password_length=4; mysql> set global validate_password_policy=0; mysql> grant all privileges on cmf.* to 'cmf'@'%' identified by '88888888'; mysql> grant all privileges on amon.* to 'amon'@'%' identified by '88888888';
3)Hive数据库
mysql> create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
4)Oozie数据库
mysql> create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
5)Hue数据库
mysql> create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
6)关闭数据库
mysql> flush privileges; mysql> quit;1.8.5 jdbc连接
创建/usr/share/java [atguigu@hadoop102 mysql]$ mkdir -p /usr/share/java jdbc安装包移动到/usr/share/java并重命名: [atguigu@hadoop102 mysql]$ mv /opt/software/mysql/mysql-connector-java-5.1.27-bin.jar /usr/share/java/mysql-connector-java.jar1.9 CM部署 1.9.1 下载第三方依赖(所有节点)
依次在三台节点(所有Agent的节点)上执行下载第三方依赖(注意:需要联网)
[root@hadoop102 ~]# yum -y install chkconfig python bind-utils psmisc libxslt zlib sqlite cyrus-sasl-plain cyrus-sasl-gssapi fuse fuse-libs redhat-lsb portmap httpd mod_ssl openssl-devel python-psycopg2 MySQL-python libpq.so.51.9.2 主节点安装daemons, server, agent
rpm -ivh cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm rpm -ivh cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm # server [root@hadoop102 ~]# vi /etc/cloudera-scm-server/db.properties
# Copyright (c) 2012 Cloudera, Inc. All rights reserved. # # This file describes the database connection. # # The database type # Currently 'mysql', 'postgresql' and 'oracle' are valid databases. com.cloudera.cmf.db.type=mysql # The database host # If a non standard port is needed, use 'hostname:port' #com.cloudera.cmf.db.host=hadoop102:3306 # The database name com.cloudera.cmf.db.name=cmf # The database user com.cloudera.cmf.db.user=cmf # The database user's password com.cloudera.cmf.db.password=88888888 # The db setup type # After fresh install it is set to INIT # and will be changed post config. # If scm-server uses Embedded DB then it is set to EMBEDDED # If scm-server uses External DB then it is set to EXTERNAL com.cloudera.cmf.db.setupType= EXTERNAL
启动server和agent
主节点启动server
systemctl start cloudera-scm-server
查看日志,出现7180说明启动成功,,有错误解决错误
tail -F /var/log/cloudera-scm-server/cloudera-scm-server.log
如果在不打开防火墙的情况下可以访问端口,可以不进行防火墙打开操作
7180防火墙打开
选择配置规则->添加安全组规则
打开web界面先不要动!!!!!!!!
[root@hadoop102 ~]# rpm -ivh cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm --nodeps --force [root@hadoop102 ~]# vi /etc/cloudera-scm-agent/config.ini 指定cm server [General] # Hostname of the CM server. server_host=hadoop102
如果日志中有报错
将manifest.json文件放入 /opt/cloudera/parcel-repo/目录
1.9.3 子节点安装daemons, agent[root@hadoop103 ~]# rpm -ivh cloudera-manager-daemons-6.1.0-769885.el7.x86_64.rpm --nodeps --force [root@hadoop103 ~]# rpm -ivh cloudera-manager-agent-6.1.0-769885.el7.x86_64.rpm --nodeps --force [root@hadoop103 ~]# vi /etc/cloudera-scm-agent/config.ini 指定cm server [General] # Hostname of the CM server.1.9.4 所有节点启动 agent
[root@hadoop102 ~]# systemctl start cloudera-scm-agent [root@hadoop103 ~]# systemctl start cloudera-scm-agent [root@hadoop104 ~]# systemctl start cloudera-scm-agent1.9.5 页面配置
选择免费版本
添加集群名
全选
配置parcel
[root@hadoop102 cm6.1]# yum install -y httpd [root@hadoop102 cm6.1]# mkdir /var/www/html/cdh6_parcel
主节点
两个parcel文件和manifest.json文件移动到 /var/www/html/cdh6_parcel 并去除后缀 [root@hadoop102 cm6.1]# mv ../cdh6.1/CDH-6.1.0-1.cdh6.1.0.p0.770702-el7.parcel /var/www/html/cdh6_parcel/ [root@hadoop102 cm6.1]# service httpd start
选项下的全部移除
将httpd地址拷贝进去
http://hadoop102/cdh6_parcel
保存后选择CDH版本
单击
选择需要添加的服务(建议少选,有需要的服务后边单独配置即可)
接下来点击下一步,填写cm数据库,基本就完成了
完成图片
在CDH5.12搭建完成之后NameNode的Web UI 50070 访问不了。
遇到这个其实不难解决!
设置 -> HDFS -> NameNode -> NameNode Web UI 端口
当我们用cloudera安装好Hadoop等组件时我们在操作HDFS时可能会遇到这样的问题
Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
无论是用sudo hadoop dfs -mkdir 建立文件 还是 put文件,都会显示,同样的错误!!
其实是这样的,/这是文件的所有者是HDFS 权限为755 也就是只有HDFS才能对这个文件进行sudo的操作
那么接下来我们便可以这样操作文件
sudo -u hdfs hadoop fs -mkdir /user/root
我们可以以hdfs的身份对文件进行操作
有收获?希望烙铁们来个三连击,让更多的同学看到这篇文章
1、烙铁们,关注我看完保证有所收获,不信你打我。
2、点个赞呗,可以让更多的人看到这篇文章,后续还会有很哇塞的产出。
本文章仅供学习及个人复习使用,如需转载请标明转载出处,如有错漏欢迎指出
务必注明来源(注明: 来源:csdn , 作者:-马什么梅-)



