写在前面的话
最近在完成学校的课设,需要组成小组进行一个大数据系统架构的实训项目。我便和小组成员商量着一同搭建一个真正的分布式集群,权当做练习。写下此文记录安装的过程以及踩坑和解决的方法,愿共同学习,共同进步!
欢迎扫码关注我的公众号,与我一同学习进步!主要致力于学习
- 使用深度学习解决计算机视觉相关问题
- Python为主的互联网应用服务
- 基于MIPS指令集的CPU微体系结构设计
准备工作
集群采用一主二从的方式,进行设计。即集群由三台服务器组成,其中,一台服务器为主节点,剩余两台服务器为
从节点。三台服务器采用相同的配置,均为阿里云云翼计划学生专享云服务器。
配置项与用到的版本如下表所示
配置项 | 版本 |
---|---|
服务器 | 阿里云轻量应用服务器 1核2G |
服务器系统 | Ubuntu16.04 LTS |
Java | Oracle openjdk-8 |
Hadoop | 2.10.0 |
Yarn | Hadoop自带 |
MySQL | 5.7.0 |
Hive | 2.3.7 |
Scala | 2.11.12 |
Spark | 2.0.0 |
由于实训采用分组的方式完成,我们小组三人便没人在阿里云上注册并用学生优惠购买了一个云服务器,之后使用Xshell和Termius进行远程连接,操控服务器。因此,本文省略了这些步骤。
建立通信
-
修改自己的主机名
这一步需要分别在三个服务器上进行,使用命令
vim /etc/hostname
打开hostname文件进行编辑。将文件修改为自己想要的名字,对于我们来说,则直接将主机名修改为我们自己的名字,如下图所示。被马赛克遮住的部分是我们名字的部分内容,你可以根据自己的需要进行设置。
需要注意的是,修改完成并保存退出后,一定要重启服务器使它生效。
-
修改hosts文件
这一步同样需要在三个服务器上都进行。
使用命令
vim /etc/hosts
打开hosts文件进行编辑。对于每台服务器来说,将本机的公网IP和主机名添加到文件中,将剩余台服务器的公网IP以及对应的主机名添加到文件中。其中,Master服务器应该在文件的第一行。最终结果如下图所示。注:公网IP和内网IP在云服务器初始化为一个实例时,就会自动生成,可以在阿里云控制台中查看。
-
生成公私钥
这一步需要在三台服务器上分别进行。
使用命令
ssh-keygen
生成公私钥,随后,会出现一系列交互式操作。一路"回车键"即可,生成的公私钥默认保存在/root/.ssh/id_rsa
目录下。 -
分发公钥,保留私钥
ssh协议使用非对称加密的方式进行通信,公钥加密,私钥解密。
因此,对于每台服务器来说,需要将自己的公钥分发给其他服务器。
使用命令
ssh-copy-id hostname
完成密钥的分发工作,这里的hostname
为其他服务器的主机名。需要值得注意的是,如果你的集群数量为n,那么你至少需要执行n-1次该命令,以保证所有主机都建立了通信。而是否要将hostname
设置为本机并执行一次,对于结果并没有影响。如下图所示。 -
测试通信
当前四步工作均完成后,如果过程中没有出现任何错误,那么,目前的几台服务器之间就是可通信的。
使用命令
ssh hostname
即可登录到其他主机,这里的hostname
为其他服务器的主机名。出现如下图所示即表示通信建立完成。
安装Java
为了尽可能的减少安装的问题和可能出现的错误,强烈建议选用相同的Java版本并在不同服务上将它们安装在同一目录下。
-
安装Java
为了保证与大部分的Hadoop生态系统组件相适配,选择使用较低的JDK8版本。
基于Ftp协议将下载好的
jdk1.8.0_131
移动到/usr/lib/
目录下,借助Xftp或专业版的Termius都可以实现。使用命令
mv jdk1.8.0_131/ jdk1.8.0/
修改文件夹的名称。 -
配置Java环境
为了尽可能的减少root用户与RAM用于之间相互转换带来的环境问题,所有的环境变量均进行全局配置。
使用命令
vim /etc/profile
打开配置文件,将下面的配置项添加到文件的末尾。# Java enviroment export JAVA_HOME=/usr/lib/jdk1.8.0 export JRE_HOME=${JAVA_HOME}/jre export CLASS_PATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=.:$JAVA_HOME/bin:$PATH
需要特别注意的是,这里的
JAVA_HOME
需要根据自己的安装位置进行设置。添加完成后,保存并退出
Vim
编辑器,使用命令source /etc/profile
更新配置文件。 -
查看Java版本
使用命令
java -version
查看Java的版本,如果你是按照本文的操作一步一步进行的,应该得到如下图所示的结果。
这里可能出现的一个问题是,对于其他云服务器厂商,可能系统中已经预装了Java的某一个版本。但是,这对于进行以上的配置是没有影响的。即如果采用以上的配置,系统仍会使用你安装的Java 8版本。
安装并配置Hadoop
采用较新的Hadoop2.10.0版本,选用该版本的主要原因有两个
- 较低的版本没有资源管理器Yarn,难以满足需求
- 较高的版本存在不稳定性,且难以与Hive、Spark等兼容
具体安装与配置步骤如下所示
安装Hadoop
-
下载Hadoop2.10.0
为了尽可能的减少后续过程中的错误,三台服务器均将Hadoop安装在
/usr/local/
目录下,且文件夹名字均为hadoop-2.10.0
使用命令
wget https://pengkai.online/hadoop-2.10.0.tar.gz
下载Hadoop -
解压Hadoop
使用命令
tar -zxvf hadoop-2.10.0.tar.gz
将Hadoop解压到文件夹中,解压完成后,使用命令rm -r hadoop-2.10.0.tar.gz
将下载的安装包卸载。 -
配置Hadoop环境变量
使用命令
vim /etc/profile
打开配置文件,将下面的配置项添加到文件的末尾。# Hadoop enviroment export HADOOP_HOME=/usr/local/hadoop-2.10.0 export PATH=$HADOOP_HOME/bin:$PATH
与配置Java环境变量一样,保存并退出后,要使用命令
source /etc/profile
激活配置文件 -
查看Hadoop版本
使用命令
hadoop version
查看Hadoop版本,出现如下图所示的结果即表示安装成功。
配置Hadoop
Hadoop安装完成后,需要分别针对不同的服务器对Hadoop中的各个文件分别进行配置。
主服务器
使用命令cd /usr/local/hadoop-2.10.0/etc/hadoop
切换到配置文件目标路径下。
-
配置
hadoop-env.sh
文件使用命令
vim hadoop-env.sh
打开配置文件修改文件中的如下所示的一行
export JAVA_HOME = {}
将改行中的内容变为自己的Java路径,针对于我们的服务器,配置如下
export JAVA_HOME=/usr/lib/jdk1.8.0
-
配置hdfs-site.xml文件
使用命令
vim hdfs-site.xml
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 分布式副本数设置为3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 这是名称节点的元数据存放目录,需要自己创建 --> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoop-2.10.0/tmp/dfs/name</value> </property>
-
配置core-site.xml文件
使用命令
vim core-site.xml
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 这里的hostname需要替换成自己的主服务器的主机名 --> <property> <name>fs.defaultFS</name> <value>hdfs://hostname:9000</value> </property> <!-- 这是临时文件的存放路径,如果不设置该项,会导致初始化失败 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-2.10.0/tmp</value> </property>
-
配置mapred-site.xml.template文件
使用命令
vim mapred-site.xml.template
打开配置文件将下面的内容粘贴到configuration标签之间
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
配置slaves文件
使用命令
vim slaves
打开配置文件将其余两个从服务器的主机名添加到其中,针对于我们的集群,如下所示。
-
配置yarn-site.xml文件
使用命令
vim yarn-site.xml
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 这是集群管理节点的名称,设置为自己的主服务器主机名 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hostname</value> </property>
从服务器
两台从服务器可以采用相同的配置。因此,可以同时配置,也可以等待一台配置完成后,直接向另一台转发配置文件。
-
配置
hadoop-env.sh
文件使用命令
vim hadoop-env.sh
打开配置文件修改文件中的如下所示的一行
export JAVA_HOME = {}
将改行中的内容变为自己的Java路径,针对于我们的服务器,配置如下
export JAVA_HOME=/usr/lib/jdk1.8.0
-
配置hdfs-site.xml文件
使用命令
vim hdfs-site.xml
打开配置将下面的内容粘贴到configuration标签之间
<!-- 这是复制的副本数量 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 这是数据节点保存数据的目录,需要自己创建 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop-2.10.0/etc/hadoop/tmp/dfs/data</value> </property>
-
配置core-site.xml文件
使用命令
vim core-site.xml
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 这一项与主节点相同 --> <property> <name>fs.defaultFS</name> <value>hdfs://hostname:9000</value> </property> <!-- 这是临时文件的存放路径,如果不设置该项,会导致初始化失败 --> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop-2.10.0/etc/hadoop/tmp</value> </property>
-
配置mapred-site.xml.template文件
使用命令
vim mapred-site.xml.template
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 这一项与主节点相同 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- 这一项是将该节点加入到主节点的工作中,hostname替换为自己的主服务器的主机名 --> <property> <name>mapreduce.jobhistory.address</name> <value>hostname:10020</value> </property>
-
配置yarn-site.xml文件
使用命令
vim yarn-site.xml
打开配置文件将下面的内容粘贴到configuration标签之间
<!-- 这一项与主节点相同 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hostname</value> </property> <!-- 这一项表示该节点参与MapReduce工作 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>
打开防火墙
配置完成后,需要登录到阿里云的云服务器平台上,打开相应的端口,以确保服务正常可用。三台服务器均需设置。
需要打开的端口为10020,该端口为Hadoop进行Map Reduce工作需要进行通信的端口。具体操作过程如下所示。
-
进入创建的服务器实例
-
添加防火墙规则
按照如下图所示的过程进行添加
初始化Hadoop
三台服务器均需进行初始化,切换到Hadoop目录下的bin目录,使用命令hadoop namenode -format
初始化Hadoop,得到的结果如下图所示。
启动Hadoop
-
切换到Hadoop的目录下的sbin目录,使用命令
./start-all.sh
启动所有组件 -
使用
jps
命令查看已启动的进程。-
主服务器
出现如下图中的红框所示的进程即表示启动成功
-
从服务器
出现如下图中的红框所示的进程即表示启动成功
-
写在后面的话
到这里,Hadoop的完全分布式集群已经搭建完成,且处于工作、可用的状态。
由于不至于使文章过于冗长以及个人需求不同,本文只给出了搭建Hadoop集群的方式,如果有其他需要,可以根据下文连接自行选择阅读。
基于阿里云服务器搭建完全分布式Hadoop集群+Hive仓库+Spark集群(二)
基于阿里云服务器搭建完全分布式Hadoop集群+Hive仓库+Spark集群(三)
如果你在安装的过程中遇到任何问题,都可以在评论区与我交流哦!