目前Apache官网已经推出了最新版的Hadoop3.3,比原来增加了很多新特性。Hadoop的安装主要是为Spark提供HDFS的支持和yarn的调度。那么我们今天介绍全分布式的Hadoop的安装方法。安装系统:Ubuntu 18.04主节点(Master)数量:1从节点(Slave)数量:2
一、前期准备
1.设置用户
在三台机器上新建Hadoop用户并设置sudo权限:
<code>$ su输入密码 $useradd -m hadoop -s /bin/bash $passwd hadoop # 设置密码 $adduser hadoop sudo # 为用户hadoop增加管理员权限/<code>
这样做的目的主要是为了避免用root用户,从安全考虑。
2.安装Java和Scala并设置相应的环境变量
Hadoop3.0之后的版本只支持Java8以后的版本。下载完jdk解压之后放置于'/usr/lib/jvm'下面(目录可以更改),下载完之后在'/etc/profile'中
<code>export JAVA_HOME=/usr/local/java-1.8.0 export JRE_HOME=/usr/local/java-1.8.0/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$JAVA_HOME/bin:$PATH export SCALA_HOME=/usr/share/scala-2.11/<code>
配置相关的环境变设置完之后,source /etc/profile使环境变量生效。
3.配置hosts并设置集群机器之间的免密登录。
由于Hadoop的各个节点之间存在着频繁的文件拷贝,所以我们需要设置机器之间的免密登录,如果不设置就相当于集群之间的机器无法相互通信,自然无法安装成功!因此我们需要配置主节点到从节点的免密登录和从节点到主节点的免密登录。步骤如下:
修改hosts
<code>sudo vi /etc/hosts#设置每个机器的名称和地址:我的设置如下 10.0.0.11 Master 10.0.0.12 Slave1hadoop 10.0.0.13 Slave2hadoop/<code>
设置机器之间免密登录
ubuntu默认安装了ssh,直接使用即可。如果没有安装的话,需要提前安装一下。我们在各个节点~目录下新建一个'.ssh'文件夹来存放我们的秘钥。然后主节点下运行运行:
<code>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa ##运行之后直接回车就好 ##将某个秘钥添加为可信,接收到这个host的请求后不再需要输入密码 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys /<code>
然后我们将生成的id_rsa.pub使用scp命令拷贝到两个从节点,这样我们从主节点登录到从节点就免密了,类似的可以设置从节点到主节点的免密。设置完免密登陆之后在各个机器上登录一下试试,确保设置正确。
二、Hadoop3.3全分布式环境搭建
做完上述的工作之后,基本的环境配置就已经做好了。这时候我们需要从官网中下载对应的安装包(不带src的安装包),拉取之后我们将其解压到目录/usr/local目录下,并且将该目录重命名为hadoop。同时,我们还需要将hadoop目录设置为hadoop用户所有:
<code>sudo chown -R hadoop:hadoop hadoop/<code>
1. 设置相应的数据目录
这些数据目录是可以自己设置的,只需要在后续的配置中对对应的目录指定就可以,下面使我的配置。在/usr/local/hadoop下新建文件夹/tmp来做我们的临时目录。
<code>sudo mkdir -p /data/hadoop/hdfs/nn #namenode目录 sudo mkdir -p /data/hadoop/hdfs/dn #datanode目录 sudo mkdir -p /data/hadoop/yarn/nm #nodemanager目录 sudo chown -R hadoop:hadoop /data/<code>
2. 修改etc/hadoop/workers文件
注意:旧版本以及网上的教程是修改etc/hadoop/slaves文件,但是新版已经移除了这一个文件,取而代之的是workers文件,我按照我的配置将该文件内容替换为:
<code>Master Slave1 Slave2/<code>
上述设置代表我的集群有三个datanode结点。
3. 修改对应etc/hadoop下面的其他配置文件:
hadoop_env.sh
<code>export JAVA_HOME=${JAVA_HOME} #设置JAVA_HOME的路径,需要再次指明 export HADOOP_HOME=/usr/local/hadoop #运行对应结点的用户名称,因为涉及到文件夹的权限问题,一定要认真设置。 export HDFS_DATANODE_USER=hadoop export HDFS_SECONDARYDATANODE_USER=hadoop export HDFS_NAMENODE_USER=hadoop export YARN_RESOURCEMANAGER_USER=hadoop export YARN_NODEMANAGER_USER=hadoop/<code>
注意的是,如果之前没有设置JAVA_HOME的环境变量,此处直接这样引用会出现错误,改用绝对路径即可消除错误。
core-site.xml
<code> fs.defaultFS hdfs://Master:9000 hadoop.tmp.dir file:/usr/local/hadoop/tmp Abase for other temporary directories. /<code>
上述分别设置了主节点的ip和端口以及临时目录的地址(上面创建的tmp目录)。
hdfs-site.xml
<code> dfs.namenode.secondary.http-address Master:50090 dfs.replication 2 dfs.namenode.name.dir file:///data/hadoop/hdfs/nn dfs.datanode.data.dir file:///data/hadoop/hdfs/dn /<code>
设置了相应的目录和端口,注意与上面创建的目录相对应。dfs.replication代表备份数量,一般设为3,此处我们设为2即可。
mapred-site.xml
<code> mapreduce.framework.name yarn mapreduce.jobhistory.address Master:10020 mapreduce.jobhistory.webapp.address Master:19888 /<code>
yarn-site.xml
<code> yarn.resourcemanager.hostname Master yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.local-dirs file:///data/hadoop/yarn/nm /<code>
4. 从节点设置
我们将hadoop目录拷贝到从节点的对应目录,并且修改为hadoop用户所有。仿照主节点对应的数据目录设置,设置对应的数据目录(即/data一系列目录),并设置为hadoop用户所有。
5. 设置相应的辅助环境变量,方便使用
在/etc/profile下面添加一下环境变量,修改后source /etc/profile。
<code>export HADOOP_HOME=/usr/local/hadoop export PATH="${HADOOP_HOME}/bin:${SCALA_HOME}/bin:$PATH"/<code>
后续spark也安装在对应的目录下,干脆一块设置了!
6. 启动集群,并验证配置是否正确
在sbin目录下,使用./start-all.sh脚本启动集群。启动后运行hdfs dfsadmin -report查看对应的数据结点是否正确。浏览器输入Mater:8088就可以看到我们Hadoop的主界面了。如果没有启动成功,请查看logs目录下各个节点的日志,查看错误,一般情况都是由于上述的文件设置不正确导致,请仔细查看。