学习基于阿里云 ECS 云服务器搭建大数据集群的笔记。笔记将搭建步骤和遇到的问题一一记录,用于自己查阅复习,也为小伙伴们提供一定参考帮助。
本篇是笔记的第一部分,从服务器相关的准备工作开始,到 HDFS 伪分布式集群搭建完成为止。
HDFS 伪分布式集群搭建
准备工作
购买阿里云 ECS 服务器
基于阿里云搭建集群,首先自然要购买云服务器。购买过程中有大量可配置的选项,按照提示选择即可。我选择了 4 台双核 4GB 服务器,预装阿里云定制版 Linux 系统。网络部分选择按流量计费。可以在这一步配置好实例和主机名称,后续的管理会更加方便。
好记的主机名称有 master、worker01、worker02,或者 node0、node1、node2 等
选购过程中系统会建议生成并使用 ssh 密钥对。按照提示新建密钥对并妥善下载保存系统提供的 .pem 文件。.pem 文件可以自己命名,我将它命名为 hadoop.pem。我所购买的四台服务器主机名分别为 node00、node01、node02 和 node03。请小伙伴们务必区分笔记和实践中所使用的主机名配置。
也请小伙伴们务必区分所使用的路径
准备软件
Hadoop 基于 Java 语言开发,所以我们需要同时准备 JDK 和 Hadoop 软件包。我使用的版本是 JDK7 和 Hadoop 2.6.5。从 Oracle 和 Hadoop 官网下载软件包。国内的小伙伴可能会遇到下载缓慢的问题。可以尝试翻墙,或连接手机热点下载(有时有奇效!)。下载时须注意软件版本是否与服务器操作系统兼容。将软件包下载到你自己的计算机待用即可。
配置服务器之间的免密码互联
集群运行的过程中不同节点之间需要互相传递数据和指令,因此我们要配置节点之间的免密码互连。
本地连接到 node00
从本地连接到服务器进行远程管理。将上文阿里云提供的 .pem 文件拷贝到本地 ~/.ssh
目录下。使用命令chmod 400 hadoop.pem
将 .pem 文件设置为只读以防止文件的意外修改。在终端输入ssh -i ~/.ssh/hadoop.pem root@[node00 的公网 IP 地址]
即可远程登陆到云服务器。
服务器的公网和内网 IP 地址可以在阿里云控制台找到
分发 .pem 文件
使用命令scp -i ~/.ssh/hadoop.pem ~/.ssh/hadoop.pem root@[公网 IP 地址]:/root/.ssh/
将 .pem 文件上传到各个节点。之后就可以从任意节点通过与上一小节类似的方法登陆到其它节点。
修改 hosts 文件
在所有节点上打开/etc/hosts
文件,将各个节点的内网 IP 信息添加到文件末尾:
1 | 172.***.***.*** node00 node00 |
完成这一步后的各种命令中都可以使用 node0x 代替对应的内网 IP 地址了。
配置 ssh_config
现在服务器之间的远程登陆还需要使用ssh -i
指定密钥位置。通过配置 ssh_config 可以免去这一麻烦。打开各个节点上/etc/ssh/
目录下的ssh_config
文件,按照如下格式在文件末尾添加:
1 | Host node00 # 实例的名字 |
ssh_config
文件中的配置是以Host
为标记区分段落的。你可以根据需要添加多个不同的以Host
为开头的段落,来配置不同的服务器。将全部四台节点的信息写入ssh_config
文件中后,就可以直接通过ssh node0x
命令来远程登陆各个节点了。
一鼓作气,将全部节点的ssh_config
文件配置完成吧!
从各个节点手动登陆到其它节点(包括自身)可以同时起到测试配置以及添加 known_hosts 的作用
伪分布式安装
我们首先在 node00 上进行伪分布式安装。接下来所有内容中的本地都指代我所使用的 Mac 系统。如果你使用的是 Windows 系统,还烦请自行查找对应的操作方法(并不难找!)。
将软件包上传到服务器
我首先在 node00 家目录下创建了 softwares 文件夹用于软件包的存放。回到本地,使用命令scp -i ~/.ssh/hadoop.pem [要上传的文件路径] root@[node00 的公网 IP 地址]:~/softwares/
将先前准备的软件包上传到 node00 的 softwares 文件夹下。
如果提示 perimission denied,那可能是由于用户对于 softwares 文件夹没有修改权限。用 chmod 命令赋予 777 权限即可
安装 JDK
从 Oracle 官网下载的 JDK 一般有两种格式。如果你下载的是 rpm 格式,那么使用 rpm -i [JDK 文件名]
安装即可。rpm 会依据 Linux 标准文件架构进行安装。
如果你下载的是压缩包格式,首先使用命令tar -xzvf [JDK 文件名]
解包。使用mkdir /usr/java
新建一个用于存放 JDK 的文件夹,并将解包得到的文件夹拷贝到/usr/java/
下。
使用任何一种方式安装后都需要配置环境变量。使用vi /etc/profile
打开配置文件,将下方的代码加入文件末尾:
1 | export JAVA_HOME=/usr/java/jdk[一串版本号] |
保存退出并执行. /etc/profile
重新加载配置文件。执行命令java -version
检查安装配置情况。如果终端中出现了 java 版本信息,那么祝贺你,JDK 的安装成功了!
安装 Hadoop
新建目录/opt/hadoop/
。来到 softwares 目录,使用命令tar -zxvf hadoop-2.6.5.tar.gz -C /opt/hadoop/
命令解压 Hadoop 软件包。
现在适合配置环境变量!打开/etc/profile
,将文件末尾修改为:
1 | export HADOOP_HOME=/opt/hadoop/hadoop-2.6.5 |
PATH 一行在前文 JDK 环境变量配置的基础上修改
执行. /etc/profile
加载配置文件。输入hadoop version
检查环境变量的配置。如果出现了版本信息,那么环境变量的配置便成功了!
配置 Hadoop
在启动集群前,我们要对集群的节点个数、位置、Block 大小等参数进行配置才能正常使用。Hadoop 的配置文件在安装路径之下的/etc/hadoop
目录下。
JAVA_HOME 二次配置
分别打开hadoop-env.sh
、mapred-env.sh
、yarn-env.sh
,找到export JAVA_HOME
那一行,将JAVA_HOME
设定为服务器上 JDK 的绝对路径/usr/java/jdk[一串版本号]
JAVA_HOME 环境变量可能在不止一个地方进行了定义。指定绝对路径可以保证 Hadoop 能找到且使用我们想要的 JDK
配置 NameNode
打开core-site.xml
文件,按照如下内容进行配置:
1 | <configuration> |
我们将 NameNode 指定为 node00,并且配置了端口号为 9000
配置副本数
打开hdfs-site.xml
,按照如下内容进行配置:
1 | <configuration> |
伪分布式只有一台服务器,因此副本数为 1
配置 DataNode
打开slaves
,将 localhost 改为 node00。
伪分布式安装中 NameNode 和 DataNode 都是 node00
配置 Secondary NameNode
官网文档中并没有提到 SNN 的配置。在文档左侧导航栏中可以找到名为hdfs-default.xml
的配置文件链接,里面是一些默认的配置参数。从中搜索 secondary 即可找到我们需要的配置项。找到的配置项为dfs.namenode.secondary.http-address
,默认值为0.0.0.0:50090
。
自行翻阅查找官方文档是一项很重要的能力!
仍然打开hdfs-site.xml
,增加一个 property,name 为 dfs.namenode.secondary.http-address
,value 为node00:50090
。
配置临时文件目录
Hadoop 2.x 默认将元数据和 Block 数据保存在$hadoop.tmp.dir
变量对应的路径下。这个路径默认是一个临时路径,非常容易导致节点数据的丢失。因此我们需要重新配置这个参数。打开core-site.xml
,增加一个 property,name 为hadoop.tmp.dir
,value 为/var/aliyun-study/hadoop/pseudo/
。
你可以选择其它的目录
测试 HDFS
格式化
Hadoop 启动前要首先进行格式化,生成或者读取 fsimage 和 edits 文件。使用命令hdfs namenode -format
格式化 Hadoop。
格式化之前路径
/var/aliyun-study/hadoop/pseudo/
是不存在的。格式化过程中会创建该目录
启动
使用命令start-dfs.sh
启动集群。使用jps
命令可以查看到 NN、DN 和 SNN 对应的进程。
测试文件
接下来我们通过文件上传和操作来测试伪分布式 HDFS 集群的基本功能。使用命令hdfs dfs -mkdir -p /user/root
创建目录,使用hdfs dfs -ls /user
检查是否创建成功。
/user/root/ 是 hdfs 的默认上传目录
接着测试文件上传。来到/root/softwares/
目录下,使用命令hdfs dfs -put hadoop-2.6.5.tar.gz /user/root/
将 Hadoop 安装包上传到 hdfs 中。在浏览器中输入[node00 公网 IP]:50070
可以打开可视化管理界面,其中包含浏览 HDFS 文件目录的功能。如果不能正常访问,记得先检查阿里云 ECS 的网络安全策略。默认 50070 端口是不开放的,需要你手动设定规则将其开放。在公网上暴露过多的端口会带来安全隐患。我的解决办法是,在学习实践的时候打开所有端口,而在学习结束后将它们全部关闭。
实际生产环境中应当将集群设置在内网