使用微软云服务器搭建Hadoop集群
环境准备
3台CentOS 7.5服务器,部署在同一区域同一VNET中,详细信息如下:
序号 | 主机名 | IP |
---|---|---|
1 | hadoop1 | 10.0.0.4 |
2 | hadoop2 | 10.0.0.5 |
3 | hadoop3 | 10.0.0.6 |
在3台机器上分别创建用户hadoop-twq,具体命令如下:
useradd hadoop-twq
passwd hadoop-twq
修改主机名
- 修改/etc/sysconfig/network文件,在3台机器上分别修改HOSTNAME=master,HOSTNAME=slave1,HOSTNAME=slave2
- 修改/etc/hosts文件,在3台机器上分别配置以下信息:
10.0.0.4 master
10.0.0.5 slave1
10.0.0.6 slave2 - 重启3台虚拟机
Note:由于微软云的限制,虽然修改了HOSTNAME,但通过ssh连接时hostname显示还是之前的,但已生效。
配置无秘钥登录
master配置SSH免密码登录slave(对hadoop-twq用户进行设置)
- 保证每台机器中所在用户的所在用户的根目录下包含隐藏文件.ssh,如果没有的话需要创建一个(mkdir .ssh)
- 生成密钥:ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa
- 将id_dsa.pub(公钥)追加到授权的key中:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
- 将认证文件(authorized_keys)复制到其它节点上:
scp ~/.ssh/authorized_keys hadoop-twq@slave1:~/.ssh
scp ~/.ssh/authorized_keys hadoop-twq@slave2:~/.ssh - 在每一个节点修改文件目录权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys - ssh slave1试试,第一次连接需要输入yes确认即可,如果不需要密码就能登录成功的话,表明这步设置成功
下载并安装JDK
- 下载:https://www.oracle.com/technetwork/java/javase/downloads/index.html
- 上传:将jdk-8u221-linux-x64.tar.gz上传到master上的目录/usr/local/lib
- 解压:tar -zxvf jdk-8u221-linux-x64.tar.gz
- 将解压后的JDK目录拷贝到slave1和slave2上:(由于微软云上存在权限问题,无法直接copy,可以将安装包copy到slave上然后解压)
scp -r jdk1.8.0_221 haiyu@slave1:/usr/local/lib
scp -r jdk1.8.0_221 haiyu@slave2:/usr/local/lib - 在3台机器上分别切换到hadoop-twq用户修改环境变量:vi ~/.bash_profile
export JAVA_HOME=/usr/local/lib/jdk1.8.0_221
PATH= P A T H : PATH: PATH:HOME/.local/bin: H O M E / b i n : HOME/bin: HOME/bin:JAVA_HOMT/bin
export PATH - 执行source .bash_profile让环境变量生效
- 执行java -version看是否生效
Java相关命令的讲解
- javac:编译java源文件
- java:运行java程序
- jps:查看java进程
- ps:查看进程
- kill:杀掉进程
关闭3台机器的防火墙(微软云服务器上的防火墙默认是关闭的,此步可以跳过)
- 查看防火墙状态:systemctl status firewalld
- 停止防火墙:systemctl stop firewalld
- 禁止防火墙:systemctl disable firewalld
- 再次查看防火墙状态:systemctl status firewalld
三台机器通过ntp同步时间
Azure 主机与内部 Microsoft 时间服务器同步,这些服务器从 Microsoft 拥有的带 GPS 天线的 Stratum 1 设备获取时间。 Azure 中的虚拟机可以依赖其主机将准确时间(主机时间)传递给 VM,也可以直接从时间服务器中获取时间,或结合使用这两种方式。参考文档
安装Hadoop
- 下载链接: http://hadoop.apache.org/releases.html
- 创建目录:mkdir bigdata
- 将安装包上传到bigdata目录并解压:tar -zxvf ~/bigdata/hadoop-3.2.0.tar.gz
- 修改配置文件:cd ~/bigdata/hadoop-3.2.0/etc/hadoop
(1)修改core-site.xml:
(2)修改hdfs-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9999</value> <description>表示HDFS的基本路径</description> </property> </configuration>
(3)在master上创建nameNode和dataNode需要的文件目录:<configuration> <property> <name>dfs.replication</name> <value>1</value> <description>表示数据块的备份数量,不能大于DataNode的数量</description> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop-twq/bigdata/dfs/name</value> <description>表示NameNode需要存储数据的地方</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop-twq/bigdata/dfs/data</value> <description>DataNode存放数据的地方</description> </property> </configuration>
mkdir -p ~/bigdata/dfs/name
mkdir -p ~/bigdata/dfs/data
(4)修改hadoop-env.sh:添加JAVA_HOME:
export JAVA_HOME=/usr/local/lib/jdk1.8.0_221
(5)修改~/bigdata/hadoop-3.2.0/etc/hadoop/workers,在workers文件中写入如下内容:
slave1
slave2 - 在slave1和slave2节点中的hadoop-twq用户主目录上创建bigdata目录并将master下的hadoop-3.2.0目录传输到slave1和slave2:
mkdir bigdata
scp -r hadoop-3.2.0 hadoop-twq@slave1:~/bigdata
scp -r hadoop-3.2.0 hadoop-twq@slave2:~/bigdata
scp -r dfs hadoop-twq@slave1:~/bigdata
scp -r dfs hadoop-twq@slave2:~/bigdata - 在master上配置环境变量:vi .bash/-profile
export HADOOP_HOME=~/bigdata/hadoop-3.2.0
PATH= P A T H : PATH: PATH:HOME/bin: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:HADOOP_HOME/bin:$HADOOP_HOME/sbin
source .bash_profile
which hdfs(看输出是否是~/bigdata/hadoop-3.2.0/bin/hdfs,如果不是可能需要退出xshell,重新登录) - 运行hdfs
(1)格式化:hdfs namenode -format
(2)启动hdfs:运行start-dfs.sh
(3)停止hdfs:运行stop-dfs.sh