这两天一直在配置Hadoop,对于刚接触linux得我而言,实在是觉得很有难度,饱受摧残,其实安装软件并不难,真正的难点在于配置文件如何配,如何格式化,分布式应该怎么分布,每一台需要的服务都有哪一些,其实我觉得只要能够理顺这一些,那么安装软件并运行应该难度会下降好几个点,可能也是因为手比较生吧(纯粹个人观点,欢迎大家指正,谢谢)
关于Hadoop,我昨天已经讲过了,今天就来讲讲他的安装配置吧,顺便自己也再理一遍,共同努力
1.伪分布式搭建
那么什么是伪分布式呢,我在百度里找到了一个有趣的答案,贴在下面了
什么是伪军 什么是伪君子 伪就是假的意思.
那什么又是分布式,分布式权威定义参见百科,我的理解就是有多台机器共同协作完成一个任务。
那么伪分布式就是假分布式,假在哪里,假就假在他只有一台机器而不是多台机器来完成一个任务,但是他模拟了分布式的这个过程,所以伪分布式下Hadoop 也就是你在一个机器上配置了hadoop的所有节点。这就是伪分布式!
伪分布式我的个人理解就是在家既当爹又当妈,给外面人的感觉是爹妈都有.
正式开始伪分布式的搭建
1,jdk安装,配置环境变量
vim /etc/profile
看jdk的配置即可
2.免秘钥,免秘钥就是在自己的主机里生成一个私钥和公钥,然后将公钥新生成一个文件用来存放其他机器的公钥,然后再将存放了其他机器包括自己机器的公钥通过本地复制到其他机器,当然其他机器也要通过命令创建自己的公钥和私钥,再黏贴其他的机器的公钥到第一台机器,然后将这个文件复制到其他机器上即可
• ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
• cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
3.上传hadoop.tar.gz到服务器
-解压部署包, 到/opt/sxt目录下,这个可以自己随便放在opt某个自己创建的目录下,记得更改下面的参数即可
• export HADOOP_PREFIX=/opt/shsxt/hadoop-2.6.5
• PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
4.在/opt/sxt/hadoop-2.6.5/etc/hadoop目录下配置文件
- hadoop-env.sh
JAVA_HOME=/opt/shsxt/jdk1.7.0_75
- core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://lyf01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/shsxt/hadoop/local</value>
</property>
- hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>lyf01:50090</value>
</property>
- vi slaves(datanode节点)
lyf01
这里需要注意的是修改配置文件必须到/opt/shsxt/hadoop-2.6.5/etc/hadoop正确路径下,参数修改正确即可
5.格式化 hdfs namenode -format
6.启动 start-dfs.sh
7.查看是否启动成功 jps
a) SecondaryNameNode
b) NameNode
c) DataNode
d) Jps
8.访问lyf01:50070 --确保防火墙关闭,chkcongif查看进程 service iptables stop 临时关闭,下次仍会开启 我们可以用chkconfig --level 2345 iptables off /chkconfig iptables off来将其进程关闭
9.成功即可
完全分布式搭建
完全分布式相较于伪分布式,就是我们多加了两台虚拟机,让虚拟机摆脱即是namenode又是datenode的伪君子样式
1.jdk
2.linux
3.3台虚拟机
4.时间同步 下载ntpdate 实现同步即可
5.ssh免密码登录
6.配置文件(重点)其实和伪分布式差不多
1、core-site.xml:
注:fs.defaultFS 默认的服务端口NameNode URI
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://lyf01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/shsxt/hadoop/full</value>
</property>
</configuration>
2、hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>lyf02:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>lyf02:50091</value>
</property>
</configuration>
3、slaves文件:
lyf01
lyf02
lyf03
[注意:每行写一个 写成3行]
4、关闭防火墙:service iptables stop
5、在node1节点上进行格式化 hdfs namenode -format
6、启动HDFS: start-dfs.sh
在浏览器输入 node1:50070 访问界面
然后是hadoop2.0
- HDFS存在的问题
- NameNode单点故障,难以应用于在线场景,因为在1.0中只有一台namenode 如果塔宕掉的话,系统便无法正常运行
- NameNode压力过大,且内存受限,影响系统扩展性
– MapReduce存在的问题(提一提)
- JobTracker访问压力大,影响系统扩展性
- 难以支持除MapReduce之外的计算框架,比如Spark、Storm等.
– Hadoop 2.x由HDFS、MapReduce和YARN三个分支构;
- HDFS:分布式文件存储系统;
- YARN:资源管理系统
- MapReduce:运行在YARN上的MR;
– 解决单点故障
HDFS HA:通过主备NameNode解决,如果主NameNode发生故障,则切换到备NameNode上
– 解决内存受限问题
HA
2.x 支持2个节点的HA,3.0实现了一主多从
- 水平扩展,支持多个NameNode;
- 每个NameNode分管一部分目录;
- 所有NameNode共享所有DataNode存储资源
– 2.x仅是架构上发生了变化,使用方式不变
– 对HDFS使用者透明
– HDFS 1.x中的命令和API仍可以使用
HDFS2.0 HA 高可用
结构图
JN实现主备NN 间的数据共享
– 主备NameNode
– 解决单点故障
• 主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换
• 所有DataNode同时向两个NameNode汇报数据块信息(位置)
• JNN: 实现主备NN 间的数据共享
• standby:备用namenode,完成了edits.log文件的合并产生新的fsimage,推送回ActiveNN
– 两种切换选择
• 手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
• 自动切换:基于Zookeeper实现
– 基于Zookeeper自动切换方案
• ZooKeeper Failover Controller:监控NameNode健康状态,
• 并向Zookeeper注册NameNode
• NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active
HA搭建:我这里给大家找了一个比较详细的地址,大家可以看看
END
祝大家生活快乐,工作如意,家庭美满,阖家欢乐