Hadoop小型集群搭建记录

环境准备

设置hostname

hostnamectl set-hostname hadoop-xx

设置hosts

  • 将自己配置到其他主机中

    # 关于<与< <的特殊用法,详见结尾参考
    ssh root@<other_server_ip> "cat >> /etc/hosts" < <(paste <(ip addr | grep ens33|grep inet|awk '{print $2}'|cut -d "/" -f1) <(hostname))
    
  • 把自己也设置到自己的hosts中(非必要)

    # 关于<与< <的特殊用法,详见结尾参考
    cat >> /etc/hosts < <(paste <(ip addr | grep ens33|grep inet|awk '{print $2}'|cut -d "/" -f1) <(hostname))
    

设置防火墙端口

# namenode
firewall-cmd --add-port=9870/tcp --zone=public --permanent
firewall-cmd --add-port=9000/tcp --zone=public --permanent
# resourcemanager
firewall-cmd --add-port=8088/tcp --zone=public --permanent
firewall-cmd --add-port=8030/tcp --zone=public --permanent
firewall-cmd --add-port=8031/tcp --zone=public --permanent
firewall-cmd --add-port=8032/tcp --zone=public --permanent
firewall-cmd --add-port=8033/tcp --zone=public --permanent

设置Ali云安全组

端口同防火墙

创建用户hadoop

# 创建用户hadoop
adduser hadoop
# 设置密码
passwd hadoop

切换用户到hadoop

# 切换用户
su hadoop
# 进入用户目录
cd

准备访问公钥

ssh-keygen -t rsa -C 'hello hadoop!'
cat ~/.ssh/<key_name>.pub >> ~/.ssh/authorized_keys

同步公钥

ssh hadoop@<other_server_ip> "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub

编辑ssh权限

chmod 700 .ssh/
chmod 600 .ssh/*

测试连通性

  • 服务器1

    ssh hadoop@<other_server_ip>
    

两个服务器均可以直接登录对方,则代表ssh部分配置成功

Java准备

下载AdoptOpenJDK与解压

# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/11/jdk/x64/linux/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 解压
tar -zxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 配置环境变量
cat << EOF >> .bashrc 
export JAVA_HOME=/home/hadoop/jdk-11.0.10+9
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
# 刷新
source .bashrc

同步其他服务

# 下载
scp OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz hadoop@<server_ip>:/home/hadoopOpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz
# 解压
ssh hadoop@<server_ip> "tar -zxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz"
# 配置环境变量
ssh hadoop@<server_ip> "cat << EOF >> .bashrc
export JAVA_HOME=/home/hadoop/jdk-11.0.10+9
export PATH=\\\$PATH:\\\$JAVA_HOME/bin
EOF
"

验证

# 验证
java -version

这里基于局域网操作,主要有两个好处

  • 我这里使用的是阿里ECS服务,同一内网传输速度可达100MB/s
  • 减少镜像服务器压力~

Hadoop准备

下载与解压Hadoop-基于清华镜像

# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
# 解压
tar -zxf hadoop-3.3.0.tar.gz
# 配置环境变量
cat << EOF >> .bashrc 
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF

同步其他服务

# 传输
scp hadoop-3.3.0.tar.gz hadoop@<other_server_ip>:/home/hadoop
# 解压
ssh hadoop@<other_server_ip> "tar -zxf hadoop-3.3.0.tar.gz"
# 配置环境变量
ssh hadoop@<other_server_ip> "cat << EOF >> .bashrc
export HADOOP_HOME=/home/hadoop/hadoop-3.3.0
export PATH=\\\$PATH:\\\$HADOOP_HOME/bin:\\\$HADOOP_HOME/sbin
EOF
"

Java准备

Hadoop配置

这里只进行简单的配置,使用VSCodeRemote插件,直接进行远程编辑.下面贴出具体配置(暂时略)

各文件配置

暂时略过,需要合并几个服务上的文件

启动所有节点

启动namenode

  1. 登陆hadoop@<server_01_ip>并执行下列命令

    # 格式化namenode
    hdfs namenode -format
    hdfs --daemon start namenode
    # 启动namenode
    
  2. 访问 <server_01_ip>:9870
    现在就能直接看到hadoop的web页面了

启动datanode

  1. 登陆hadoop@<server_02_ip>并执行下列命令

    hdfs --daemon start datanode
    
  2. 访问 <server_01_ip>:9870
    可以在Datanodes页面中看到刚刚启动的server_02_datanode

启动resourcemanager

  1. 登陆hadoop@<server_01_ip>并执行下列命令

    yarn --daemon start resourcemanager
    
  2. 访问 <server_01_ip>:8088
    现在就能直接看到resourcemanager的web页面了

启动nodemanager

  1. 登陆hadoop@<server_02_ip>并执行下列命令

    yarn --daemon start nodemanager
    
  2. 访问 <server_01_ip>:8088
    可以在Nodes中看到刚刚启动的server_02_nodemanager

运行一个程序

登陆hadoop@<server_01_ip>并执行下列命令

# 创建用户文件夹
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hadoop
# 创建存放测试文件的文件夹
hadoop fs -mkdir input_01
# 将测试文件上传到hadoop中
hadoop fs -put test.txt

部分坑

Ali云特有

  • 使用hadoop jar提交任务时,命令行长时间没有反应.同时resourcemanager日志可以观察到大量的未知host报错.

    原因: resourcemanager无法通过主机名访问nodemanager.
    解决方案: 在Ali云ECS控制台中直接修改主机名
    备注: 目前暂时不知道为什么会出现这个现象,即使使用命令设置hostname.在hadoop中的datanodehostname依然是一串随机字符串,而这个字符串就是Ali云ECS控制台中显示的的主机名.我目前也没有能够直接在linux中获取到这个错误的主机名.且尚不知hadoop是如何获取的

其他

  • 执行应用时,两台datanode所属ECS完全卡死.无法登陆,无法操作.Ali云控制台也无法重启

    原因: 提交应用后,两个nodemanager分别创建了6个容器,导致ECS资源完全耗尽
    解决方案: 设置yarn.nodemanager.resource.cpu-vcoresyarn.nodemanager.resource.memory-mbECS实际规格,并重新运行nodemanager即可

参考

posted @ 2021-02-02 19:20  li_xiaoxi  阅读(138)  评论(0编辑  收藏  举报