伪分布集群的搭建请看下面两个链接
Ubuntu上搭建hadoop伪分布式配置请看这里
CentOS上搭建hadoop伪分布式配置请看这里
说是集群,实际上只有一个master和一个slave,为了不让CPU烧熟桌子
本搭建基于Hadoop 2,可适合任何 Hadoop 2.x.y 版本
安装CentOS6.4,两台
一台做Master,一台做Slave1
首先虚拟机上搭两个CentOS,可参考自在Windows使用VirtualBox安装CentOS教程,这步搭过虚拟机的同蟹都懂
在使用CentOS6过程中请注意,CentOS6和CentOS7的个别命令有些许不一样
配置网络
为了虚拟机上各个节点都能互联,我们必须得配置网络,使它们使用同一个网段。
修改网络配置文件
Master节点上修改网卡配置
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#eth0这里是我机子上的网卡名,注意查看自己机子上的网卡名
首先是改
BOOTPROTO=static
ONBOOT=yes
再然后是增加
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=8.8.8.8
Slave1节点上修改网卡配置,基本和Master上的配置一样,但把IP地址改为192.168.100.11
配置联网方式
打开虚拟网络编辑器:
VMnet8(NAT模式)----子网IP设置为:192.168.100.0----NAT设置:网关改为192.168.100.2—确定----去掉使用本地DHCP服务将IP地址分配给虚拟机选项—确定
重启网卡
在Master节点和Slave1节点上重启网卡
service network restart
确保都重启成功,假如有一项重启失败,则证明你还有bug要修
关闭防火墙
我们先永久关闭掉Master和Slave1上的放火墙
#执行这两个命令
service iptables stop
chkconfig iptables off
配网络时的注意点
假如Slave1是通过Master快照克隆创建的,在配置网络时要多做一步,就是要生成新的MAC地址(克隆出的主机IP地址和MAC地址皆一样,要更改IP地址和MAC地址)并配置,可见:虚拟机克隆后MAC地址IP地址修改,否则会重启网卡会报出异常:device eth0 does not seem to be present, delaying initialization。
改主机名并配置主机名到IP地址的映射
Master上改主机名
vi /etc/sysconfig/network
添加HOSTNAME=Master
Slave1上改主机名
vi /etc/sysconfig/network
添加HOSTNAME=Slave1
配置主机名到IP地址的映射(两个节点上都配一遍)
vi /etc/hosts
192.168.100.10 Master
192.168.100.11 Slave1
注:原来的/etc/hosts里面,保留127.0.0.1 localhost
修改完之后我们重启一下
reboot
测试能不能跑通,实现节点间互联
查看网络配置是否成功
ifconfig #显示的网络信息是否和我们配置的契合
Master上
ping baidu.com
ping Slave1
Slave1上
ping baidu.com
ping Master
如果ping不通则说明你还有bug要修
更换yum源
然后把CentOS的默认yum源更换为国内的阿里云yum源,让下载安装及更新速度更快一些
#备份缓存
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载新的CentOS-Base.repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
#添加EPEL
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum clean all #清楚缓存
yum makecache #生成缓存
创建hadoop用户
useradd -m hadoop -s /bin/bash # 创建新用户hadoop
passwd hadoop
visudo #为hadoop用户增加管理员权限,以避免后续遇到一系列权限问题
在root ALL=(ALL) ALL 这行下面增加hadoop ALL=(ALL) ALL,如图所示,图中的间隔为tab
su hadoop #后续的操作在hadoop用户下执行
配置SSH无密码登录
一般情况下,CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验
rpm -qa | grep ssh
如图,如果有显示openssh-server和openssh-client就证明已安装
假如没有安装,我们使用以下命令安装
sudo yum install openssh-clients
sudo yum install openssh-server
在安装 SSH client、SSH server之后,我们检验是否能用ssh登录到本机
ssh localhost
如图,ssh是可以正常使用的,但这里每次登录时要输入密码
exit命令退出ssh连接后
设置免密码登录
我们设置ssh无密码登录
cd ~/.ssh #假如没有此目录,那么你需要ssh localhost后再执行这一步操作
rm ./id_rsa* #如果有之前瞎鼓捣生成的公钥的话,就删除
ssh-keygen -t rsa #生成公私钥,一直按回车就好
cat ./id_rsa.pub >> ./authorized_keys #让Master节点能无密码ssh本机
ssh-copy-id Slave1 #使Master能免密码登录Slave1
chmod 600 ./authorized_keys #修改文件权限为只读
检验一下是否能在Master节点上无密码ssh登录本机和是否能免密码登录Slave1
ssh localhost
ssh Slave1
我们已经能在Master节点上无密码ssh登录本机了
在Slave1节点上配置免密码ssh登录本机和免密码登录Master是一样的,这里不重复去写了。
要唠叨一下的就是:实现本节点免密码ssh其他节点的原理就是把本节点的公钥给要连接的其他节点,让其他节点能验明自己的节点身份,才能免密码登录其他节点,这涉及到一种身份验证问题。
接下来虾一步
安装Java环境
sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel #使用此命令安装openjdk
查查刚才的jdk安装到哪里了
rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
此命令返回的路径去掉"bin/javac"就是我们jdk的安装位置,我们拿这个路径去配环境变量
像我这里的是/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64
vim ~/.bashrc
在文件后面加一行
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.251.x86_64
让环境变量生效
source ~/.bashrc
检验变量是否设置生效
java -version
安装Hadoop2
下载Hadoop可以到这个网址https://mirrors.cnnic.cn/apache/hadoop/common/下载,选择版本时请选择Hadoop2.x.y版本。
下载时请下载 hadoop-2.x.y.tar.gz 这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop 源代码,需要进行编译才可使用。
下载时也强烈建议下载(假如有) hadoop-2.x.y.tar.gz.mds 这个文件,该文件包含了检验值可用于检查hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。(假如想知道怎么验证文件完整性,请自行百度搜索,因为我这里下载的不是hadoop-2.x.y.tar.gz.mds就不做演示了)
插一句题外话:假如嫌浏览器下载太慢,那么可以复制下载链接到迅雷打开下载,BT下载就是香。
下载好了之后我们执行解压安装
sudo tar -zxf ~/Download/hadoop-2.7.7.tar.gz -C /usr/local #注意对应自己hadoop压缩包所在的位置
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop # 修改文件权限
接虾来输入以下命令来检查 Hadoop 是否安装成功,成功则会显示 Hadoop 版本信息
cd /usr/local/hadoop
./bin/hadoop version
配置PATH变量
将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoop、hdfs 等命令了。
在 Master 节点上配置PATH变量
vim ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
source ~/.bashrc #使配置生效
配置Hadoop2
Hadoop 默认模式为单机模式,无需进行其他配置即可运行。
如果要做Hadoop集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件:slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
这里的配置是进入相应的xml文件找到一对configuration空标签,然后替换内容
cd /usr/local/hadoop/etc/hadoop
修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
core-site.xml配置项解释:
fs.defaultFS:定义默认的文件系统主机和端口;
hadoop.tmp.dir:Hadoop的临时目录;
修改 hdfs-site.xml,因为只有一个分片,所以dfs.replication为1,dfs.datanode.data.dir也只有一个
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
hdfs-site.xml配置项解释:
dfs.namenode.secondary.http-address:secondary namenode HTTP服务器地址和端口;
dfs.replication:数据块分片数;
dfs.namenode.name.dir:存放namenode的fsimage的目录;
dfs.datanode.data.dir:存放datanode块的目录;
修改mapred-site.xml(实际上它默认文件名为 mapred-site.xml.template)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
mapred-site.xml配置项解释:
mapreduce.framework.name:执行框架设置为 Hadoop YARN;
mapreduce.jobhistory.address:Hadoop历史服务器地址;
mapreduce.jobhistory.webapp.address:查看Hadoop历史服务器的历史记录的UI界面的访问地址
修改 yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
`yarn-site.xml配置项:
yarn.resourcemanager.hostname:ResourceManager` 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序;
yarn.nodemanager.aux-services:NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
修改 slaves
将作为 DataNode 的主机名写入该文件,每行一个。
在伪分布式配置时,默认为 localhost的,因为节点即作为 NameNode 也作为 DataNode执行。
分布式配置如果让 Master 节点既作为 NameNode,也作为DataNode,就保留 localhost;如果让Master节点作为NameNode,就删掉localhost。
我这里选择删除localhost
把Master 上的 /usr/local/Hadoop 文件夹复制到Slave1节点上
假如之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件和日志文件。在 Master 节点上执行
cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop #在线复制文件到Slave1上
在Slave1上执行
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local #解压新的
sudo chown -R hadoop /usr/local/hadoop #修改文件权限
同样,如果有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件等操作。
在 Master 节点执行 NameNode 的格式化,之后不需要
hdfs namenode -format
如图
注意:CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。我们前面的操作中已经关闭防火墙了,如果防火墙没关闭的请关闭再开启集群。
在Master执行
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
这时可以通过jps
可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程
在Slave1节点上可以看到DataNode 和 NodeManager
如图,集群搭建成功,高兴得像只两百斤的小胖子
关闭集群也是在Master上关闭,按顺序执行命令
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
记一个bug
有事没事不要初始化namenode玩。初始化一遍就好,假如初始化多遍导致Slave1节点上datanode不能启动,那么有两种debug方法
以上两种方法都能解决因为初始化集群多次而产生的clusterID不一致导致datanode不能正常启动的问题。
但我还是建议采取第一种方法,毕竟当hadoop集群真正用于生产环境中,要尽量避免删数据。
监控集群
监控集群建立在hadoop集群启动之上,当hadoop启动之后
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
我们可以通过虚拟机CentOS里自带的火狐浏览器进入集群监控的web界面,但这里我选择在宿主机查看集群监控的web界面(虚拟机分配的内存太小,不想卡出翔)。
在宿主机添加IP到主机名的映射
在C:/Windows/Systems/drivers/etc/hosts中添加
192.168.100.10 Master Master.cn
192.168.100.11 Slave1 Slave1.cn
查看HDFS集群状态
地址配置在:hdfs-site.xml中的dfs.namenode.http-address
默认访问地址:http://namenode的ip:50070
我这里的是:http://Master:50070
查看secondarynamenode的集群状态
地址配置在:hdfs-site.xml中的dfs.namenode.secondary.http-address
默认访问地址:http://namenode的ip:50090
我这里的是:http://Master:50090
查看yarn集群的状态
地址配置在:yarn-site.xml中的yarn.resourcemanager.webapp.address
默认访问地址:http://namenode的ip:50090
我这里的是:http://Master:8088
至于能从这些web界面获取到什么信息:Hadoop大数据开发基础 | 集群监控