zoukankan      html  css  js  c++  java
  • 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即可

    参考

  • 相关阅读:
    Kafka~Linux环境下的部署
    Zookeeper~Linux环境下的部署
    pwd显示链接文件的真实路径
    3种不同方式的焦点图轮播
    软件集成策略——如何有效率地提升质量
    寻找直方图中面积最大的矩形 --- 庞果网
    再谈线程
    SQL 常用基础语句
    初识Maven
    公司存在的问题
  • 原文地址:https://www.cnblogs.com/heaven-elegy/p/14358501.html
Copyright © 2011-2022 走看看