1、 集群搭建形式
Hadoop环境搭建分为三种形式:单机模式、伪分布式模式、完全分布模式
(1)单机模式—— 在一台单机上运行,没有分布式文件系统,而是直接读写本地操作系统的文件系统。
(2)伪分布式—— 也是在一台单机上运行,但不同的是Java进程模仿分布式运行中的各类节点。即一台机器上,既当NameNode,又当DataNode,或者说既是JobTracker又是TaskTracker。没有所谓的在多台机器上进行真正的分布式计算,故称为“伪分布式”。
(3)完全分布式—— 真正的分布式,由3个及以上的实体机或者虚拟机组成的机群。一个Hadoop集群环境中,NameNode,SecondaryName和DataNode是需要分配在不同的节点上,也就需要三台服务器。
前两种模式一般用在开发或测试环境下,生产环境下都是搭建完全分布式模式。
从分布式存储的角度来说,集群中的节点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。
从分布式应用的角度来说,集群中的节点由一个JobTracker和若干个TaskTracker组成。JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。
2、环境
操作系统:CentOS7
机器:虚拟机3台,(master 192.168.1.101, slave1 192.168.1.102, slave2 192.168.1.103)
JDK:1.8.0_221(jdk-8u221-linux-x64.tar.gz)
Hadoop:2.9.2(http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz)
3、 搭建步骤
(1) 每台机器安装&配置JDK
详见博客(https://blog.csdn.net/lnxcw/article/details/106336186)
(2) 修改每台机器主机名(hostname)
hostnamectl set-hostname master (立即生效)
hostnamectl set-hostname slave1 (立即生效)
hostnamectl set-hostname slave2 (立即生效)
(3)修改每台机器/etc/hosts文件
(切换到root用户(获取管理员权限)
输入命令:$su –l root)
vi /etc/hosts
修改其中1台,然后scp到其它机器
scp 文件名 远程主机用户名@远程主机名或ip:存放路径
scp hosts root@192.168.1.102:/etc/
scp hosts root@192.168.1.103:/etc/
修改完之后,互ping其它机器,能互ping则说明修改OK
ping -c 3 slave1 (※ 3表示发送 3 个数据包)
(4) 配置ssh,实现无密码登录
无密码登录,效果也就是在master上,通过ssh slave1或者ssh slave2就可以登录对方机器,而不用输入密码。
1) 每台机器执行
ssh-keygen -t rsa
,接下来一路回车即可
执行ssh-keygen -t rsa主要是生成 密钥 和 密钥的存放路径
我们用的root用户,公钥私钥都会保存在~/.ssh下,所以要进入该目录
cd ~/.ssh
2) 在master上将公钥放到authorized_keys里,命令:
cat id_rsa.pub > authorized_keys
3) 将master上的authorized_keys放到其它机器上
scp authorized_keys root@hadoop02:~/.ssh/
scp authorized_keys root@hadoop03:~/.ssh/
4) 测试是否成功
(5)安装&配置Hadoop
详见博客(https://blog.csdn.net/lnxcw/article/details/106337081)
1) 创建HDFS存储目录
cd /opt/hadoop-2.9.2
mkdir hdfs
cd hdfs
mkdir name data tmp
/opt/hadoop-2.9.2/hdfs/name --存储namenode文件 /opt/hadoop/hdfs/data --存储数据
/opt/hadoop-2.9.2/hdfs/tmp --存储临时文件
2)修改/opt/module/hadoop-2.9.2/etc/hadoop/hadoop-env.sh文件,设置JAVA_HOME为实际路径,否则启动集群时,会提示路径找不到
3)修改/opt/module/hadoop-2.9.2/etc/hadoop/yarn-env.sh文件,设置JAVA_HOME为实际路径
4)配置/opt/module/hadoop-2.9.2/etc/hadoop/core-site.xml
增加hadoop.tmp.dir 和 fs.default.name
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.9.2/hdfs/tmp</value>
</property>
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
5)配置/opt/module/hadoop-2.9.2/etc/hadoop/hdfs-site.xml
dfs.replication:默认值3
dfs.permissions:默认值为true,设置为true有时候会遇到数据因为权限访问不了;设置为false可以不要检查权限就生成dfs上的文件
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/module/hadoop-2.9.2/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/module/hadoop-2.9.2/hdfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop03:50090</value>
</property>
6)配置/opt/module/hadoop-2.9.2/etc/hadoop/mapred-site.xml
mapreduce.framework.name:指定mapreduce运行在yarn平台,默认为local
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7)配置/opt/module/hadoop-2.9.2/etc/hadoop/yarn-site.xml
yarn.resourcemanager.hostname:指定yarn的resourcemanager的地址
yarn.nodemanager.aux-services:reducer获取数据的方式
yarn.nodemanager.vmem-check-enabled:意思是忽略虚拟内存的检查,如果安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。如果是在实体机上,并且内存够多,可以将这个配置去掉
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
(8) 配置/opt/module/hadoop-2.9.2/etc/hadoop/slaves文件,将里面的localhost删除,配置后内容如下:
9)copy整个/opt/module/目录到其它机器,并修改2和3的环境变量,将JDK和Hadoop路径添加进去
scp -r module root@slave1:/opt/
scp -r module root@slave2:/opt/
让修改后的文件生效:source /etc/profile
(6) 启动Hadoop
1) 启动之前需要格式化一下。因为hadoop01是namenode,hadoop02和hadoop03都是datanode,所以在master上运行
hadoop namenode -format
格式化成功后,可以看到在/opt/module/hadoop-2.9.2/hdfs/name目录下多了一个current目录,而且该目录下有一系列文件,如下:
2)执行启动(namenode只能在hadoop01上启动,因为配置在hadoop01上;datanode每个节点上都可以启动)
a.启动HDFS
sbin/start-dfs.sh
start-all.sh(谨慎)
b.启动yarn
sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
(7)在win网上打开网页,查看HDFS管理页面 192.168.1.101:50070
若无法访问,则查看是否关闭防火墙。
注:
(1)关闭nodemanager 、resourcemanager和historymanager
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
(2)启动nodemanager、resourcemanager和historymanager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver