Big Data 大数据
1. 数据采集(多个数据源)
2. 数据存储(分布式存储)
3. 数据分析(并行计算)
Hadoop
**apache软件基金会的开源项目 提供了大数据集的存储和大数据集的并行计算模型**
Apache Hadoop(http://hadoop.apache.org/)是⼀一款框架,允许使⽤用简单的编程模 型跨计算机集群分布式处理理⼤大型数据集。Hadoop开源免费,具备稳定可靠、可扩展、分布式计算等特性
并行计算:数据传输、计算容错、分布式集群资源管理等
google:开源3个技术的技术论文
GFS google file system
MapReduce 并行计算框架
BigTable 大表
开源实现:
HDFS hadoop分布式文件系统
MapReduce
HBase
生态体系
hadoop
hbase
kafka
hive
flume
hadoop体系架构
-
HDFS hadoop分布式文件系统 具备可靠 高吞吐能力
-
Yarn 分布式任务调度和资源管理平台 类似于分布式操作系统 对分布式集群中的计算资源进行管理
-
MapReduce 并行计算框架(模型) 用来开发并行计算任务做并行运算
HDFS提供数据 ----> MapReduce设计并行计算任务 ----> 提交到yarn集群运行 ----> HDFS\存储系统
HDFS 类似于FastDFS:解决大数据集的存储问题
HDFS
HDFS是Hadoop的分布式⽂文件系统( Hadoop Distributed File System ),类似于其它的分布式⽂文件。HDFS⽀支持⾼高度容错,可以部署在廉价的硬件设备上,特别适宜于⼤大型的数据集的分布式存储。
架构篇
HDFS采⽤用master/slave架构。⼀一个HDFS集群是由⼀一个Namenode和⼀一定数⽬目的Datanodes组成。
Namenode是一个中心服务器,负责管理理文件系统的名字空间(namespace)以及客户端对⽂文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,⽤用户能够以⽂文件的形式在上⾯面存储数据。从内部看,一个⽂文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。
Namenode : 存储系统元数据、namespace、管理理datanode、接受datanode状态汇报 Datanode: 存储块数据,响应客户端的块的读写,接收namenode的块管理理指令 Datanode负责处理理⽂文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
Block: HDFS存储数据的基本单位,默认值是128MB,实际块⼤大⼩小0~128MB
Rack: 机架,对datanode所在主机的物理理标识,标识主机的位置,优化存储和计算
HDFS常见问题
-
HDFS是否适合存储小文件?
不适合1个文件1GB 10000个小文件1GB
磁盘空间 8个数据块1GB 10000个数据块1GB
元数据 1条 10000条a. 使用HDFS存储小文件 会大量浪费NameNode的内存空间
b. 存放小文件会造成寻址的时间大于IO读写的时间 违背了HDFS设计原则 -
NameNode和SecondaryNameNode的联系?
结论:并不是主备的关系
SecondaryName实际上是辅助NameNode工作的,可以周期性合并fsimage和edits log文件,可以加速NameNode数据的恢复效率
Namenode主要维护两个⽂文件,⼀一个是 fsimage ,⼀一个是 editlog
- fsimage保存了了最新的元数据检查点,包含了了整个HDFS⽂文件系统的所有⽬目录和⽂文件的信息。
对于⽂文件来说包括了了数据块描述信息、修改时间、访问时间等;对于⽬目录来说包括修改时间、
访问权限控制信息(⽬目录所属⽤用户,所在组)等。 - editlog主要是在NameNode已经启动情况下对HDFS进⾏行行的各种更更新操作进⾏行行记录,HDFS客户端执⾏行行所有的写操作都会被记录到editlog中。
为了了避免editlog不不断增⼤大,secondary namenode会周期性合并fsimage和edits成新的fsimage

环境搭建:
伪分布式(Pseudo-Distributed)
[root@node1 ~]# rpm -ivh jdk-8u191-linux-x64.rpm
[root@node1 ~]# vi .bashrc
JAVA_HOME=/usr/java/latest
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH
[root@node1 ~]# source .bashrc
-
关闭防火墙
systemctl stop firewalld (centos6 : service iptables stop) systemctl disable firewalld (centos6 : chkconfig iptables off)
-
配置主机名和IP映射关系
[root@node1 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.186.128 主机名(hadoop) # 重启jvm [root@node1 ~]# reboot
-
配置主机SSH免密码登录
# 生成公钥秘钥 [root@hadoop ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa # 将公钥给服务者 [root@hadoop ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 修改权限 [root@hadoop ~]# chmod 0600 ~/.ssh/authorized_keys
-
安装Hadoop并且配置HADOOP_HOME环境变量量
[root@hadoop ~]# tar -zxf hadoop-2.6.0_x64.tar.gz -C /usr/ [root@hadoop ~]# yum install -y tree [root@hadoop ~]# tree -L 1 /usr/hadoop-2.6.0/ /usr/hadoop-2.6.0/ bin -- 基础指令 hadoop、hdfs指令 etc -- 配置⽬目录(重要) include lib libexec LICENSE.txt NOTICE.txt README.txt sbin -- 系统命令 start|stop-dfs|yarn.sh|hadoop-daemon.sh share -- hadoop依赖jar⽂文件 7 directories, 3 files
修改环境变量
[root@hadoop ~]# vi .bashrc
HADOOP_HOME=/usr/hadoop-2.6.0
JAVA_HOME=/usr/java/latest
CLASSPATH=.
PATH= P A T H : PATH: