Hadoop HDFS分布式存储系统搭建
近期有一个项目客户要求文件存储必须采用分布式存储,开发调研后建议使用HDFS,这里把搭建方法简单描述一下。
1、安装环境
三台Linux主机(Centos 7.x)
master:192.168.18.61
slavae1:192.168.18.62
slavae2:192.168.18.63
请修改三台Server主机名分别为:master、slave1、slave2
hadoop 3.2安装包
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
JDK安装包
链接:https://pan.baidu.com/s/1Dit-y-tj_AE-9WrR0dU3hg 提取码:s97v
注:默认下载目录及操作目录均在/opt下
2、基础环境配置
修改host
ssh到master服务器执行:
cat <<-ENDHOST >> /etc/hosts 192.168.18.61 master 192.168.18.62 slave1 192.168.18.63 slave2 ENDHOST
生成ssh key(用于各服务节点免密登陆)
ssh-keygen -t rsa
执行上述命令出现提示后连续三次回车,完成ssh key生成操作。
添加刚生成的ssh公钥钥到密钥文件中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
拷贝ssh公钥以两台slave节点:
#执行下述命令时需要输入对应服务器的root密码。
ssh-copy-id -i ~/.ssh/id_rsa.pub slave1 ssh-copy-id -i ~/.ssh/id_rsa.pub slave2
#为两个slave节点添加host信息:
ssh slave1 > /dev/null 2>&1 << addhost cat <<-ENDHOST >> /etc/hosts 192.168.18.61 master 192.168.18.62 slave1 192.168.18.63 slave2 ENDHOST exit addhost ssh slave2 > /dev/null 2>&1 << addhost cat <<-ENDHOST >> /etc/hosts 192.168.18.61 master 192.168.18.62 slave1 192.168.18.63 slave2 ENDHOST exit addhost
3、配置JDK环境
#请从上面提供的网盘地址下载jdk压缩包到/opt目录;你也可以直接从oracle官网下载,但注意解压后的目录名,然后适当修改下述命令。
cd /opt tar zxf jdk.tar.gz ln -snf /opt/jdk1.8.0_171 /opt/java
添加JDK环境变量(顺带也直接把Hadoop的也加了)
cat <<-'ENDJDK' > /etc/profile.d/java.sh JAVA_HOME=/opt/java JRE_HOME=/opt/java/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:/opt/hadoop-3.2.0/bin:/opt/hadoop-3.2.0/sbin export JAVA_HOME JRE_HOME CLASS_PATH PATH ENDJDK chmod +x /etc/profile.d/java.sh source /etc/profile
为两台Slave节点配置JDK环境:
scp /opt/jdk.tar.gz slave1:/opt scp /opt/jdk.tar.gz slave2:/opt ssh slave1 > /dev/null 2>&1 << addjdk cd /opt tar zxf jdk.tar.gz ln -snf /opt/jdk1.8.0_171 /opt/java cat <<-'ENDJDK' > /etc/profile.d/java.sh JAVA_HOME=/opt/java JRE_HOME=/opt/java/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:/opt/hadoop-3.2.0/bin:/opt/hadoop-3.2.0/sbin export JAVA_HOME JRE_HOME CLASS_PATH PATH ENDJDK chmod +x /etc/profile.d/java.sh source /etc/profile exit addjdk ssh slave2 > /dev/null 2>&1 << addjdk cd /opt tar zxf jdk.tar.gz ln -snf /opt/jdk1.8.0_171 /opt/java cat <<-'ENDJDK' > /etc/profile.d/java.sh JAVA_HOME=/opt/java JRE_HOME=/opt/java/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:/opt/hadoop-3.2.0/bin:/opt/hadoop-3.2.0/sbin export JAVA_HOME JRE_HOME CLASS_PATH PATH ENDJDK chmod +x /etc/profile.d/java.sh source /etc/profile exit addjdk
4、安装配置Hadoop HDFS
mkdir -p /data/files cd /opt wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz tar zxf hadoop-3.2.0.tar.gz echo "export JAVA_HOME=/opt/java" >> /opt/hadoop-3.2.0/etc/hadoop
#修改core-site.xml和hdfs-site.xml 两个文件
cat <<-ENDCS > /opt/hadoop-3.2.0/etc/hadoop/core-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/files</value> </property> <property> <name>fs.trash.interval</name> <value>4320</value> </property> </configuration> ENDCS cat <<-ENDHDFS > /opt/hadoop-3.2.0/etc/hadoop/hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.namenode.name.dir</name> <value>/data/files/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/files/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.permissions.superusergroup</name> <value>staff</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration> ENDHDFS
#拷贝配置好的Hadoop到两个Slave节点的工作目录:
scp -r /opt/hadoop-3.2.0 slave1:/opt/ scp -r /opt/hadoop-3.2.0 slave2:/opt/
#为NameNode(Master)节点添加DataNode节点(下面的脚本我同时把Master节点也添加为了DataNode节点,你可以根据服务器负载等具体情况来决定Master节点是否要承载DataNode的角色,不需要可以直接删除脚本中的master行即可):
cat <<-ENDDN > /opt/hadoop-3.2.0/etc/hadoop/workers master slave1 slave2 ENDDN
5、格式化NameNode,启动HDFS系统
#在Master主机上 输入命令hdfs格式化命令格式化NameNode,由于前面我们在配置JDK时顺便把Hadoop的目录也加入了环境变量,所以下面的Hadoop命令都可以直接运行不需要切换到相应执行文件目录。
hdfs namenode -format start-dfs.sh
6、检查Hadoop是否启动成功
start-dfs.sh命令执行后等待一分钟左右,在游览器中输入:http://192.168.18.61:9870
默认地址为:NameNode(Master)的IP+9870端口
如果用浏览器打开上述地址出现下图页面说明HDFS启动完成,可以在相应页面查看HDFS系统运行信息。如果你在参考本教程部署时遇到问题,可以留言交流,谢谢!