HADOOP集群安装配置教程——hadoop-3.1.3 CentOS7

6 篇文章 0 订阅
3 篇文章 1 订阅

最近学大数据导论课程,要求学学hadoop,本教程主要讲述如何配置 Hadoop 集群(这里用的 Hadoop3.1.3),由于我也是自己捣鼓的,很多问题其实是没有解决的,该教程只是为了提供方案与参考,尚有不足可提出。



1.1 准备

由于资源限制,这里简单使用了两个节点(两台服务器)来搭建集群环境,一台服务器作为 Master 节点,运行内容:

[root@Master ~]# jps
81634 Jps
6377 NameNode
6985 ResourceManager
6718 SecondaryNameNode

一台服务器作为 Slave 节点,运行内容:

[root@Slave ~]# jps
2176 DataNode
207243 Jps
2349 NodeManager

1.2 简介步骤

    1. 选定一台服务器作为 Master 节点,其他作为 Slave 节点;
    1. 所有节点需安装 SSH 服务端、JAVA环境;
    1. Master 节点配置安装 Hadoop;
    1. 将 Master 节点的 Hadoop 目录拷贝到其他 Slave 节点;
    1. Master 节点开启 Hadoop
    1. 命令测试

1.3 环境配置

JAVA 环境配置
SSH 安装略
SSH 原理与运用


2.1 安装 Haoop 前奏

  • 用户
    对于 hadoop 操作需要确定一个操作用户,拥有与 root 相当的权限,不然后面会出现很多权限问题

    (对,我没解决这些问题,嫌麻烦,所以这里用的是 root 用户直接操作,当然其实不推荐这样的,因为风险很多,但是我只是用于初入课程操作,所以就简略如此了)

    当然这里提供创建用户方法:
    创建新用户 并设置密码

    sudo useradd -m username -s /bin/bash
    sudo passwd username
    

    给用户 root 权限 ( 没写 )(放 sudo 用户组里 或者 直接授予权限)

  • 安装 SSH、配置SSH无密码登陆
    Hadoop 集群运行需要用到 SSH 登陆,(Master 节点 运行 Hadoop 时会远程登陆 Slave 节点),一般服务器都默认安装了 SSH server,所以这里就不介绍如何安装SSH,自行百度。

    由于SSH登陆每次都需要输入密码,所以我们用 ssh密钥 来设置无密码登陆,详情见 SSH 原理与运用
    参考命令

ssh-copy-id username@host /dirname

2.2 安装 Hadoop3.1.3

2.2.1 下载解压

