基础概念
Hadoop集群具体来说包含两个集群:
- HDFS 集群
- YARN 集群
HDFS集群负责海量数据的存储,集群中的角色主要有:
- NameNode
- DataNode
- SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
- ResourceManager
- NodeManager
这篇博文的目的是让我们的hadoop集群跑起来,因为后面的所有hadoop的操作都基于它。原理和知识点博主会在后面章节铺开来说,这里先做了解。
1.准备服务器
- 192.168.214.150 centos6-1
- 192.168.214.151 centos6-2
- 192.168.214.152 centos6-3
先安装一台虚拟机:使用VMware安装CentOS
再克隆两台虚拟机:VMware虚拟机克隆CentOS系统
2.检查虚拟机网络
如果严格按照博主使用VMware安装CentOS教程走,网络配置在系统安装完成后即设置成功。如果网络还是ping不通,可以通过修改ifcfg-eth0文件重新配置,只要能够做到虚拟机之间能够互相ping通,同时能够ping通外网即可
vi /etc/sysconfig/network-scripts/ifcfg-eth0
3.自定义主机名
//修改文件内容
[root@centos6-1 ~]# vi /etc/sysconfig/network
//修改内容如下
NETWORKING=yes
HOSTNAME=centos6-1 //centos6-1是博主自己的设置,博主本来想设置成zaomianbao6-1的
三台虚拟机均设置,博主的设置为:centos6-1、centos6-2、centos6-3
4.主机名IP映射
//修改一下文件
[root@centos6-1 ~]# vi /etc/hosts
//在文件末尾追加以下内容
192.168.214.150 centos6-1
192.168.214.151 centos6-2
192.168.214.152 centos6-3
三台虚拟机设置相同
5.关闭防火墙
[root@centos6-1 ~]# service iptables status
iptables: Firewall is not running.
//关闭防火墙
[root@centos6-1 ~]# service iptables stop
//关闭防火墙开机启动
[root@centos6-1 ~]# chkconfig iptables --list
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
//查看防火墙状态
[root@centos6-1 ~]# chkconfig iptables off
[root@centos6-1 ~]#
博主防火墙已关闭,你们看到的信息和我的有可能不一样,因为你们防火墙有可能没有关闭,但是不管怎样,只要执行以上命令即可
6.ssh免密登录
ssh免密登录是为3台虚拟机之间无需登录即可自由通信设置的,因为在hadoop集群中需要保证虚拟机之间能够互相访问
生成rsa公私钥对(三台服务器均需执行)
[root@centos6-1 ~]# ssh-keygen -t rsa //输入该指令然后一路回车即可
[root@centos6-2 ~]# ssh-keygen -t rsa
[root@centos6-3 ~]# ssh-keygen -t rsa
拷贝公钥
//输入指令后需要输入密码即可(三台服务器均需执行)
[root@centos6-1 ~]# ssh-copy-id centos6-1
[root@centos6-1 ~]# ssh-copy-id centos6-2
[root@centos6-1 ~]# ssh-copy-id centos6-3
[root@centos6-2 ~]# ssh-copy-id centos6-1
[root@centos6-2 ~]# ssh-copy-id centos6-2
[root@centos6-2 ~]# ssh-copy-id centos6-3
[root@centos6-3 ~]# ssh-copy-id centos6-1
[root@centos6-3 ~]# ssh-copy-id centos6-2
[root@centos6-3 ~]# ssh-copy-id centos6-3
7.同步集群时间
查询集群各主机的时间
[root@centos6-1 ~]# date
Tue Jul 3 23:21:04 CST 2018
[root@centos6-2 ~]# date
Tue Jul 3 23:21:11 CST 2018
[root@centos6-3 ~]# date
Tue Jul 3 23:20:51 CST 2018
//可以发现博主3台虚拟机的时间不一致
同步网络时间
//如果集群时间不一致则使用ntpdate指令进行网络同步
[root@centos6-1 ~]# ntpdate cn.pool.ntp.org
[root@centos6-2 ~]# ntpdate cn.pool.ntp.org
[root@centos6-3 ~]# ntpdate cn.pool.ntp.org
//如果没有该指令可以yum安装
yum install -y ntpdate
8. 安装JDK
上传已经下载好的JDK压缩包(三种方式实现Linux的文件上传下载)
[root@centos6-1 servers]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring jdk-8u65-linux-x64.tar.gz...
100% 177012 KB 16092 KB/sec 00:00:11 0 Errors
[root@centos6-1 servers]#
解压安装
[root@centos6-1 servers]# tar -zvxf jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# ll
total 8
drwxr-xr-x. 8 root root 4096 Jun 29 01:54 jdk1.8.0_65
drwxr-xr-x. 10 root root 4096 Jun 29 01:36 zookeeper-3.4.5
[root@centos6-1 servers]#
配置环境变量
//修改文件
[root@centos6-1 ~]# vi /etc/profile
//文件末尾追加以下内容
export JAVA_HOME=/export/servers/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
//保存后更新环境变量
[root@centos6-1 ~]# source /etc/profile
//检查
[root@centos6-1 ~]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
[root@centos6-1 ~]#
9.解压安装hadoop
这里安装博主编译好的hadoop2.7.6安装包,教程:Hadoop——源码编译
- 注:hadoop官网是有提供hadoop的编译版本的安装包的,但是hadoop的这个编译后的安装包是兼容各个操作系统的最大公约数版本,如果你使用官网提供的安装包,在使用的过程中有可能会遇到一些本地库异常等问题,所以博主建议大家自己下载源码包,在自己的系统上编译,做到最大程度上与自己的系统兼容
[root@centos6-1 ~]# cd /export/servers/hadoop-2.7.6-src/hadoop-dist/target/
[root@centos6-1 target]# ll
total 584076
drwxr-xr-x. 2 root root 4096 Jul 3 22:31 antrun
drwxr-xr-x. 3 root root 4096 Jul 3 22:31 classes
-rw-r--r--. 1 root root 1872 Jul 3 22:31 dist-layout-stitching.sh
-rw-r--r--. 1 root root 645 Jul 3 22:31 dist-tar-stitching.sh
drwxr-xr-x. 9 root root 4096 Jul 3 22:31 hadoop-2.7.6
-rw-r--r--. 1 root root 198929351 Jul 3 22:31 hadoop-2.7.6.tar.gz
-rw-r--r--. 1 root root 26521 Jul 3 22:31 hadoop-dist-2.7.6.jar
-rw-r--r--. 1 root root 399032461 Jul 3 22:31 hadoop-dist-2.7.6-javadoc.jar
-rw-r--r--. 1 root root 24049 Jul 3 22:31 hadoop-dist-2.7.6-sources.jar
-rw-r--r--. 1 root root 24049 Jul 3 22:31 hadoop-dist-2.7.6-test-sources.jar
drwxr-xr-x. 2 root root 4096 Jul 3 22:31 javadoc-bundle-options
drwxr-xr-x. 2 root root 4096 Jul 3 22:31 maven-archiver
drwxr-xr-x. 3 root root 4096 Jul 3 22:31 maven-shared-archive-resources
drwxr-xr-x. 3 root root 4096 Jul 3 22:31 test-classes
drwxr-xr-x. 2 root root 4096 Jul 3 22:31 test-dir
[root@centos6-1 target]# cp hadoop-2.7.6.tar.gz /export/servers/
[root@centos6-1 target]# cd /export/servers/
[root@centos6-1 servers]# ll
total 240184
drwxr-xr-x. 6 root root 4096 Jul 3 21:39 apache-maven-3.5.4
drwxr-xr-x. 19 root root 4096 Apr 18 09:17 hadoop-2.7.6-src
-rwxrwxrwx. 1 root root 46994526 Jul 2 17:02 hadoop-2.7.6-src.tar.gz
-rw-r--r--. 1 root root 198929351 Jul 6 00:09 hadoop-2.7.6.tar.gz
drwxr-xr-x. 8 uucp 143 4096 Oct 7 2015 jdk1.8.0_65
drwxr-xr-x. 10 109965 5000 4096 Jul 3 21:54 protobuf-2.5.0
drwxr-xr-x. 10 501 games 4096 Nov 5 2012 zookeeper-3.4.5
[root@centos6-1 servers]# tar -zvxf hadoop-2.7.6.tar.gz
10.配置hadoop
注:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop。博主的在/export/servers/hadoop-2.7.6/etc/hadoop下
- 以下会提到一些专业词汇,一开始可以不用关注,我们第一目的是先让hadoop运行起来
[root@centos6-1 ~]# cd /export/servers/hadoop-2.7.6/etc/hadoop/
[root@centos6-1 hadoop]# ll
total 152
//以下都是hadoop的配置文件,我们只需配置其中的6个文件
-rw-r--r--. 1 root root 4436 Jul 3 22:31 capacity-scheduler.xml
-rw-r--r--. 1 root root 1335 Jul 3 22:31 configuration.xsl
-rw-r--r--. 1 root root 318 Jul 3 22:31 container-executor.cfg
-rw-r--r--. 1 root root 774 Jul 3 22:31 core-site.xml
-rw-r--r--. 1 root root 3670 Jul 3 22:31 hadoop-env.cmd
-rw-r--r--. 1 root root 4224 Jul 3 22:31 hadoop-env.sh
-rw-r--r--. 1 root root 2598 Jul 3 22:31 hadoop-metrics2.properties
-rw-r--r--. 1 root root 2490 Jul 3 22:31 hadoop-metrics.properties
-rw-r--r--. 1 root root 9683 Jul 3 22:31 hadoop-policy.xml
-rw-r--r--. 1 root root 775 Jul 3 22:31 hdfs-site.xml
-rw-r--r--. 1 root root 1449 Jul 3 22:31 httpfs-env.sh
-rw-r--r--. 1 root root 1657 Jul 3 22:31 httpfs-log4j.properties
-rw-r--r--. 1 root root 21 Jul 3 22:31 httpfs-signature.secret
-rw-r--r--. 1 root root 620 Jul 3 22:31 httpfs-site.xml
-rw-r--r--. 1 root root 3518 Jul 3 22:31 kms-acls.xml
-rw-r--r--. 1 root root 1527 Jul 3 22:31 kms-env.sh
-rw-r--r--. 1 root root 1631 Jul 3 22:31 kms-log4j.properties
-rw-r--r--. 1 root root 5540 Jul 3 22:31 kms-site.xml
-rw-r--r--. 1 root root 11801 Jul 3 22:31 log4j.properties
-rw-r--r--. 1 root root 951 Jul 3 22:31 mapred-env.cmd
-rw-r--r--. 1 root root 1383 Jul 3 22:31 mapred-env.sh
-rw-r--r--. 1 root root 4113 Jul 3 22:31 mapred-queues.xml.template
-rw-r--r--. 1 root root 758 Jul 3 22:31 mapred-site.xml.template
-rw-r--r--. 1 root root 10 Jul 3 22:31 slaves
-rw-r--r--. 1 root root 2316 Jul 3 22:31 ssl-client.xml.example
-rw-r--r--. 1 root root 2697 Jul 3 22:31 ssl-server.xml.example
-rw-r--r--. 1 root root 2191 Jul 3 22:31 yarn-env.cmd
-rw-r--r--. 1 root root 4567 Jul 3 22:31 yarn-env.sh
-rw-r--r--. 1 root root 690 Jul 3 22:31 yarn-site.xml
[root@centos6-1 hadoop]#
配置hadoop-env.sh
//修改文件
[root@centos6-1 hadoop]# vi hadoop-env.sh
//在文件末尾追加
export JAVA_HOME=/export/servers/jdk1.8.0_65
配置core-site.xml
//修改文件
[root@centos6-1 hadoop]# vi core-site.xml
//指定HADOOP所使用的文件系统schema(URI),HDFS的NameNode的地址(在configuration标签内配置)。和指定hadoop运行时产生文件的存储目录,默认/tmp/hadoop-${user.name}
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos6-1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoopdata</value>
</property>
</configuration>
配置hdfs-site.xml
//修改文件
[root@centos6-1 hadoop]# vi hdfs-site.xml
//在configuration标签内配置一下内容
<!-- 指定HDFS副本的数量 -->
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- secondary namenode 所在主机的主机名和端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>centos6-2:50090</value>
</property>
</configuration>
配置mapred-site.xml
[root@centos6-1 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@centos6-1 hadoop]# vi mapred-site.xml
//在configuration标签内配置一下内容
<!-- 指定mapreduce运行时框架,这里指定在yarn上,默认是local -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml
[root@centos6-1 hadoop]# vi yarn-site.xml
//在configuration标签内配置一下内容
<!-- 指定YARN的ResourceManager所在的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>centos6-1</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序,默认值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
配置slaves文件
[root@centos6-1 hadoop]# vi slaves
//删除里面的localhost
//并添加一下内容(集群主机名,一行一个)
centos6-1
centos6-2
centos6-3
11.配置hadoop环境变量
[root@centos6-1 hadoop-2.7.6]# vi /etc/profile
//在文件末尾追加
export HADOOP_HOME=/export/servers/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
//更新环境变量
[root@centos6-1 hadoop-2.7.6]# source /etc/profile
//检查
[root@centos6-1 hadoop-2.7.6]# hadoop version
Hadoop 2.7.6
Subversion Unknown -r Unknown
Compiled by root on 2018-07-03T14:18Z
Compiled with protoc 2.5.0
From source with checksum 71e2695531cb3360ab74598755d036
This command was run using /export/servers/hadoop-2.7.6/share/hadoop/common/hadoop-common-2.7.6.jar
[root@centos6-1 hadoop-2.7.6]#
13.分发hadoop到centos6-1和centos6-2
如果不执行此操作,则需要在各个虚拟机上重新再执行以上操作,此操作可以节省大量时间
//分发JDK
[root@centos6-1 hadoop-2.7.6]# scp -r /export/servers/jdk1.8.0_65 root@centos6-2:/export/servers/
[root@centos6-1 hadoop-2.7.6]# scp -r /export/servers/jdk1.8.0_65 root@centos6-3:/export/servers/
//分发hadoop
[root@centos6-1 hadoop-2.7.6]# scp -r /export/servers/hadoop-2.7.6/ root@centos6-2:/export/servers/
[root@centos6-1 hadoop-2.7.6]# scp -r /export/servers/hadoop-2.7.6/ root@centos6-3:/export/servers/
//分发环境变量的配置文件
[root@centos6-1 hadoop-2.7.6]# scp -r /etc/profile root@centos6-2:/etc/
[root@centos6-1 hadoop-2.7.6]# scp -r /etc/profile root@centos6-3:/etc/
//更新环境变量
[root@centos6-2 servers]# source /etc/profile
[root@centos6-3 servers]# source /etc/profile
14.格式化namenode
[root@centos6-1 servers]# hdfs namenode -format
[root@centos6-2 servers]# hdfs namenode -format
[root@centos6-3 servers]# hdfs namenode -format
15.启动hadoop
在centos6-1上执行以下命令
//启动HDFS
[root@centos6-1 ~]# start-dfs.sh
//启动YARN
[root@centos6-1 ~]# start-yarn.sh
16.查看集群各个主机进程
//centos6-1进程状态
[root@centos6-1 ~]# jps
3024 Jps
2596 ResourceManager
2700 NodeManager
2207 NameNode
2335 DataNode
[root@centos6-2 ~]#
//centos6-1进程状态
[root@centos6-2 ~]# jps
2306 NodeManager
2114 DataNode
2214 SecondaryNameNode
2444 Jps
[root@centos6-2 ~]#
//centos6-3进程状态
[root@centos6-3 ~]# jps
2240 NodeManager
2375 Jps
2120 DataNode
[root@centos6-3 ~]#
进程分布
主机 | NameNode | DataNode | SecondaryNameNode | ResourceManager | NodeManager |
---|---|---|---|---|---|
centos6-1 | ✔️ | ✔️ | ✔️ | ✔️ | |
centos6-2 | ✔️ | ✔️ | ✔️ | ||
centos6-3 | ✔️ | ✔️ |
注:以上进程与主机的分布是通过上面的配置实现的,这篇博文不做讲解,后面章节会展开来说。
17.web访问hadoop
192.168.214.150:8088访问ResourceManager服务
192.168.214.150:50070访问NameNode服务
18.总结
hadoop的集群已经搭建起来了,后面我们将开始深入hadoop的底层架构。今天就到这,睡了,明天会更好。