欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

程序员文章站 2022-05-12 12:25:13
...

 

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

 

“菜狗”花了一周(真的是裂开了)的时间才学会搭建,所以写博客记录一下,也让大家少走一些弯路,文字一定要慢慢看,漏一个,你可能找bug就要花好久好久好久~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在阿里云,腾讯云 ,百度云上分别购买一台服务器(阿里云买的是ESC),为什么在不同的平台购买服务器,因为贫穷。太真实了!

(备注:为了写这篇博客,将本来搭建好的hadoop3,服务器都重装系统了,从零开始)


实现目标:一个亿???不,在三台Ubuntu Server 16.04.1 LTS 64位(三台最好都是一样版本)搭建好hadoop3.2.1集群,其中阿里云的服务器Master,剩下2台分别是Worker1,Worker2。

准备工作

  1. 安装XSHELL和XFTP6
    1. 安装网址:https://www.netsarang.com/zh/free-for-home-school/
    2. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
  2. 在Xshell中新建会话
    1. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
    2. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
      1. 剩下两台的主机名就是Worker1,Worker2,对应公网
    3. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
      1. 备注(用户名和密码,在对应服务器重置实例密码中找 比如 阿里云初始用户就是root,腾讯云就是ubuntu)
    4. 终于可以点击确定,再双击左侧的Master
    5. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
    6. 成功标志
      1. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑
    7. 导入Worker1,Worker2(同样的步骤)
      1. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

正式开始:

创建Hadoop用户(在Master,Worker1,Worker2执行)

创建hadoop用户

sudo useradd -m hadoop -s /bin/bash

  设置用户密码(输入两次)

sudo passwd hadoop

添加权限

sudo adduser hadoop sudo

 切换到hadoop用户

su hadoop

更新apt (在Master,Worker1,Worker2执行)

sudo apt-get update

安装Vim (在Master,Worker1,Worker2执行)

sudo apt-get install vim

安装SSH、配置SSH免密登录 (在Master,Worker1,Worker2执行)

 安装SSH

sudo apt-get install openssh-server

配置SSH免密登录 

ssh localhost
exit   
cd ~/.ssh/  
ssh-****** -t rsa    #一直按回车
cat ./id_rsa.pub >> ./authorized_keys

验证免密(不用输入密码啦,和第一次对比) 

ssh localhost

安装Java环境 (在Master,Worker1,Worker2执行)

sudo apt-get install default-jre default-jdk

配置环境变量文件

vim ~/.bashrc

在文件首行加入 

export JAVA_HOME=/usr/lib/jvm/default-java

让环境变量生效

source ~/.bashrc

验证

java -version

  【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

修改主机名(在Master,Worker1,Worker2执行)

sudo vim /etc/hostname

将文件中原有的主机名删除,Master中写入Master,Worker1中写入Worker1,Worker2...(同理)

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

重启三个服务器(网页上实现)

重启成功后,再次连接会话,发现主机名改变了

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

注意:一定要切换回hadoop用户

su hadoop

***修改IP映射(在Master,Worker1,Worker2执行)

sudo vim /etc/hosts

Master中

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

Worker1,Worker2中

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

注意:由于阿里云只有私网开放端口,所以在Master中采用私网ip

验证(在Master,Worker1,Worker2中都执行,看是否都ping成功(loss=0),如果失败,后面的操作也是不行的)

ping Master -c 3
ping Worker1 -c 3
ping Worker2 -c 3

SSH免密登录其他节点(在Master上执行)

在Master上执行

cd ~/.ssh 
rm ./id_rsa*             #  删除之前生成的公匙(如果有)
ssh-****** -t rsa        # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
scp ~/.ssh/id_rsa.pub aaa@qq.com:/home/hadoop/
scp ~/.ssh/id_rsa.pub aaa@qq.com:/home/hadoop/

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

在Worker1,Worker2都执行

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完就删掉

验证免密登录

ssh Worker1
exit
ssh Worker2
exit

注意:一定要在master下执行,不要验证完Worker1后忘记退出(踩坑)

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

安装hadoop3.2.1(在Master中执行)

下载网址:hadoop3.2.1下载网址

下载好,之后通过Xftp上传到Master的/home/hadoop

安装

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

 解压

cd /home/hadoop
sudo tar -zxf hadoop-3.2.1.tar.gz -C /usr/local #解压
cd /usr/local/
sudo mv ./hadoop-3.2.1/ ./hadoop            # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop       # 修改文件权限

验证 

cd /usr/local/hadoop
./bin/hadoop version

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

***配置hadoop环境 (易错环节)

