目录
提示: 本篇文章记录了如何在单台计算机上通过虚拟机搭建一个分布式的Hadoop集群环境。对于想学习大数据技术的同学,可以作为一个自有的大数据研究测试的基础平台,并对正式生产环境的Hadoop集群搭建有一定的参考价值。
本篇采用Cloudera Manager安装CDH产品,可集成安装HDFS、map reduce、YARN、sqoop、oozie、HIVE、impala、Hue、HBASE、spark、flume等等大数据组件,并提供了集中集群配置管理,和监控的功能。
Cloudera Manager主要提供了四大功能:(1)对集群进行管理,如添加、删除节点等操作;(2)监控集群的健康情况,对各种指标和系统运行情况进行全面监控;(3)对集群出现的问题进行诊断,并给出建议解决方案;(4)对Hadoop的多组件进行整合、集成。
一、准备与规划
1、硬件准备
本人配置:
操作系统 | 64位 |
CPU | Intel Core i7 2.7GHz |
内存 | 8G |
硬盘剩余空间 | 50G以上 |
2、软件准备
虚拟机 | 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/
|
3、主机规划
| 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、配置虚拟机网络
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
2、使用XShell连接虚拟机
接下来就可以使用XShell连接虚拟机操作了,比较直接在虚拟机操作方便很多,具体方法不再详述。
四、环境配置
1、安装必备软件
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
2、配置hosts
配置所有节点的地址和域名解析,使集群节点间能快速访问。
[root@CDHNode1 ~]# vi /etc/hosts
增加:
3、创建hadoop用户
为了减少误操作对系统的损害,出于安全性考虑需要创建普通用户。
1、创建hadoop用户,并创建家目录
[root@CDHNode1 ~]# adduser -m hadoop
2、为hadoop用户创建密码
3、给hadoop用户配置sudo权限,CM安装集群需要。
[root@CDHNode1 ~]# vi /etc/sudoers
添加:
hadoop ALL=(ALL) NOPASSWD: ALL
4、关闭防火墙
由于要使用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
5、时间同步
集群要求所以节点保持一致的时间,所以需要时间同步。
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命令查看时间是否同步
6、安装JDK
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、查看是否安装成功
五、克隆虚拟机
1、克隆虚拟机
因为我们使用VMware创建的CentOS虚拟机,所以可以利用克隆虚拟机减少安装时间,提高效率。前面对CDHNode1的环境进行了大部分的安装,利用下列步骤就可以依次克隆出CDHNode2、CDHNode3、CDHNode4、CDHNode5。
1、CDHNode1关机,拍摄快照
2、CDHNode1右键-管理-克隆
3、选择使用快照
4、选择创建完整克隆
5、输入新虚拟机名称和位置,完成
6、依次克隆其他虚拟机。
2、配置克隆虚拟机网卡
以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、修改其他虚拟机。
3、配置免密登录ssh
将五个虚拟机启动,使用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、服务器比较发送来的“质询”和原先的是否一致,如果一致则进行授权,完成建立会话的操作。
六、Cloudera Manager安装
1、安装mysql
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;
2、搭建本地软件仓库
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
3、安装Cloudera Manager
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
出现以下日志标志启动成功:
七、CDH集群搭建
启动所有虚拟机,准备搭建CDH集群。
1、登录CM控制台
浏览器登录:
http://192.168.209.101:7180
初始密码:
admin/admin
接受最终用户许可条款和条件。
继续
2、安装CDH集群
1、使用模式搜索所有集群主机:
2、继续,选择更多选项,以选择存储库。
3、修改成之前设置的CDH的仓库的地址,删掉其他的地址。
4、保存后,设置CM自定义存储库,修改为 之前设置的CM仓库地址。
5、选择JDK自动安装,安装包取自之前设置的JDK本地仓库
6、继续,安装集群。
7、选择hadoop用户安装;因为是虚拟机,防止内存崩溃,设置同时安装数量为1.
8、在所有主机安装CM agent
9、以Parcel方式下载安装CDH
(走到这里运行内存占用会非常高,建议把电脑上能关掉的东西都关掉,减少内存占用)
10、检查主机正确性,完成。
11、暂时不安装服务
3、删除节点
五个虚拟机占用内存实在太高了,这里把CDHNode2这个备用主节点删除
选择CDHNode2,从集群中删除。将CDHNode2虚拟机关机。
为调整虚拟机集群性能,将CDHNode5节点也删除;
将CDHNode1主节点,内存调整为2G,处理器调整为2,磁盘空间增加为40G。
4、安装CM服务
1、回到主页,添加CM服务
2、为主机分配CM服务角色,观察CDHNode1已经压力比较大了,建议将服务分配到其他主机上。但Activity Monitor必须安装在有mysql的CDHNode1上(此服务也可以安装,不是必须服务)。
3、数据库设置,使用之前设置的用户amondbuser
4、审核更改,可不做修改,继续。
5、首次运行命令,继续。
6、完成。
5、安装Zookeeper
1、添加服务
2、选择Zookeeper,继续
3、按主机规划现在组件安装的节点
4、文件路径可按默认设置,继续。
5、安装完成。
6、依次安装其他组件
首先安装zookeeper和HDFS。
然后安装MAPREDUCE和YARN。
hbase依赖zookeeper,HIVE依赖HDFS。
然后再就可以安装Impala、Oozie、sqoop、spark、Hue、kafka、flume等等其他组件。
7、登录Hue开发环境
安装完成后就可以使用HUE开发环境了。
不过单台电脑搭建虚拟机集群,性能必然不能满足要求,搭建完成基本也只能废弃了。