环境:
ubuntu 18.04.1
hadoop 3.1.4
参考:https://blog.51cto.com/zero01/2091635
一.准备
搭建YARN环境之前一般已经进行好了HDFS的环境搭建,具体内容参考:
在ubuntu下进行HDFS伪分布式环境搭建
二.YARN环境搭建
因为已经安装好了hadoop,所以直接开始配置
1.配置
编辑/usr/local/hadoop/etc/hadoop/yarn-env.sh文件,加入下列几行代码:
export JAVA_HOME=usr/lib/jvm/java-11-openjdk-amd64
#这两句只有当jdk是9以上才用
export YARN_RESOURCEMANAGER_OPTS="--add-modules=ALL-SYSTEM"
export YARN_NODEMANAGER_OPTS="--add-modules=ALL-SYSTEM"
编辑yarn-site.xml文件:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>127.0.0.1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>127.0.0.1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>127.0.0.1:8031</value>
</property>
2.启动YARN
cd usr/local/hadoop/sbin
./start-yarn.sh
如果进程能启动,则有:
但是jps后发现并没有Resourcemanager和nodemanager进程,localhost:8088也进不去。进/usr/local/hadoop/logs查看resourcemanager日志,发现如下报错:
上网查了一圈,发现是因为jdk版本问题这里有给解决方法,尝试未果。故手动安装jdk8(可安装多个jdk系统),并将hadoop的环境配置为jdk8
安装JAVA8方法:
华为镜像源
下载jdk-8u191-linux-x64.tar.gz,解压到/usr/lib/jvm8下。sudo vim ~/.bashrc修改环境变量:
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm8/jdk1.8.0_191 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source ~/.bashrc
系统注册jdk:
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_191/bin/java 300
在多个java版本中切换:
sudo update-alternatives --config java
切换到JAVA8后重新启动各个结点,仍报错。在JAVA和hadoop安装的环境变量处将JAVA_HOME设为JAVA8的路径。再重新启动结点,报错:
只能把路径改回去…
按照这里的方法重新格式化了结点,start-all,得到
然后stop all ,再start all,jps又没有那两个进程了…
想不出方法,未完待续…
9.24:
按照这里的内容,修改了一些配置文件,结果出了更多错误了…,找时间再修改回来…
重新开了个虚拟机,按照这里配置,直到start-all.sh之前都没啥问题,跟博客中的一样,而运行start-all后报错:
估计哪里配置有问题,准备重新修改下配置然后重新格式化试试…结果是下面这个拼写错误
把default改了回来,重启再报错:
进入core-site.xml,把fs.defaultFS的value改为hdfs://localhost:8020(hadoop改为localhost,端口改为8020,用9000无法启动resourcemanager进程!!!localhost代表127.0.0.1即本机,hadoop为用户名,两者有区别)
再在hdfs-site.xml后面加入:
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value> #hadoop3下hdfs的监听端口为9870,这样才能通过localhost:9870访问namenode
</property>
<property>
<name>dfs.namenode.name.dir</name> #name节点的存储位置
<value>file:/opt/data/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> #data节点的存储位置
<value>file:/opt/data/tmp/dfs/data</value>
</property>
重启,成功
(如果过了一段时间resourcemanager进程没有的话,stopall再startall即可)
(注:这里有对namenode等进程做一个介绍,具体来说:
HDFS包括namenode/datanode/secondarynode,YARN包括resourcemanager/nodemanager)
按照这里进行mapreduce的测试:出现错误:
进入yarn-site-xml文件,将resourcemanager.hostname由hadoop改为localhost,stopall再startall,重新运行,成功。
运行过程如上
注:hdfs简单命令,hdfs下的文件系统有一套和linux不同的命令格式,如下:
hdfs dfs -ls / #查看当前目录信息
hdfs dfs -ls /hdfs路径 #查看hdfs下某个文件夹路径下的文件
hdfs dfs -put /本地文件路径 /hdfs路径 #从linux上传文件到hdfs
hdfs dfs -mkdir -p /hdfs路径 #在hdfs上创建目录
hdfs dfs -cat /文件路径 #查看hdfs下某个文件
hdfs dfs -rm /文件路径 #删除hdfs下某个文件
hdfs dfs -rm -r /文件夹名 #删除hdfs下某个文件夹
输入文件一般都是在linux写好再上传
最后,在yarn-site.xml加入
<property>
<name>yarn.resourcemanager.address</name>
<value>127.0.0.1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>127.0.0.1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>127.0.0.1:8031</value>
重启,访问8088端口可得到关于resourcemanager的信息
注:MapReduce2.x架构下,看到JobTracker和TaskTracker已经不复存在了,取而代之的是ResourceManager和NodeManager。不仅架构变了,功能也变了,2.x之后新引入了YARN,在YARN之上我们可以运行不同的计算框架,不再是1.x那样只能运行MapReduce了