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放在一起了

centos7两台服务器搭建hadoop生态 两台linux集群搭建_linux


环境安装都是在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/

centos7两台服务器搭建hadoop生态 两台linux集群搭建_centos_02


安装的环境变量为:两台机器都是一样,以下不再重复,变量文件与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