Hadoop 完全分布式安装
- 准备工作
- 准备两台 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
- 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 #重新加载文件
- 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
- 运行Hadoop
首次运行需要格式化namenode
hdfs namenode -format
- 启动 start-dfs.sh
start-dfs.sh
然后在master节点运行jps应该能看到NameNode,DataNode,SecondaryNameNode进程
slave节点能看到DataNode进程
- 继续启动 start-yarn.sh
master多出来两个进程
slave 节点多出来一个
NodeManager
-
查看 web 端
-
查看HDFS
-
查看集群
-
-
错误排查
-
Permission denied (publickey,password)
-
检查 master 和 slave 之间 ssh 是否可以免密钥登陆
-
检查 master 是否可以免密登陆 master(ssh master)
-
-
NameNode没有启动
- 首次运行是否有格式化NameNode (hdfs namenode -format)
-
其他问题
-
查看日志,哪台机器的某个进程没进启动就到对应机器上查看相关日志
例如: tail -n 50 hadoop-root-namenode-ecs1.log #查看 namenode 最后50行
-