一.Hadoop的三种运行模式 :
1.独立(本地)运行模式:无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。
2.伪分布式模式: Hadoop守护进程运行在本地机器上,通过不同进程模拟集群中的节点,伪分布式是完全分布式的一个特例。
3.完全分布式模式:完全分布式模式才是生产环境采用的模式, Hadoop守护进程运行在服务器集群上,生产环境一般都会做HA,以实现高可用。(本文 以此为 例)
二.前提
1.要有一个集群;
2.jdk(一般是 1.8,尽量 去官网下载,包含(jre));
3.hadoop下载(版本自己先考虑好,若安装其他组件,先考虑兼容性,最新未必最好):
三.安装hadoop
安装 hadoop
1.从官网下载的 Hadoop 安装包,上传至Linux上
对 tar 进行解压
sha@slaver3:~$ tar -zxvf hadoop-3.2.2.tar.gz
将解压后的 hadoop-3.2.2 整体移到 /usr/local/hadoop(hadoop会自行建立)
sha@slaver3:~$ sudo mv hadoop-3.2.2 /usr/local/hadoop
打开 /usr/local 可以看到 hadoop 目录
配置hadoop的环境
(1)添加路径
sha@slaver3:/usr/local$ sudo vi /etc/profile
添加以下内容并保存退出
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:/$HADOOP_HOME/sbin
(2)使环境变量生效
sha@slaver3:/usr/local$ source /etc/profile
四.配置hadoop的5个文件(我的集群是slaver3为namenode,以此为例)
(core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml,hadoop-env.sh)
1.core-site.xml
sha@slaver3:/usr/local/hadoop/etc/hadoop$ sudo vi core-site.xml
复制以下内容在<configuration> </configuration>之间,并保存退出(更改主机名)
<!--指定namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://slaver3:9000</value> #一定要记得更改主机名,即为namenode
</property>
<!--用来指定hadoop时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmpdir</value>
</property>
<!--用来设置检查点检查点备份日志的最长时间-->
<property>
<name>fs.checkpoint.period</name>
<value>3600</value>
</property>
2.hdfs-site.xml
sha@slaver3:/usr/local/hadoop/etc/hadoop$ sudo vi hdfs-site.xml
复制以下内容在<configuration> </configuration>之间,并保存退出(更改主机名)
注:下列内容中,最后一项的作用是 使得可以在网站上查看hadoop相关情况(不配也可,以防万一)
<!--指定hdfs保存数据的副本数量-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定hdfs中namenode的存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmpdir/dfs/name</value>
</property>
<!--指定hdfs中datanode的存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmpdir/dfs/data</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>slaver3:50070</value> # 记得更改主机名,即namenode
</property>
3.mapred-site.xml
对于较高版本的 hadoop , 存在 mapred-site.xml,但 低版本 没有
如果没有 mapred-site.xml 文件的话,执行这一步;如果有的话,省略此步
mv mapred-site.xml.template mapred-site.xml
对 mapred-site.xml 进行更改;
sha@slaver3:/usr/local/hadoop/etc/hadoop$ sudo vi mapred-site.xml
复制以下内容在<configuration> </configuration>之间,并保存退出(无需更改)
<!--指定MR运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.yarn-site.xml
sha@slaver3:/usr/local/hadoop/etc/hadoop$ sudo vi yarn-site.xml
复制以下内容在<configuration> </configuration>之间,并保存退出(更改主机名)
注:是否更改主机名,hadoop的namenode、secondarynamenode、yarn的resourcemanager可以设在不同的主机上,从而减轻同一台主机的负担---->初学者还是设为一台主机吧,有能力者可进行修改;
<!--指定Yarn的ResourceManager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value> # 这里的 node1 记得改哦,可根据自己的能力去设哦
</property>
<!--指定Yarn的NodeManager获取数据的方式是shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--Yarn打印工作日志-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
5.hadoop-env.sh
修改hadoop-env.sh,添加Java环境变量JAVA_HOME
sha@slaver1:/usr/local/hadoop/etc/hadoop$ sudo vi hadoop-env.sh
添加以下内容并保存退出
JAVA_HOME=/usr/local/java
五.配置hadoop的 slavers/workers 文件
1.slaves文件用于指定datanode所在主机,默认为localhost,配置完全分布模式时,可改为实际作为datanode节点的主机名或IP地址。
sha@slaver1:/usr/local/hadoop/etc/hadoop$ sudo vi workers
输入三台主机中的 数据节点 的主机名 ,保存并退出
2.masters文件用于指定secondarynamenode所在主机,该文件需要自行创建去设定哪一台主机为第二名称节点(也可不去建立设定,一般默认 0.0.0.0,本教程忽略)
六.将 Hadoop 发布到其他服务器
参考:
区别zookeeper其发布之后,更改 myid 和 配置环境变量 ,Hadoop 只需在 /etc/profile 下,设置环境变量即可,因为 slavers/workers 文件内容相同 ;
七.格式化namenode(是对namenode进行初始化)
因为 我的集群 namenode 是 slaver3 ,则对其进行格式化
sha@slaver3:/usr/local/hadoop/etc/hadoop$ hdfs namenode -format
注:对 namenode 进行格式化,仅在安装时 格式化 一次 , 下次开机就不再做此操作了。
八.启动和关闭hadoop与 yarn(仅在一台主机上启动)
启动的相关命令:
(1)start-all.sh (已被禁用) --->start-dfs.sh + start-yarn.sh
(2)start-dfs.sh ---->hadoop-daemon.sh start namenode + hadoop-daemons.sh start datanode
(3)start-yarn.sh ----->yarn-daemon.sh start resourcemanager + yarn-daemons.sh start nodemanager
(4)stop-dfs.sh 停止HDFS服务
(5)stop-yarn.sh 停止yarn服务
1.先启动HDFS: $ start-dfs.sh ,并输入 jps 命令(各个主机均执行该操作)查看;
sha@slaver1:/usr/local/hadoop/sbin$ ./start-dfs.sh
2.再启动YARN:$ start-yarn.sh(yarn主节点上启动)
sha@slaver3:/usr/local/hadoop/sbin$ ./start-yarn.sh
3.启动后可以在Web页面查看hadoop信息,显示如下图即算成功;
http://主机名/主机名ip:50070
4. 关闭集群:(在一个主机上)
注意关闭顺序:先关闭 yarn , 再关闭 hadoop;(正确关闭集群,否则坏掉可能得重配)
sha@slaver3:/usr/local/hadoop/sbin$ ./stop-yarn.sh
sha@slaver3:/usr/local/hadoop/sbin$ ./stop-dfs.sh
注:
1.熟悉安装后,可根据自己要求去安排各个主机的节点;
2.启动集群,要注意区别于 zookeeper在每个主机上均启动,hadoop在namenode上启动,yarn在resourcemanager上启动,如果安排了不同的主机,一定要注意;
3.如果格式化之后启动集群发生错误,可到 hadoop目录下查看 logs目录中的日志,有助于解决问 题;
4.解决问题之后,要将 hadoop 目录下(所有主机)的 logs 目录和存放 hadoop 节点相关信息的目录(本教程是tmpdir目录)删掉,在 namenode 上重新进行格式化,再次启动(否则会和之前的一样报错);如果并未将全部主机的相关目录删掉,很可能会造成 id 不同,继续报错;