hadoop
hadoop定义
Hadoop 是一个能够对大量数据进行分布式处理的软件框架,是一款开源软件,使用JAVA开发,Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。
什么是大数据 ?
大数据指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产 ,是指从各种各样类型的数据中,快速获得有价值的信息。
大数据的五大特性是什么?
Volume (大体量)可从数百TB到数十数百PB、甚至EB的规模
Variety(多样性)大数据包括各种格式和形态的数据
Velocity(时效性)很多大数据需要在一定的时间限度下得到及时处理
Veracity(准确性)处理的结果要保证一定的准确性
Value(大价值)大数据包含很多深度的价值,大数据分析挖掘和利用将带来巨大的商业价值
Hadoop特点
高可靠性、高扩展性、高效性、高容错性、低成本
Hadoop常用组件
HDFS:Hadoop分布式文件系统(核心组件)
MapReduce:分布式计算框架(核心组件)
Yarn:集群资源管理系统(核心组件)
Zookeeper:分布式协作服务
Hbase:分布式列存数据库
Hive:基于Hadoop的数据仓库
Sqoop:数据同步工具
Pig:基于Hadoop的数据流系统
Mahout:数据挖掘算法库
Flume:日志收集工具
Hadoop配置文件及格式
• 文件
– Hadoop-env.sh
JAVA_HOME
HADOOP_CONF_DIR
– xml文件配置格式
<property>
<name>关键字</name>
<value>变量值</value>
<description> 描述 </description>
</property>
配置文件帮助文档:https://hadoop.apache.org/docs/r2.7.7/
Hadoop的部署模式有三种
– 单机
– 伪分布式
– 完全分布式
HDFS角色及概念
Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于在低成本的通用硬件上运行角色和概念:
– Client :切分文件,访问HDFS,与NameNode交互,获取文件位置信息,与DataNode交互,读取和写入数据
– Namenode : Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求
– Secondarynode:定期合并fsimage 和fsedits,推送给NameNode,紧急情况下,可辅助恢复NameNode,但Secondary NameNode并非NameNode的热备
– DatanodeHDFS:数据存储节点,存储实际的数据,汇报存储信息给NameNode
• Block
– 每块缺省128MB大小
– 每块可以多个副本
MapReduce----JAVA实现的分布式计算框架
• Yarn是Hadoop的一个通用的资源管理系统
HDFS完全分布式系统配置
准备:
1.安装 java-1.8.0-openjdk-devel
2.在3台机器上配置/etc/hosts
注意:所有主机都能ping通namenode的主机名,namenode能ping通所有节点
3.java -version 验证java安装
4.jps 验证角色
5.配置SSH信任关系(NameNode)
注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机
vim /etc/ssh/ssh_config
StrictHostKeyChecking no
ssh-keygen
ssh-copy-id 192.168.1.X
(1) 环境配置文件:hadoop-env.sh
OpenJDK的安装目录:JAVA_HOME
Hadoop配置文件的存放目录:HADOOP_CONF_DIR
(2) 核心配置文件:core-site.xml
<property>
<name>fs.defaultFS</name> #文件系统配置参数
<value>hdfs://nn01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> #数据目录配置参数
<value>/var/hadoop</value>
</property>
(3)HDFS配置文件:hdfs-site.xml
<property>
<name>dfs.namenode.http-address</name>
<value>nn01:50070</value> #声明集群中namenode地址
</property>
<property>
<name>dfs.namenode.secondary.http-address</name> #Secondarynamenode地址声明
<value>nn01:50090</value>
</property>
<property>
<name>dfs.replication</name> #文件冗余份数
<value>2</value> #数据一共存几份
</property>
(4) 节点配置文件:slaves
node1
node2 #只写DataNode节点的主机名称
node3
– Hadoop所有节点的配置参数完全一样,在一台配置好后,把配置文件同步到其它所有主机上
– 在每台机创建/var/hadoop文件夹 mkdir
– 在namenode上执行格式化操作 ./bin/hdfs namenode -format
– 启动集群(namenode上) ./sbin/start-dfs.sh
JPS验证角色:
– NameNode验证
[root@nn01 hadoop]# jps
29826 SecondaryNameNode
31237 Jps
29643 NameNode
– DataNode验证
[root@node1 ~]# jps
24472 Jps
24027 DataNode
- 节点验证:
– NameNode上
#bin/hdfs dfsadmin -report
Zookeeper是什么
Zookeeper是一个开源的分布式应用程序协调服务
Zookeeper是用来保证数据在集群间的事务一致性
Zookeeper应用场景
– 集群分布式锁
– 集群统一命名服务
– 分布式协调服务
Zookeeper角色与特性
– Leader:接受所有Follower的提案请求并统一协调发起提案的投票,负责与所有的Follower进行内部数据交换
– Follower:直接为客户端服务并参与提案的投票,同时与Leader进行数据交换
– Observer:直接为客户端服务但并不参与提案的投票,同时也与Leader进行数据交换
Zookeeper角色与选举
– 服务在启动的时候是没有角色的(LOOKING)
– 角色是通过选举产生的
– 选举产生一个Leader,剩下的是Follower
选举Leader原则:
– 集群中超过半数机器投票选择Leader
– 假如集群中拥有n台服务器,那么Leader必须得到n/2+1台服务器的投票
– 如果Leader死亡,重新选举Leader
– 如果死亡的机器数量达到一半,b则集群挂掉
– 如果无法得到足够的投票数量,就重新发起投票,如果参与投票的机器不足n/2+1,则集群停止工作
– 如果Follower死亡过多,剩余机器不足n/2+1,则集群也会停止工作
– Observer不计算在投票总设备数量里面
Zookeeper可伸缩扩展性原理与设计
– 客户端提交一个请求,若是读请求,则由每台Server的本地副本数据库直接响应。若是写请求,需要通过一致性协议(Zab)来处理
– Zab协议规定:来自Client的所有写请求都要转发给ZK服务中唯一的Leader,由Leader根据该请求发起一个Proposal。
然后其他的Server对Proposal进行Vote。之后Leader对Vote进行收集,当Vote数量过半时Leader会向所有的Server发送一个通知消息。
最后当Client所连接的Server收到该消息时,会把该操作更新到内存中并对Client的写请求做出回应
,Observer可以接受客户端的连接,并将写请求转发给Leader节点。但Leader节点不会要求Observer参加投票,仅仅和其他服务节点一起得到投票结果.