- 部署环境要求:首先安装三台服务器(linux——centos7)
一、在三台服务器中添加主机映射
vim /etc/hosts
#在hosts文件中添加的内容
xxx.xxx.xxx.101 node1
xxx.xxx.xxx.102 node1
xxx.xxx.xxx.103 node2
二、在三台服务器配置免密码互相SSH登录
1.在三台服务器都运行----生成秘钥(root用户)
ssh-keygen -t rsa -b 4096
- 注:RSA加密算法是一种非对称加密算法
- 注:-b 4096 是密码长度为4096位
2.复制秘钥到三个服务器主机供互相免密登录
ssh-copy-id node1
ssh-cpoy-id node2
ssh-copy-id node2
3.测试是否可免密登录
ssh node1
ssh node2
ssh node3
二、添加hadoop用户并互相配置免密登录
1.创建用户与密码
useradd hadoop
passwd hadoop
2.切换用户并生成秘钥
su -hadoop
ssh-keygen -t rsa -b 4096
3.将生成密钥复制到各服务器
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
三、配置jdk环境
1.创建文件夹用来部署jdk
mkdir -p /export/server
2.解压jdk 到 /export/server中
tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server
3.配置jdk软连接
ln -s /export/server/jdk1.8.0_351 /export/server/jdk
4.配置JAVA_HOME环境变量,将$JAVA_HOME加入PATH环境变量中
#编辑/etc/profile文件
vim /etc/profile
#在/etc/profile文件中加入以下代码
#配置java_home环境变量
export JAVA_HOME=/export/server/jdk
#将java_home加入到path环境变量中
export PATH=PATH:$JAVA_HOME/bin
5.生效环境变量
source /etc/profile
6.配置java执行程序的软连接
#删除自带的java程序
rm -rf /usr/bin/java
#软连接自己 安装的java程序
ln -s /export/server/jdk/bin/java /usr/bin/java
7.验证java是否部署安装好
#输出JAVA_HOME设置路径是否一致
echo $JAVA_HOME
#查看java版本
java -version
javac -version
四、解压安装hadoop
1.上传并解压hadoop安装包到node1节点中
tar -zxvf hadoop-3.3.4.tar.gz -C /export/server
#创建软连接
cd /export/server
ln -s /export/server/hadoop-3.3.4 haddop
2.修改hadoop的配置文件
配置HDFS集群主要修改以下文件:
- workers:配置从节点(DataNode)有哪些
- hadoop-env.sh:配置Hadoop的相关环境变量
- core-site.xml:Hadoop核心配置文件
- hdfs-site.xml:HDFS核心配置文件
1)配置workers文件
cd /export/server/hadoop/etc/hadoop
vim workers
在workers文件中添加如下内容,表名集群记录了三个从节点(DataNode)
node1
node2
node3
2)配置hadoop-env.sh文件
# 填入如下内容
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
各行代码的具体含义
JAVA_HOME,指明JDK环境的位置在哪
HADOOP_HOME,指明Hadoop安装位置
HADOOP_CONF_DIR,指明Hadoop配置文件目录位置HADOOP_LOG_DIR,指明Hadoop运行日志目录位置通过记录这些环境变量, 来指明上述运行时的重要信息
3)配置core-site.xml
<!--在文件内部填入如下内容-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
4)配置hdfs-site.xml
<!--# 在文件内部填入如下内容 -->
<configuration>
<!--
dfs.datanode.data.dir.perm
hdfs文件系统,默认创建的文件权限设置
值:700,即:rwx------
-->
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<!--
dfs.namenode.name.dir
NameNode元数据的存储位置
值:/data/nn,在node1节点的/data/nn目录下
-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<!--
dfs.namenode.hosts
NameNode允许哪几个节点的DataNode连接(即允许加入集群)
值:node、node2、node3,这三台服务器被授权
-->
<property>
<name>dfs.namenode.hosts</name>
<value>node,node1,node2</value>
</property>
<!--
key:dfs.blocksize
含义:hdfs默认块大小
值:268435456(256MB)
-->
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<!--
key:dfs.namenode.handler.count
含义:namenode处理的并发线程数
值:100,以100个并行度处理文件系统的管理任务
-->
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<!--
key:dfs.datanode.data.dir
含义:从节点DataNode的数据存储目录
值:/data/dn,即数据存放在node、node2、node3,三台机器的/data/dn内
-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
</configuration>
3.根据hdfs-site.xml文件的配置创建文件夹
- namenode数据存放node的/data/nn
- datanode数据存放node1、node2、node3的/data/dn
在node1节点
mkdir -p /data/nn
mkdir /data/dn
在node2,node3节点创建
mkdir -p /data/dn
4.在另外两个节点也进行相关的文件配置
可进行分发操作
在node1节点进行如下操作:
cd /export/server
scp -r haddop-3.3.4 node2:`pwd`/
scp -r hadoop-3.3.4 node3:`pwd`/
5.配置hadoop的环境变量
vim /etc/profile
#在文件底追加如下内容:
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
node2,node3进行同样的配置
五、授权hadoop用户
1.为了安全起见我们以普通用户启动整个hadoop服务
以root用户在三个节点上执行如下命令
chown -R haddoop:hadoop /data
chown -R hadoop:hadoop /export
2.格式化整个文件系统
格式化namenode
#确保以hadoop用户执行
su -hadoop
#格式化namenode
hadoop namenode -format
3.启动集群
#一键启动hdfs
start-dfs.sh
#一键关闭hdfs
stop-dfs.sh
#可以以绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh /export/server/hadoop/sbin/stop-dfs.sh
查看HDFS WEB UI
http://node1:9870
http://xxx.xxx.xxx.101:9870