1. 环境需求:
Ubuntu18.01 192.168.31.9 host-gpu namenode + secondarynamenode
Centos7 192.168.31.10 host-cpu resourcemanager
注意:一般centos装系统之后是:localhost,一定要修改过来,不然后面需要免密ssh的时候就会有大坑
需求集群需求列表,一般都是3台机器,但是由于我目前只有两台机器,所以就把把secondarynamenode与namenode放在一起了
环境安装都是在root目录下
2. JDK与Hadoop安装
2.1.安装jdk 1.8
我下载的是:jdk-8u261-linux-x64.tar.gz,修改文件夹的名字为:hadoop, 然后放在了/opt/下
ubuntu18.04安装在加目录下: vim ~/.bashrc下面的
export JAVA_HOME=/opt/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc
测试 java -version,如果有反应,则搭建成功
centos安装在/etc/profile.d/my_env.sh, 这个是自己创建的
环境变量与上面一样;然后执行
source /etc/~/.bashrc 用户环境变量(最好选择这个)
source /etc/profile 系统环境变量(这个需要关机重启,以后所有的shell才能生效)
2.2.安装hadoop 3.2.2
下载地址:https://mirror.tuna.tsinghua.edu.cn/apache/hadoop/core/
安装的环境变量为:两台机器都是一样,以下不再重复,变量文件与jdk一致
export HADOOP_DIR=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
ubuntu:
source ~/.bashrc
centos:
source /etc/profile
测试是否安装成功:
hadoop version
每次更改完环境变量都要执行,而且需要在新的terminal下才会生效,下面不再重复。
注意:很多教程是没有export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop,这个必须要添加,不然后面没法用,负责出现错误如下:
ARNING: log4j.properties is not found. HADOOP_CONF_DIR may be incomplete.
Exception in thread "main" java.lang.RuntimeException: core-site.xml not found
注意不用手动创建:data等目录,启动之后会自动创建的。
3.两台机器需要ssh免密登录
参考我的另外一个链接:
另外:
两台机器需要关闭防火墙,不然ssh就有问题
4. 配置文件
在etc/hadoop下面需要修改:
core-site.xml:核心配置文件。
hdfs-site.xml:hdfs存储相关配置。
mapred-site.xml:MapReduce相关的配置。
yarn-site.xml:和yarn相关的一些配置。
workers(2.7.5 版本叫 slaves):用来指定从节点,文件中默认是localhost。
hadoop-env.sh:配置hadoop相关变量(3.2需要配置java_home和user,2.7.5只需要配置java_home)。
yarn-env.sh
mapred-env.sh
sbin/下面需要修改:
start-dfs.sh
stop-dfs.sh
start-yarn.sh
stop-yarn.sh
修改core-site.xml:核心配置文件中指定默认文件系统和临时文件目录
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://host-gpu:9000</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data/tmp</value>
</property>
</configuration>
修改hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>host-gpu:50090</value>
</property>
yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>host-cpu</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/usr/local/software/hadoop/etc/hadoop,
/usr/local/software/hadoop/share/hadoop/common/*,
/usr/local/software/hadoop/share/hadoop/common/lib/*,
/usr/local/software/hadoop/share/hadoop/hdfs/*,
/usr/local/software/hadoop/share/hadoop/hdfs/lib/*,
/usr/local/software/hadoop/share/hadoop/mapreduce/*,
/usr/local/software/hadoop/share/hadoop/mapreduce/lib/*,
/usr/local/software/hadoop/share/hadoop/yarn/*,
/usr/local/software/hadoop/share/hadoop/yarn/lib/*
</value>
</property>
修改hadoop-env.sh
export JAVA_HOME=/opt/jdk 不要写成${JAVA_HOME}负责会报错,找不到JAVA_HOME
yarn配置文件 yarn-env.sh
添加:
export JAVA_HOME=/opt/jdk 不要写成${JAVA_HOME}负责会报错,找不到JAVA_HOME
mapreduce配置文件
mapred-env.sh
添加:
export JAVA_HOME=/opt/jdk 不要写成${JAVA_HOME}负责会报错,找不到JAVA_HOME
在start-dfs.sh /stop-dfs.sh在文件的一开始添加
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在 /stat-yarn.sh /stop-yarn.sh在文件的一开始添加
YARN_RESOURCEMANAGER_USER=root
HDFS_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
如果最后四个文件不修改则会报错,ERROR: User defined in HDFS_DATANODE_SECURE_USER (yarn) does not exist. Aborting.
如链接所示:https://www.codeleading.com/article/8431866266/
5.配置测试
在ubuntu18.04输入:
hdfs namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh
浏览器查看:
http://host-gpu:9870 http://host-gpu:8088
6.遗留问题:
6.1 当sbin/stop-all.sh之后会出现:
NodeManager did not stop gracefully after 5 seconds: kil
解决方案:
http://blog.sina.com.cn/s/blog_ad795db30102w4a8.html
在hadoop目录下新建立一个tmp文件夹,好像后面就没事了
6.2 put: File /data/word.txt.COPYING could only be replicated to 0 nodes inste
解决方案:
直接重新
hdfs namenode -format
删除原来的data