从网上看了很多的资料,填了不少的坑。总结一下。(这篇是整合网络的资料+自己的坑)
关于CDH和Cloudera Manager
CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。
Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的组件,对集群中主机、Hadoop、Hive、Spark等服务的安装配置管理做了极大简化。
系统环境
实验环境:windown下Oracle VM VirtualBox虚拟机
操作系统:CentOS-7-x86_64-DVD-1511 (至少内存2G以上,这里内存不够的同学建议还是整几台真机配置比较好,将CDH的所有组件全部安装会占用很多内存,我已开始设置的虚拟机内存是1G,安装过程中直接卡死了)
Cloudera Manager:5.12.1
CDH: 5.12.1
相关包的下载地址
所以的安装包
(挣点积分)
系统规划
准备3个节点,一个master节点,二个slave节点。
master:1核3G ;192.168.6.171; master.msxf.hadoop
slave1:1核2G; 192.168.6.172; slave1.maxf.hadoop
slave2:1核2G; 192.168.6.173; slave2.msxf.hadoop
准备工作:系统环境搭建
1.CentOS-7安装(别最小安装,因为会有很多麻烦)我就都给安装了,哈哈。(
安装
)
2.配置ip(
所有节点
)
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=static //更改部分
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=b645b437-8eaa-4d95-a003-7629471b814d
DEVICE=enp0s3
ONBOOT=yes //更改部分
#添加部分
IPADDR=192.168.6.171
NETMASK=255.255.255.0
GATEWAY=192.168.6.1
DNS1=8.8.8.8
DNS2=114.114.114.114
重启:service network restart
3.网络配置(
所有节点
)
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master.msxf.hadoop
子节点192.168.6.172配置
NETWORKING=yes
HOSTNAME=slave1.msxf.hadoop
子节点192.168.6.173配置
NETWORKING=yes
HOSTNAME=slave2.msxf.hadoop
重启操作系统生效 :service network restart(如果不生效reboot)
4.配置hosts(
所有节点
)
vi /etc/hosts
192.168.6.171 master.msxf.hadoop
192.168.6.172 slave1.msxf.hadoop
192.168.6.173 slave2.msxf.hadoop
5.关闭防火墙和
SELinux
(
所有节点
)
关闭防火墙:
systemctl stop firewalld.service
关闭SELINUX:
setenforce 0 (临时生效)
修改 /etc/selinux/config 下的 SELINUX=disabled (重启后永久生效)
6.安装JDK(
所有节点
)
卸载openJdk
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.91-2.6.2.3.el7.x86_64
我把jdk放在/opt/jdk里了(jdk必须在/usr/java路径下)
1.配置环境变量
vi /etc/profile
2./etc/profile中添加下面配置项
JAVA_HOME=/usr/java/jdk1.8.0_201
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
3.刷新环境变量使配置立即生效
source /etc/profile
4.检查JDK是否配置成功
java -version
注意:如果jdk安装的路径不是 /usr/java/目录下需要软件列,因为默认的cdh文件默认的路径就是/usr/java/jdk1.8
mkdir -p /usr/java/jdk1.8
ln -s /opt/jdk/jdk1.8.0_201/* /usr/java/jdk1.8/
7.SSH免密登录(
所有节点
)
1.在主节点上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对。(默认位置 ~/.ssh)
2.将公钥添加到认证文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3.并设置authorized_keys的访问权限:chmod 600 ~/.ssh/authorized_keys
4.在两个slave节点上执行ssh-keygen -t rsa一路回车,生成无密码的密钥对,并生成.ssh 目录,用于认证文件authorized_keys的同步。scp文件到所有slave节点
scp ~/.ssh/authorized_keys root@slave1.msxf.hadoop:~/.ssh/
scp ~/.ssh/authorized_keys root@slave2.msxf.hadoop:~/.ssh/
注意:输入yes slave1节点登录密码
测试:在主节点上ssh slave1.msxf.hadoop,正常情况下,不需要密码就能直接登陆进去了
8.
配置NTP服务(主)
1.在线安装
配置yum源:https://opsx.alibaba.com/mirror 有操作的步骤(必须有网)
提供了两个版本,防火墙必须关闭,不关闭ntp同步不过来。(
NTP离线配置
)
1.yum install ntp
2.vi /etc/ntp.conf
3.把其他的service都用#
server 0.asia.pool.ntp.org prefer
配置文件完成,保存退出,启动服务,执行如下命令:service ntpd start
检查是否成功,用ntpstat命令查看同步状态,出现以下状态代表启动成功:
如果出现异常请等待几分钟,一般等待5-10分钟才能同步。
9.
配置ntp客户端(所有slave节点)
1.vi /etc/ntp.conf
2.把其他的service都用#
server master.msxf.hadoop
保存退出,请求服务器前,请先使用ntpdate手动同步一下时间:
ntpdate -u master.msxf.hadoop (主节点ntp服务器)
启动服务:service ntpd start
10.安装配置MySql(
主节点
)
(
离线安装
)
⑴.删除原有的mariadb,不然mysql装不进去 (本章用的是yum安装的)
rpm -qa|grep mariadb
rpm -e --nodeps mariadb-libs
⑵.下载mysql的rpm包
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
⑶. 执行:rpm -ivh mysql-community-release-el7-5.noarch.rpm
⑷.执行:yum install -y mysql-server
⑸.首先关闭mysql服务:systemctl stop mysqld
⑹.然后修改配置文件:vi /etc/my.cnf
⑺.接下来加入一句代码即可空密码登录mysql:
# Disabling symbolic-links is recommended to prevent assorted security risks
skip-grant-tables #添加这句话,这时候登入mysql就不需要密码
symbolic-links=0
⑻.开启mysql服务:systemctl start mysqld
⑼.空密码登录mysql:mysql -u root -p #输入命令回车进入,出现输入密码提示直接回车
⑽设置mysql密码:
mysql> set password for root@localhost = password('root');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges; #更新权限
Query OK, 0 rows affected (0.00 sec)
mysql> set password for root@localhost = password('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql>flush privileges; #更新权限
mysql>quit; #退出
service mysqld stop
# 停止mysql服务, 恢复mysql配置
vi /etc/my.cnf #修改配置文件
# Disabling symbolic-links is recommended to prevent assorted security risks
# skip-grant-tables # 注释掉这句话
symbolic-links=0
service mysqld start # 启动mysql服务
mysql -u root -p # 输入新密码登录
创建以下数据库:
#hive
create database hive DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#activity monitor
create database amon DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#hue
create database hue DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
#oozie
create database oozie DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
设置root授权访问以上所有的数据库:
#授权root用户在主节点拥有所有数据库的访问权限
grant all privileges on *.* to 'root'@'master.msxf.hadoop' identified by 'root' with grant option;
flush privileges;
正式开工(重点了)
安装Cloudera Manager Server 和Agent
1.主节点解压安装
cloudera manager的目录默认位置在/opt下,解压:tar -xzvf cloudera-manager*.tar.gz将解压后的cm-5.12.1和cloudera目录放到/opt目录下。
2.为Cloudera Manager 5建立数据库
首先需要去MySql的官网下载JDBC驱动,
http://dev.mysql.com/downloads/connector/j/
,解压后,找到mysql-connector-java-5.1.33-bin.jar,放到
/opt/cm-5.12.1/share/cmf/lib/
中。
在主节点初始化CM5的数据库,输入mysql密码:
/opt/cm-5.12.1/share/cmf/schema/scm_prepare_database.sh mysql cm -h localhost -u root -p root --scm-host localhost scm scm scm
3.Agent配置
修改
/opt/cm-5.12.1/etc/cloudera-scm-agent/config.ini中的master.msxf.hadoop
为主节点的主机名。
4.同步Agent到其他节点
scp -r /opt/cm-5.12.1 root@slave1.msxf.hadoop:/opt/
scp -r /opt/cm-5.12.1 root@slave2.msxf.hadoop:/opt/
5.在所有节点创建cloudera-scm用户
useradd --system --home=/opt/cm-5.12.1/run/cloudera-scm-server/ --no-create-home --shell=/bin/false --comment "Cloudera SCM User" cloudera-scm
6.在主节点创建cloudera-manager-server的本地元数据保存目录
mkdir /var/cloudera-scm-server
chown cloudera-scm:cloudera-scm /var/cloudera-scm-server
chown cloudera-scm:cloudera-scm /opt/cm-5.12.1
7.主节点中创建parcel-repo仓库目录
mkdir -p /opt/cloudera/parcel-repo
chown cloudera-scm:cloudera-scm /opt/cloudera/parcel-repo
8.所有节点创建parcels目录
mkdir -p /opt/cloudera/parcels
chown cloudera-scm:cloudera-scm /opt/cloudera/parcels
解释:Clouder-Manager将CDHs从主节点的/opt/cloudera/parcel-repo目录中抽取出来,分发解压激活到各个节点的/opt/cloudera/parcels目录中
9.准备Parcels,用以安装CDH5
将CHD5相关的Parcel包放到主节点的
/opt/cloudera/parcel-repo/
目录中(parcel-repo需要手动创建)。
相关的文件如下:
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel
CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1
manifest.json
最后将CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha1,重命名为CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel.sha,这点必须注意,否则,系统会重新下载CDH-5.12.1-1.cdh5.12.1.p0.3-el7.parcel文件。
安装psmisc(把这个安装了,如果有就不用了。要不然服务起不来,正常情况下是安装的)
# yum -y install psmisc
启动服务端和启动Agent服务。
/opt/cm-5.12.1/etc/init.d/cloudera-scm-server start
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
//日志
tail -f /opt/cm-5.12.1/log/cloudera-scm-server
//查看服务
ps -ef|grep cloudera
CDH5的安装配置
Cloudera Manager Server和Agent都启动以后,就可以进行CDH5的安装配置了。
这时可以通过浏览器访问主节点的7180端口测试一下了(由于CM Server的启动需要花点时间,这里可能要等待一会才能访问),默认的用户名和密码均为admin:
http://master.msxf.hadoop:7180
注意:
1.如果主节点不能访问用:http://192.168.6.171:7180 访问(配置hosts文件可以解析主机名访问c:\windows\system32\drivers\etc
192.168.6.171 master.msxf.hadoop
192.168.6.172 slave1.msxf.hadoop
192.168.6.173 slave2.msxf.hadoop
如果访问成功把子节点都起来服务
/opt/cm-5.12.1/etc/init.d/cloudera-scm-agent start
默认账号密码admin/admin
接下来,出现以下包名,说明本地Parcel包配置无误,直接点继续就可以了。(看你们用什么版本了)
点击,继续,如果配置本地Parcel包无误,然后就是耐心等待分配过程就行了,大约10多分钟吧,取决于内网网速。
接下来是服务器检查,可能会遇到以下问题:
1.Cloudera 建议将 /proc/sys/vm/swappiness 设置为 10。当前设置为 60。
使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf 以在重启后保存该设置。
您可以继续进行安装,但可能会遇到问题,Cloudera Manager 报告您的主机由于交换运行状况不佳。
以下主机受到影响:
echo 0 > /proc/sys/vm/swappiness
2、检查主机正确性时出现 “已启用“透明大页面”,它可能会导致重大的性能问题。” 的警告,进行如下设定:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
接下来是选择安装服务(根据自己的需求按装)
服务配置,一般情况下保持默认就可以了(Cloudera Manager会根据机器的配置自动进行配置,如果需要特殊调整,自行进行设置就可以了):(别人的图)
接下来是数据库的设置,检查通过后就可以进行下一步的操作了:(这是刚才咱们mysql创建的库账号密码 root,root)
这块hue和amon会报错,连接不上
cannot open shared object file: No such file or directory
问题原因:
这个错误出现的原因是找不到 libmysqlclient.so.18 这个文件,根本原因是,
一般我们使用的mysql都是自己从新安装的,不是系统自带的,所以在我们安装我们自己的mysql的时候,会把删除原来的mysql,此时会连带这删掉这个文件
,32的目录是 /usr/lib/mysql/,64位的为 /usr/lib64/mysql/下面有这个文件。
1、解决问题的关键是,在找一台未装过mysql的服务器,然后把此文件夹下面的 libmysqlclient.so.18.0.0 文件拷贝到此服务器的这个目录中,然后做软连接。
2、然后 vi /etc/ld.so.conf 后面增加一条记录:/usr/lib64/mysql (libmysqlclient.so.18 和libmysqlclient.so.18.0.0所在目录)
mkdir -p /usr/lib64/mysql
cd /usr/lib64/mysql
ln -s libmysqlclient.so.18.0.0 libmysqlclient.so.18
3、运行 ldconfig 命令,让其生效。
ok,完美解决。
下面是集群设置的审查页面,我这里都是保持默认配置的:
最后的安装了。这块是最麻烦的了。最烦的。注意:
1.这里安装Hive的时候可能会报错,因为我们使用了MySql作为hive的元数据存储,hive默认没有带mysql的驱动,通过以下命令拷贝一个就行了:
cp /opt/cm-5.12.1/share/cmf/lib/mysql-connector-java-5.1.47-bin.jar /opt/cloudera/parcels/CDH-5.12.1-1.cdh5.12.1.p0.3/lib/hive/lib/
2.安装Spark,jdk的位置不行。进行软连接
创建mkdir -p /usr/java/default
ln -s /opt/jdk/jdk1.8.0_74/* /usr/java/default/
3.oozie:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
cp -p /opt/cm-5.12.1/share/cmf/lib/mysql-connector-java-*-bin.jar /var/lib/oozie/