目录
一、准备与规划
1、硬件准备
2、软件准备
3、主机规划
二、系统安装
三、网络配置
1、配置虚拟机网络
2、使用XShell连接虚拟机
四、环境配置
1、安装必备软件
2、配置hosts
3、创建hadoop用户
4、关闭防火墙
5、时间同步
6、安装JDK
五、克隆虚拟机
1、克隆虚拟机
2、配置克隆虚拟机网卡
3、配置免密登录ssh
六、Cloudera Manager安装
1、安装mysql
2、搭建本地软件仓库
3、安装Cloudera Manager
七、CDH集群搭建
启动所有虚拟机,准备搭建CDH集群。
1、登录CM控制台
2、安装CDH集群
3、删除节点
4、安装CM服务
5、安装Zookeeper
6、依次安装其他组件
7、登录Hue开发环境
提示: 本篇文章记录了如何在单台计算机上通过虚拟机搭建一个分布式的Hadoop集群环境。对于想学习大数据技术的同学,可以作为一个自有的大数据研究测试的基础平台,并对正式生产环境的Hadoop集群搭建有一定的参考价值。
本篇采用Cloudera Manager安装CDH产品,可集成安装HDFS、map reduce、YARN、sqoop、oozie、HIVE、impala、Hue、HBASE、spark、flume等等大数据组件,并提供了集中集群配置管理,和监控的功能。
Cloudera Manager主要提供了四大功能:(1)对集群进行管理,如添加、删除节点等操作;(2)监控集群的健康情况,对各种指标和系统运行情况进行全面监控;(3)对集群出现的问题进行诊断,并给出建议解决方案;(4)对Hadoop的多组件进行整合、集成。
本人配置:
操作系统 |
64位 |
CPU |
Intel Core i7 2.7GHz |
内存 |
8G |
硬盘剩余空间 |
50G以上 |
虚拟机 |
VMWare |
|||
操作系统 |
CentOS-6.5 |
|||
JDK |
使用CM文件夹中的oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm |
|||
Mysql jar包 |
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar |
|||
远程连接 |
XShell |
|||
离线安装包 |
CM:(下载所有文件) http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.16.2/RPMS/x86_64/ CDH:(下载三个文件) http://archive.cloudera.com/cdh5/parcels/5.16.2/
|
|
CDHNode1 /192.168.209.101 |
CDHNode2 删除 /192.168.209.102 |
CDHNode3 /192.168.209.103 |
CDHNode4 /192.168.209.104 |
CDHNode5 删除 /192.168.209.105 |
namenode |
是 |
是(备用) |
|
|
|
datanode |
|
|
是 |
是 |
是 |
zookeeper |
是 |
|
是 |
是 |
|
CM server |
是 |
|
|
|
|
CM agent |
是 |
|
是 |
是 |
|
Mysql |
是 |
是(备用) |
|
|
|
其他组件规划 |
|
|
|
|
|
注意:ZooKeeper保持奇数个,最少不少于 3 个节点。
虚拟机安装及CentOS安装参照以下文档:
https://blog.csdn.net/imiyuer/article/details/94380233
1、打开安装好的CentOS虚拟机CDHNode1
2、登录CentOS系统,root用户
3、输入ifconfig命令,先查看ip地址
4、这个时候我们发现除了回环地址以外,我们并不能和外界通信
5、打开VMware-编辑-虚拟网络编辑器
6、选择VMnet8,选择NAT模式,点击NAT设置。
找到网关地址
7、打开本机网络和共享中心-更改适配器设置
8、右键VMnet8-属性,修改IPv4,IP地址修改为与NAT网关同一个网段。
9、修改CDHNode1网卡配置文件
修改ONBOOT=yes开启虚拟机网卡,修改为静态IP模式,增加IP地址、掩码、网关、DNS,网关和DNS与NAT设置中的网关相同。然后保存退出。
10、重启网络服务:service network restart
11、 检查网络连通情况
物理机:ping –c 4 192.168.209.1
网关:ping –c 4 192.168.209.2
外网:ping –c 4 www.baidu.com
接下来就可以使用XShell连接虚拟机操作了,比较直接在虚拟机操作方便很多,具体方法不再详述。
1、安装lrzsz,可以方便在Xshell上,上传和下载文件,输入rz命令,可以上传文件,sz命令可以从远程主机上下载文件到本地。
[root@CDHNode1 ~]# yum install lrzsz
2、安装ssh服务器和客户端
[root@CDHNode1 ~]# yum install openssh-server
[root@CDHNode1 ~]# yum install openssh-clients
3、安装httpd
查看yum可用包
[root@CDHNode1 etc]# yum list httpd
安装
[root@CDHNode1 etc]# yum install httpd.x86_64
4、安装createrepo,以创建本地yum源
[root@CDHNode1 ~]# yum install createrepo
配置所有节点的地址和域名解析,使集群节点间能快速访问。
[root@CDHNode1 ~]# vi /etc/hosts
增加:
为了减少误操作对系统的损害,出于安全性考虑需要创建普通用户。
1、创建hadoop用户,并创建家目录
[root@CDHNode1 ~]# adduser -m hadoop
2、为hadoop用户创建密码
3、给hadoop用户配置sudo权限,CM安装集群需要。
[root@CDHNode1 ~]# vi /etc/sudoers
添加:
hadoop ALL=(ALL) NOPASSWD: ALL
由于要使用ssh协议来进行主机间的无密码访问,所以需要关闭防火墙。
1、永久关闭防火墙
[root@CDHNode1 ~]# chkconfig iptables off
2、关闭ipv6的防火墙
[root@CDHNode1 ~]# chkconfig ip6tables off
3、关闭selinux
[root@CDHNode1 ~]# vi /etc/sysconfig/selinux
将其SELINUX=enforcing设置为SELINUX=disabled
集群要求所以节点保持一致的时间,所以需要时间同步。
1、使用ntp(网络时间协议)同步时间。如果ntpdate命令不存在,则需要在线安装ntp。
[root@CDHNode1 ~]# yum install ntp
2、启动ntpd服务
[root@CDHNode1 ~]# service ntpd start
可使用ntpdate命令同步外网服务器
[root@CDHNode1 ~]# ntpdate pool.ntp.org
不能连接外网的情况下则使用主节点作为时间同步服务器
[root@CDHNode1 ~]# vi /etc/ntp.conf
增加:
server 192.168.209.101
3、设置开机启动
[root@CDHNode1 ~]# chkconfig ntpd on
4、使用date命令查看时间是否同步
1、查看是否安装JDK
[root@CDHNode1 ~]# rpm -qa |grep java
如果已安装则卸载JDK。
2、上传jdk安装包
root@CDHNode1 ~]# rz
oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
3、安装JDK
[root@CDHNode1 ~]# yum install oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
软件自动安装在/usr/java/下
4、删除安装包
[root@CDHNode1 ~]# rm -rf oracle-j2sdk1.7-1.7.0+update67-1.x86_64.rpm
5、配置环境变量
[root@CDHNode1 ~]# vi /etc/profile
添加:
#java
export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera
export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
6、使环境变量生效
[root@CDHNode1 ~]# source /etc/profile
7、查看是否安装成功
因为我们使用VMware创建的CentOS虚拟机,所以可以利用克隆虚拟机减少安装时间,提高效率。前面对CDHNode1的环境进行了大部分的安装,利用下列步骤就可以依次克隆出CDHNode2、CDHNode3、CDHNode4、CDHNode5。
1、CDHNode1关机,拍摄快照
2、CDHNode1右键-管理-克隆
3、选择使用快照
4、选择创建完整克隆
5、输入新虚拟机名称和位置,完成
6、依次克隆其他虚拟机。
以CDHNode2为例重新配置虚拟机网卡,其他虚拟机参照步骤依次修改。
1、使用VMware打开CDHNode2,使用root登录,此时显示主机名还是CDHNode1.
2、修改配置文件70-persistent-net.rules
3、设置行号,方便查看,修改文件
:set number
注释第8行,并把第11行的eth1改为eth0
4、删除网卡,再重新安装网卡
5、修改网卡配置
6、确认设备号为DEVICE=eth0,先注释掉mac地址,再修改ip地址
7、重启网络服务
8、修改主机名,把CDHNode1改成CDHNode2
9、重启主机后,主机名就变成了CDHNode2
10、重启后查看网络配置,拍照记下新的mac地址:
11、修改网卡配置,将mac地址修改为刚才的mac地址。
12、使用service network restart命令重启网络服务。
13、检查网络连通情况。
14、修改其他虚拟机。
将五个虚拟机启动,使用XShell登录五个虚拟机的hadoop用户。
1、在hadoop家目录下创建.ssh目录
2、生成hadoop用户的rsa(非对称加密算法)
[hadoop@CDHNode1 ~]$ ssh-keygen -t rsa
一直回车,生成hadoop的公钥和私钥
在所有节点执行生成密钥。
3、把所有节点的公钥发到CDHNode1节点的授权文件
XShell可以使用最下方的撰写栏向所有节点发送命令:
向所有节点发送命令:ssh-copy-id CDHNode1
每个节点输入yes和CDHNode1密码完成公钥发送。
4、把CDHNode1的.ssh/authorized_keys文件发送到其他节点的.ssh目录下。
[hadoop@CDHNode1 ~]$ scp -r ~/.ssh/authorized_keys hadoop@CDHNode2:~/.ssh/
需要输入yes和目标主机用户密码。
依次向其他几个节点发送。
5、在所有节点修改.ssh权限
6、使用ssh测试是否配置成功,第一次使用ssh连接其他节点时需要输入yes,退出使用exit命令。
免密码登录的原理:
1、需要依靠密钥,也就是自己创建的一对密钥,并把公钥放到需要访问的服务器上。
2、如果你需要连接SSH服务器,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。
3、服务器收到请求后,现在该服务器上的主目录下寻找你的公钥,然后把它和你发送过来的公钥进行比较。如果两个密钥一致,服务端就用公钥加密“质询”(challenge),并把它发送给客户端软件。
4、客户端收到“质询”后,就用你的私钥进行解密。再把它发送个服务器。
5、服务器比较发送来的“质询”和原先的是否一致,如果一致则进行授权,完成建立会话的操作。
Mysql在集群中只需要在主节点安装,也可以采用热双机备份安装的方式,在备用节点安装一个备份库。
1、查看服务器是否已安装mysql
[root@CDHNode1 ~]# rpm -qa|grep mysql
如果有删除安装的包
rpm -e --nodeps <包名>
2、安装mysql服务器
[root@CDHNode1 ~]# yum install mysql-server
3、启动mysql服务
[root@CDHNode1 ~]# service mysqld start
设置开机自启动
[root@CDHNode1 ~]# vi /etc/rc.local
增加:
service mysqld start
4、设置管理密码
[root@CDHNode1 ~]# mysqladmin -u root password 'root'
5、修改数据库的字符集
[root@CDHNode1 ~]# vi /etc/my.cnf
[mysqld]增加:
character-set-server=utf8
增加:
[client]
default-character-set=utf8
6、重启数据库
[root@CDHNode1 ~]# service mysqld restart
6、创建所需用户、数据库并赋权
登录,输入密码:
[root@CDHNode1 ~]# mysql -u root –p
创建用户:
Cloudera Manager配置用户:'scmuser'
HIVE元数据存储库:'hivedbuser'
CM监控数据库:'amondbuser'
create user 'scmuser'@'%' identified by 'hlsoft';
create user 'hivedbuser'@'%' identified by 'hlsoft';
create user 'amondbuser'@'%' identified by 'hlsoft';
创建数据库:
create database scm DEFAULT CHARACTER SET utf8;
create database hivedb DEFAULT CHARACTER SET utf8;
create database amondb DEFAULT CHARACTER SET utf8;
赋权:
grant all on scm.* to 'scmuser'@'%' identified by 'hlsoft';
grant all on hivedb.* to 'hivedbuser'@'%' identified by 'hlsoft';
grant all on amondb.* to 'amondbuser'@'%' identified by 'hlsoft';
修改本地权限:
踩了个坑,mysql做法很奇怪,任何用户本地登录都不需要密码,如果在本地(localhost)登录,则使用密码反而连接不上。因为权限里有两条user为’’的记录,优先级比设置用户密码的权限高。正确做法是删除这两条记录。
delete from mysql.user where user='';
赋权生效:
flush privileges;
1、修改httpd服务端口
[root@CDHNode1 ~]# vi /etc/httpd/conf/httpd.conf
将端口由 80改为12580,因为默认端口会遇到各种限制
2、启动httpd服务
[root@CDHNode1 etc]# service httpd start
[root@CDHNode1 etc]# chkconfig httpd on
3、创建本地仓库
[root@CDHNode1 ~]# mkdir /var/www/html/cm5162
[root@CDHNode1 ~]# mkdir /var/www/html/cdh5162
4、将下载的离线包分别上传到相应文件夹
5、修改文件夹权限
[root@CDHNode1 html]# chmod -R ugo+rx /var/www/html/cm5162/
[root@CDHNode1 html]# chmod -R ugo+rx /var/www/html/cdh5162/
6、分别创建索引
[root@CDHNode1 html]# cd /var/www/html/cm5162/
[root@CDHNode1 cm5162]# createrepo .
[root@CDHNode1 cm5162]# cd /var/www/html/cdh5162/
[root@CDHNode1 cdh5162]# createrepo .
7、创建新的cloudera-manager.repo和cdh.repo源配置文件
[root@CDHNode1 cdh5162]# cd /etc/yum.repos.d
[root@CDHNode1 yum.repos.d]# touch cloudera-manager.repo
[root@CDHNode1 yum.repos.d]# vi cloudera-manager.repo
增加:
[cloudera-manager]
name=cloudera-manager-5
baseurl=http://192.168.209.101:12580/cm5162
gpgcheck=0
[root@CDHNode1 yum.repos.d]# touch cdh.repo
[root@CDHNode1 yum.repos.d]# vi cdh.repo
增加:
[cdh]
name=cdh5
baseurl=http://192.168.209.101:12580/cdh5162
gpgcheck=0
增加JDK源配置文件:后面安装集群会比较方便
[root@CDHNode1 yum.repos.d]# touch JDK.repo
[root@CDHNode1 yum.repos.d]# vi JDK.repo
增加:
[JDK]
name=jdk-version1.7
baseurl=http://192.168.209.101:12580/cm5162
gpgcheck=0
1、安装CM server
[root@CDHNode1 yum.repos.d]# cd /var/www/html/cm5162/
[root@CDHNode1 cm5162]# yum install cloudera-manager-server-5.16.2-1.cm5162.p0.7.el6.x86_64.rpm
2、配置CM的数据库实例
CM数据库可选:mysql、postgresql和oracle,我们选择使用mysql
[root@CDHNode1 cm5162]# cd /etc/cloudera-scm-server
[root@CDHNode1 cloudera-scm-server]# vi 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=192.168.209.101:3306
# The database name
com.cloudera.cmf.db.name=scm
# The database user
com.cloudera.cmf.db.user=scmuser
# The database user's password
com.cloudera.cmf.db.password=hlsoft
# The db setup type
# By default, it is set to INIT
# 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
3、拷贝mysql驱动jar包到CM server中
[root@CDHNode1 cloudera-scm-server]# cd /usr/share/cmf/lib/
rz上传jar包
4、启动CM服务
[root@CDHNode1 lib]# service cloudera-scm-server start
5、查看服务启动情况
[root@CDHNode1 cloudera]# tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log
出现以下日志标志启动成功:
浏览器登录:
http://192.168.209.101:7180
初始密码:
admin/admin
接受最终用户许可条款和条件。
继续
1、使用模式搜索所有集群主机:
2、继续,选择更多选项,以选择存储库。
3、修改成之前设置的CDH的仓库的地址,删掉其他的地址。
4、保存后,设置CM自定义存储库,修改为 之前设置的CM仓库地址。
5、选择JDK自动安装,安装包取自之前设置的JDK本地仓库
6、继续,安装集群。
7、选择hadoop用户安装;因为是虚拟机,防止内存崩溃,设置同时安装数量为1.
8、在所有主机安装CM agent
9、以Parcel方式下载安装CDH
(走到这里运行内存占用会非常高,建议把电脑上能关掉的东西都关掉,减少内存占用)
10、检查主机正确性,完成。
11、暂时不安装服务
五个虚拟机占用内存实在太高了,这里把CDHNode2这个备用主节点删除
选择CDHNode2,从集群中删除。将CDHNode2虚拟机关机。
为调整虚拟机集群性能,将CDHNode5节点也删除;
将CDHNode1主节点,内存调整为2G,处理器调整为2,磁盘空间增加为40G。
1、回到主页,添加CM服务
2、为主机分配CM服务角色,观察CDHNode1已经压力比较大了,建议将服务分配到其他主机上。但Activity Monitor必须安装在有mysql的CDHNode1上(此服务也可以安装,不是必须服务)。
3、数据库设置,使用之前设置的用户amondbuser
4、审核更改,可不做修改,继续。
5、首次运行命令,继续。
6、完成。
1、添加服务
2、选择Zookeeper,继续
3、按主机规划现在组件安装的节点
4、文件路径可按默认设置,继续。
5、安装完成。
首先安装zookeeper和HDFS。
然后安装MAPREDUCE和YARN。
hbase依赖zookeeper,HIVE依赖HDFS。
然后再就可以安装Impala、Oozie、sqoop、spark、Hue、kafka、flume等等其他组件。
安装完成后就可以使用HUE开发环境了。
不过单台电脑搭建虚拟机集群,性能必然不能满足要求,搭建完成基本也只能废弃了。