Hadoop学习笔记[2]-HDFS安装部署流程
1、必备软件
1-1 java(最好是1.8及其以上,but1.8以上只有open jdk了)
1-2 ssh软件,免密登录需要具体怎么配置网络上搜吧
直接在官网上搜就行了【https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 这里就有】,主要就是生成公钥和私钥,并将公钥分发给要免密登录的服务器,登录时,会拿着自己的私钥和对方的公钥进行匹配,匹配上就可以登录,等于是说对方有一把指纹锁,你把公钥给对方等于是在指纹锁中录入了自身的信息,等你拿着私钥登录对方时,等于在锁上录入指纹信息,如果匹配上,则表示可以开锁【即可以登录对方服务器】
2、hadoop.env文件配置JAVA_HOME变量
为啥?一般情况下我们在不是Java时都会在/etc/profile中配置JAVA_HOME,为什么还要再配置一次?主要是因为启动hdfs的时候,
使用的是ssh远程登录到别的服务器运行命令,但是ssh远程后无法取到/etc/profile中的环境变量,所以才需要在hadoop.env中进行配置,表示要同时告诉操作系统和hadoop本机的JAVA_HOME在哪
3、解压hadoop安装包到某个文件夹
4、单机版部署(伪分布式)
4-1 角色分类(伪分布式的所有角色都在同一台服务器)
- 1)、NameNode 主要是存储元数据
- 2)、DataNode 存储文件的block块
- 3)、secondaryNameNode周期合并fsimage(元数据全量快照)和edit_log(增量操作日志)生成新的fsimage返回给NameNode【减轻NameNode的压力
4-2 配置/etc/hadoop下的core-site.xml
<property>
<name>fs.defaultFS</name> <!--nameNode的位置信息-->
<value>hdfs://hdp001:9000</value>
</property>
4-3 配置hdfs-site.xml
<property> <!-- hdfs文件的副本 -->
<name>dfs.replication</name>
<value>1</value>
</property>
<property> <!-- nameNode元数据存储路径 -->
<name>dfs.namenode.name.dir</name>
<value>/var/hadoop/hdfs/local/dfs/name</value>
</property>
<property> <!-- DataNode数据存储路径-->
<name>dfs.datanode.data.dir</name>
<value>/var/hadoop/hdfs/local/dfs/data</value>
</property>
<property> <!-- secondaryNameNode服务器地址 -->
<name>dfs.namenode.secondary.http-address</name>
<value>hdp001:50090</value>
</property>
<property> <!-- secondaryNameNode数据存储路径 -->
<name>dfs.namenode.checkpoint.dir</name>
<value>/var/hadoop/hdfs/local/dfs/namesecondary</value>
</property>
4-4 配置slaves文件【dataNode的地址】
hdp001
4-5 在/sbin下使用start-dfs.sh启动hdfs【web:http://hdp001:50070】
5、分布式部署【一共四台虚拟机:hdp001,hdp002,hdp003,hdp004】
5-1 角色规划
NN | SNN | DN | |
---|---|---|---|
hdp001 | * | ||
hdp002 | * | * | |
hdp003 | * | ||
hdp004 | * |
5-2 配置 core-site.xml
**不需要改配置,保持和之前一样即可
5-3 配置hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/hadoop/hdfs/full/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/hadoop/hdfs/full/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hdp002:50090</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/var/hadoop/hdfs/full/dfs/namesecondary</value>
</property>
5-4 配置slaves(HA模式的slaves文件和这个一样)
hdp002
hdp003
hdp004
6、分布式部署 HA模式【一共四台虚拟机:hdp001,hdp002,hdp003,hdp004】
6-1 角色规划
NN | JN | DN | ZKFC | ZK | |
---|---|---|---|---|---|
hdp001 | * | * | * | * | |
hdp002 | * | * | * | * | * |
hdp003 | * | * | * | ||
hdp004 | * | * |
6-2 配置core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <!--逻辑名称,mycluster的具体地址会从hdfs的配置文件解析-->
<value>hdfs://mycluster</value>
</property>
<property> <!--zk地址-->
<name>ha.zookeeper.quorum</name>
<value>hdp002:2181,hdp003:2181,hdp004:2181</value>
</property>
</configuration>
6-3 配置hdfs-site.xml
<!--HA集群-->
<property><!--集群NN逻辑名称-->
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property> <!--NN物理机地址-->
<name>dfs.ha.namenodes.mycluster</name>
<value>hdp001,hdp002</value>
</property>
<property> <!--RPC地址-->
<name>dfs.namenode.rpc-address.mycluster.hdp001</name>
<value>hdp001:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.hdp002</name>
<value>hdp002:8020</value>
</property>
<property> <!--web地址和端口-->
<name>dfs.namenode.http-address.mycluster.hdp001</name>
<value>hdp001:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.hdp002</name>
<value>hdp002:50070</value>
</property>
<!--JNN日志存储目录和JNN地址-->
<property> <!--JN-->
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hdp001:8485;hdp002:8485;hdp003:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/hadoop/hdfs/ha/dfs/jn</value>
</property>
<!--免密配置SSH,ZKFC需要免密登录NN机器执行命令对NN进行降级等操作-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hdp01/.ssh/id_rsa</value>
</property>
<!--故障自动转移-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
6-4 实施流程
- 1)、 搭建zk
- 2)、 启动JN hadoop-daemon.sh start journalnode
- 3)、 选择一个NN进行格式化,hdfs namenode -format
- 4)、 启动格式化的NN,hadoop-daemon.sh start namenode
- 5)、 在另一台NN运行 hdfs namenode -bootstrapStandby
- 6)、 格式化zk:hdfs zkfc -formatZK
- 7)、 start-dfs.sh
6-5 可以自己测试一下HA模式下的故障转移
杀死hdp001的zkfc进程或者nn进程,其会将hdp002自动升级为主【kill -9 psid】