Linux 系统搭建云服务器 Hadoop 集群
分为六大步骤
- 新增用户
- 下载安装
- 配置 SSH 免密登录
- 修改配置
- 初始化、启动与停止
一、 新增用户 hadoop
useradd -d /home/hadoop -m hadoop
usermod -a -G root hadoop
passwd hadoop
二、 下载安装
(所有云服务器都要执行)
JDK8
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
Hadoop-3.0.1
cd ~
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz
mv hadoop-3.0.1.tar.gz /home/hadoop/
cd /home/hadoop/
tar -xzvf hadoop-3.0.1.tar.gz
chown hadoop hadoop-3.0.1 -R
三、 配置免密登录
编辑 /etc/hosts
(下面的 IPn 表示如 192.168.1.1 格式的云服务器外网 IP 地址。注意,如果是指向本机的 IP,请用内网 IP 地址代替)
IP1 master
IP2 slave1
IP3 slave2
切换到 hadoop 用户生成 id_rsa.pub
su hadoop
cd ~
ssh-keygen -t rsa
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
chmod 700 /home/hadoop/.ssh
chmod 644 /home/hadoop/.ssh/authorized_keys
---以上命令所有云服务器都要运行---
交换共享 id_rsa.pub 的内容
(如果搭建伪分布模式,则可以略过交换共享这一步,直接进行 ssh 的测试)
master 云服务器操作
scp /home/hadoop/.ssh/authorized_keys slave2:/home/hadoop/.ssh/
slave1 云服务器操作
scp /home/hadoop/.ssh/authorized_keys slave3:/home/hadoop/.ssh/
slave2 云服务器操作
scp /home/hadoop/.ssh/authorized_keys master:/home/hadoop/.ssh/
- 这一步的最终目的是让所有云服务器的 authorized_keys 内容都包含各自的 id_rsa.pub 信息,且内容相同。
测试结果
master
ssh slave1
quit
ssh slave2
quit
slave1
ssh master
quit
ssh slave2
quit
slave2
ssh master
quit
ssh slave1
quit
- 需要确保所有云服务器能够相互
ssh
通过。 - 第一次进行
ssh
需要密码登录。输完密码之后,选择yes
保存记录。之后就不再需要输入密码登录了。 - 如果出现异常情况,可重启服务再尝试:
sudo service sshd service
。
四、 修改配置文件
/etc/profile 配置环境变量
export JAVA_HOME=/usr/lib/jvm/jre
export HADOOP_HOME=/home/hadoop/hadoop-3.0.1/
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib:$JAVA_HOME/bin
使环境变量生效
source /etc/profile
/home/hadoop/hadoop-3.0.1/etc/hadoop/
(更详细的配置参见 官方文档)
cd ~/hadoop-3.0.1/etc/hadoop
ls
- 发现很多配置文件,其中
(1)core-site.xml 添加
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
- 设置 HDFS NameNode 的 URI 为
IP1:9000
- 设定了 I/O 文件缓存容量
(2)hdfs-size.xml 添加
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-3.0.1/hdfs/name</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-3.0.1/hdfs/data</value>
</property>
</configuration>
- 设定 Namenode 信息存储目录
- 设置副本数为 2
- 设置 Secondary NameNode URI 为
IP2:9001
(slave1 <=> IP2) - 开启 WebHDFS 模块
- 设定 DataNode 的目录路径
(3)yarn-site.xml 添加
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 设定客户端提交任务的 URI 为
IP1:8032
- 设定主程序资源获取的 URI 为
IP1:8032
- 设定 NodeManager URI 为
IP1:8033
- 设定 ResourceManager 的 Web 界面 URI 为
IP1::8088
- 以上4点配置可不设定,本身有默认值
- 设定每个任务所需最小内存为 512MB
- 设定每个任务所需最大内存为 2048MB
- 设定 NodeManger 可使用的内存为 1024MB
- 设定如果任务超过内存限制,则自动杀死(kill)该任务。
(4)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>
</configuration>
- 任务历史默认端口也是 10020
- 任务历史 Web 界面端口也是 19888
(5)编辑 hadoop-env.sh
约第 54 行的位置修改为
export JAVA_HOME=${JAVA_HOME}
(6)在同一目录下创建文件 masters 和 workers
masters 内容为
IP1
workers 内容为
IP2
IP3
五、 初始化
NameNode 格式化
su hadoop
hdfs namenode -format
启动
start-dfs.sh
start-yarn.sh
或者
start-all.sh
任务历史进程
mr-jobhistory-daemon.sh start historyserver
mr-jobhistory-daemon.sh stopt historyserver
七、其他
- 注意不要每次启动都格式化,导致 NameNode 与 DataNode 的 clusterID 不一致而启动失败;
- 如果一定要格式化,需要删除配置文件中指定在运行时生成的文件夹,如
hdfs/name
、hdfs/data
、tmp
(在 Hadoop 安装目录下)。 - 可查看 hadoop 安装目录下的
logs
日志文件夹排错