配置环境变量

vim ~/.bashrc

在首行中写入

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

 使得配置生效

source ~/.bashrc

 创建文件目录(为后面的xml做准备)

cd /usr/local/hadoop
mkdir dfs
cd dfs
mkdir name data tmp
cd /usr/local/hadoop
mkdir tmp

配置hadoop的java环境变量

vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/yarn-env.sh

两个的首行都写入

export JAVA_HOME=/usr/lib/jvm/default-java

配置workers 

cd /usr/local/hadoop/etc/hadoop
vim workers

 删除掉原有的localhost,因为我们有2个worker,就把这2个的名字写入

Worker1
Worker2

 配置 core-site.xml

vim core-site.xml

 因为我们只有一个namenode,所以用fs.default.name,不采用fs.defalutFs

其次确保/usr/local/hadoop/tmp这个目录存在

<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://Master:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>

 配置 hdfs-site.xml

vim hdfs-site.xml

dfs.namenode.secondary.http-address确保端口不要和core-site.xml中端口一致导致占用

确保/usr/local/hadoop/dfs/name :/usr/local/hadoop/dfs/data 存在

因为我们只有2个Worker,所以dfs.replication设置为2

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>Master:9001</value>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/dfs/name</value>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/dfs/data</value>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

 配置mapred-site.xml

vim mapred-site.xml
<configuration>
    <property> 
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

 配置 yarn-site.xml

vim yarn-site.xml
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>Master</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value> 
    </property>

    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

将hadoop压缩

cd /usr/local
tar -zcf ~/hadoop.master.tar.gz ./hadoop #压缩
cd ~

复制到Worker1中 

scp ./hadoop.master.tar.gz Worker1:/home/hadoop

复制到Worker2中

scp ./hadoop.master.tar.gz Worker2:/home/hadoop

 温馨提示:由于是不同平台的服务器,复制时间比较久,请耐心等待

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

在Worker1、Worlker2上执行

解压

sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local #解压
sudo chown -R hadoop /usr/local/hadoop #修改权限

首次启动需要先在 Master 节点执行 NameNode 的格式化,之后不需要 

hdfs namenode -format    

 (注意:如果需要重新格式化 NameNode ,才需要先将原来 NameNode 和 DataNode 下的文件全部删除!!!!!!!!!)

#看上面的文字,不要直接复制了
rm -rf $HADOOP_HOME/dfs/data/*
rm -rf $HADOOP_HOME/dfs/name/*

启动 (在Master上执行)

start-all.sh
mr-jobhistory-daemon.sh start historyserver

 Master中,出现Warning不影响

jps

 Master出现下面5个,Worker1和Worker2出现下面3个,表示搭建成功!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑

关闭hadoop集群(在Master上执行)

stop-all.sh
mr-jobhistory-daemon.sh stop historyserver

***易错点提醒(如果发生错误,来这里看看)

  1. 创建完hadoop用户后,操作一定要在hadoop用户下执行(su hadoop 切换)
    1. 特别是在修改完完主机名后的重启
  2. 配置节点的IP映射的时候,只有master中的master是私网ip,其他的2+3+3都是公网ip地址
    1. 如果没有注意到,ping可能成功
  3. vim  ~/.bashrc  后,一定要执行source ~/.bashrc,使得环境变量生效
  4.  在配置hadoop的core-site.xml,hdfs-site.xml,很容易发生端口被占用,如果你的9000等等端口占用的时候,可以换用别的端口,core-site.xml中是namenode的端口,hdfs-site.xml是secondary namenode的端口,这两个端口要不一样
  5. 如果你发现的hadoop某个配置文件配错了,但是你已经把压缩包复制过去了,记得改的时候,必须三个节点都要改到
  6. 配置文件中的目录一定要是存在的,如果不存在,需要mkdir
  7. 因为只有一个namenode,所以用fs.default.name,不采用fs.defalutFs

发生错误的时候,查看日志

 cd /usr/local/hadoop/logs
ls

哪个节点不在,看对应的日志文件

比如没有namenode的存在

vim hadoop-hadoop-namenode-Master.log

shift+G,到日志的最后一行,然后,找出现ERROR的地方 

比如我就遇到

Problem binding to [Master:9000]  java.net.BindException: Cannot assign requested address;

主要是因为易错点提醒2中

参考文献

http://dblab.xmu.edu.cn/blog/install-hadoop/

http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/

https://zhuanlan.zhihu.com/p/59805371

终于写完了!!!

 

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑正在上传…重新上传取消【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑正在上传…重新上传取消

相关标签: 新人