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

 

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第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张图片
  2. 在Xshell中新建会话
    1. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第3张图片
    2. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第4张图片
      1. 剩下两台的主机名就是Worker1,Worker2,对应公网
    3. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第5张图片
      1. 备注(用户名和密码,在对应服务器重置实例密码中找 比如 阿里云初始用户就是root,腾讯云就是ubuntu)
    4. 终于可以点击确定,再双击左侧的Master
    5. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第6张图片
    6. 成功标志
    7. 导入Worker1,Worker2(同样的步骤)
      1. 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第7张图片

正式开始:

创建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-keygen -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

  

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

sudo vim /etc/hostname

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

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

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

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

su hadoop

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

sudo vim /etc/hosts

Master中

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第8张图片

Worker1,Worker2中

【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第9张图片

注意:由于阿里云只有私网开放端口,所以在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-keygen -t rsa        # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
scp ~/.ssh/id_rsa.pub hadoop@Worker1:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@Worker2:/home/hadoop/

在Worker1,Worker2都执行

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

验证免密登录

ssh Worker1
exit
ssh Worker2
exit

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

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

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

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

安装

 解压

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

***配置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这个目录存在


    
        fs.default.name
        hdfs://Master:9000
    

    
        hadoop.tmp.dir
        /usr/local/hadoop/tmp
    

 配置 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


    
        dfs.namenode.secondary.http-address
        Master:9001
    

    
        dfs.namenode.name.dir
        file:/usr/local/hadoop/dfs/name
    

    
        dfs.datanode.data.dir
        file:/usr/local/hadoop/dfs/data
    

    
        dfs.replication
        2
    

 配置mapred-site.xml

vim mapred-site.xml

     
        mapreduce.framework.name
        yarn
    

 配置 yarn-site.xml

vim yarn-site.xml

    
        yarn.resourcemanager.hostname
        Master
    

    
        yarn.nodemanager.aux-services
        mapreduce_shuffle 
    

    
        yarn.nodemanager.vmem-check-enabled
        false
    

将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

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

在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|附搭建踩的坑_第10张图片 【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑_第11张图片

关闭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

终于写完了!!!

 

uploading.4e448015.gif正在上传…重新上传取消uploading.4e448015.gif正在上传…重新上传取消

你可能感兴趣的:(【2020最新保姆级教学】搭建hadoop-3.2.1|附搭建踩的坑)