Hadoop 安装文件可以在 [Hadoop官网](http://hadoop.apache.org/)下载 hadoop-3.1.3.tar.gz,也可以看镜像站,我用的[北京信息学院](http://mirror.bit.edu.cn/apache/hadoop/common/)。
下载到本地后,我安装到了 /opt 中:
```shell
sudo tar -zxf ~/Downloads/hadoop-3.1.3.tar.gz -C /opt # 解压
cd /opt
sudo mv ./hadoop-3.1.3/ ./hadoop # 修改文件夹名
sudo chown -R hadoop ./hadoop # 修改文件权限
```
检查是否可用:
```shell
cd /opt/hadoop
./bin/hadoop version
```

2.2.2 配置环境

PATH 环境变量

sudo vi /etc/profile
# 结尾添加 Hadoopp 环境变量,我就把啥都加上来了,有赘余别骂
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH

为方便起见这里将服务器ip什么的就给了个名字。

sudo vi /etc/hosts

XX.XX.XX.XX     Master
XX.XX.XX.XX     Slave

然后就是对hadoop目录下的配置文件进行填写了,文件目录在 /opt/hadoop/etc/hadoop

hadoop-env.sh 直接在开头加载 PATH 就好。

.  /etc/profile
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 ..............

core-site.xml
这里数据存储是放在 /data 目录下,里面有 tmp,name,datanode 三个文件夹,自行创建。放默认目录的话,出现了一些临时文件不存在的问题,所以如此做。

<configuration>
        <!-- Master addr -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <!-- temporary directories -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/data/tmp</value>
        </property>
</configuration>

hdfs-site.xml

<configuration>
        <!-- hdfs namenode http connection -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>Master:50070</value>
        </property>
        <!-- hdfs secondarynamenode http connection -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <!-- hdfs 副本数量 -->
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <!-- namenode 存放路径 -->
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/data/name</value>
        </property>
        <!-- datanode 存放路径 -->
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/data/datanode</value>
        </property>

        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>

</configuration>

mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/opt/hadoop</value>
        </property>
        <property>
                <name>mapreduce.application.classpath</name>
                <value>
                /opt/hadoop/etc/hadoop,
                /opt/hadoop/share/hadoop/common/*,
                /opt/hadoop/share/hadoop/common/lib/*,
                /opt/hadoop/share/hadoop/hdfs/*,
                /opt/hadoop/share/hadoop/hdfs/lib/*,
                /opt/hadoop/share/hadoop/mapreduce/*,
                /opt/hadoop/share/hadoop/mapreduce/lib/*,
                /opt/hadoop/share/hadoop/yarn/*,
                /opt/hadoop/share/hadoop/yarn/lib/*
                </value>
        </property>
</configuration>

(写到这里发现自己 jobhistory 还没开)

yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
    <property>
        <description>The http address of the RM web application.</description>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>${yarn.resourcemanager.hostname}:8088</value>
    </property>

    <property>
        <description>The address of the applications manager interface in the RM.</description>
        <name>yarn.resourcemanager.address</name>
        <value>${yarn.resourcemanager.hostname}:8032</value>
    </property>

    <property>
        <description>The address of the scheduler interface.</description>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>${yarn.resourcemanager.hostname}:8030</value>
    </property>

    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>${yarn.resourcemanager.hostname}:8031</value>
    </property>

    <property>
        <description>The address of the RM admin interface.</description>
        <name>yarn.resourcemanager.admin.address</name>
        <value>${yarn.resourcemanager.hostname}:8033</value>
    </property>

</configuration>

start-dfs.sh stop-dfs.sh 脚本里加个修改下用户(我用的root)

function hadoop_usage
{
  echo "Usage: start-dfs.sh [-upgrade|-rollback] [-clusterId]"
}

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

start-yarn.sh stop-yarn.sh 脚本里加个修改下用户(我用的root)

function hadoop_usage
{
  echo "Usage: start-dfs.sh [-upgrade|-rollback] [-clusterId]"
}

YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root

HADOOP_SECURE_DN_USER 已经被HDFS_DATANODE_SECURE_USER替代了

2.2.3 文件拷贝

Slave 节点其实就是用到 Master 的hadoop 文件副本就行了。这里传输就打个包再传。

cd /opt
sudo tar -zcf ./hadoop.tar.gz ./hadoop
sudo scp /opt/hadoop.tar.gz Slave:/opt/hadoop.tar.gz

然后 Slave 端解压

cd /opt
sudo tar -zxf ./hadoop.tar.gz ./ 

这些都有个权限的问题,如果用户不是root的话, 需要用到 sudo,另外需要用 chown 命令对 hadoop 文件夹赋予权限。

sudo chown -R username ./hadoop

2.3 Hadoop 运行

2.3.1 格式化操作

首次启动 hadoop 集群,需要对名称节点进行格式化(只有首次启动才格式化,多次格式化会引起 namenode 与 datanode 的 clusterID 不符,报错)

hdfs namenode -format

或者在 /hadoop/sbin 里面执行 hdfs

2.3.2 运行hadoop

start-all.sh

对然后可能就会报很多错,自己排查。
另外 jps 命令可以查看已经运行的 hadoop 进程。
还有 hdfs dfsadmin -report 可以查看报错。
还有 tail -200 /hadoop/logs/hadoop-username-xxxx-Master.log 可以看看日志最后 200 行,一般会有对应的错误信息。

2.3.3 这里讲讲我遇到的错误:

    1. 由于是服务器的原因,其实本质也是服务运营商那里的云虚拟机,所以在 Master 节点的 Hosts 中的 Master ip用服务器的内网地址,不然是连不通的。(fail to connect)
    1. 服务器需要开放对应的端口号,具体哪些去配置文件里看,这里不说明。
    1. 服务器防火墙需要关闭,或者对那些开放端口关闭,不然Slave不能连通Master,这个时候进程其实都开了的,但是你去看Slave日志它会一直报 connection fail 的错。
    1. 之前有报错说找不到native的库,我已经在 env 文件里加上了库路径。
    1. 其实配置的时候只要多看 /hadoop/log 下的日志就好了,基本上看了都能解决问题。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值