Hadoop 完全分布式安装

220 阅读2分钟

Hadoop 完全分布式安装

  1. 准备工作
  • 准备两台 ECS 机器,不要求内网相通,系统Ubuntu 22.04
  • 例如有 master 和 slave1 两台机器
  • master 的 /etc/hosts
master的私有地址 master
slave的公有地址 slave1
  • slave1 的 /etc/hosts

slave1的私有地址 slave1
master的公有地址 master
  • 安装JDK8
sudo apt update && sudo apt install -y openjdk-8-jdk
  • 配置环境变量

/etc/profile

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
  • 准备好两台机器的 SSH 密钥登陆

    分别在两台机器上执行

sudo useradd -m -s /bin/bash hadoop # 创建用户
sudo passwd hadoop #创建密码
su hadoop #切换到 hadoop 账号
ssh-keygen #一路回车,生成密钥
ssh-copy-id master
ssh-copy-id slave1
  1. Hadoop 安装配置
  • 下载

hadoop.apache.org/releases.ht…

  • 解压
sudo tar -zxvf hadoop-3.3.6.tar.gz -C /opt && sudo mv /opt/hadoop-3.3.6 /opt/hadoop
  • 配置环境变量
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile #重新加载文件

  1. Hadoop 配置文件

在一台主机上配置好,然后复制到其他节点

cd $HADOOP_HOME/etc/hadoop # 切换到配置目录
sudo mkdir -p /opt/data/hadoop/{tmp,namenode,datanode} # 创建下面要用到的目录 
sudo chown -R hadoop:hadoop /opt/hadoop /opt/data/hadoop
  • hadoop-env.sh
# 这里需要再配置一次JAVA
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64  

export HDFS_NAMENODE_USER=root  
export HDFS_SECONDARYNAMENODE_USER=root  
export HDFS_DATANODE_USER=root  
export YARN_RESOURCEMANAGER_USER=root  
export YARN_NODEMANAGER_USER=root
  • core-site.xml
<configuration>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/data/hadoop/tmp</value>
</property>
<property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
</property>
</configuration>
  • hdfs-site.xml
<configuration>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:50090</value>
</property>
<property>
        <name>dfs.replication</name>
        <value>2</value>
</property>
<property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/opt/data/hadoop/namenode</value>
</property>
<property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/opt/data/hadoop/datanode</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>
</configuration>
  • 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>
</configuration>
  • workers

修改workers文件,这里的主机名要和/etc/hosts的对应

master
slave1
  1. 运行Hadoop
  • 首次运行需要格式化namenode
 hdfs namenode -format
  • 启动 start-dfs.sh
start-dfs.sh

然后在master节点运行jps应该能看到NameNode,DataNode,SecondaryNameNode进程

slave节点能看到DataNode进程

image.png

  • 继续启动 start-yarn.sh

master多出来两个进程

image.png slave 节点多出来一个NodeManager

image.png

  1. 查看 web 端

  2. 错误排查

  • Permission denied (publickey,password)

    • 检查 master 和 slave 之间 ssh 是否可以免密钥登陆

    • 检查 master 是否可以免密登陆 master(ssh master)

  • NameNode没有启动

    • 首次运行是否有格式化NameNode (hdfs namenode -format)
  • 其他问题

    • 查看日志,哪台机器的某个进程没进启动就到对应机器上查看相关日志

      image.png 例如: tail -n 50 hadoop-root-namenode-ecs1.log #查看 namenode 最后50行