Hadoop常见知识点总结

Hadoop常见知识点及环境搭建

前言
Hadoop早期衍生自Nutch(Java开源的搜索引擎),早期Nutch构建开源的搜索引擎,同样在少数的机器上同时运行计算任务面临着问题,在这个时候Google发布了GFS和Map Reduce论文。人们参考着这两篇论文中所阐述的思想开始重建Nutch的存储和计算模型。一开始尝试在20台机器的计算和存储,不久人们发现为了满足web服务高扩展性,需要将集群规模扩展到几千台的集群规模。就在这个时候Yahoo团队加入后,开始将存储和计算从Nutch中剥离出去,并且命名为Hadoop,在Yahoo团队的帮助下,Hadoop很快成为能够真正满足应用的高扩展性。
Big Data
Big Data(大数据),或称巨量资料,指的是所涉及的资料量规模巨大到无法通过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。Big Data大数据,谈的不仅仅是数据量,其实包含了数据量(Volume)、时效性(Velocity)、多样性(Variety)、可疑性(Veracity)。
Volume:数据量大量数据的产生、处理、保存,谈的就是Big Data就字面上的意思,就是谈海量数据。
Velocity:就是处理的时效,既然前头提到Big Data其中一个用途是做市场预测,那处理的时效如果太长就失去了预测的意义了,所以处理的时效对Big Data来说也是非常关键的,500万笔数据的深入分析,可能只能花5分钟的时间。
Variety[vəˈraɪɪti]:多变性指的是数据的形态,包含文字、影音、网页、串流等等结构性、非结构性的数据。
Veracity[vəˈræsɪti]:可疑性指的是当数据的来源变得更多元时,这些数据本身的可靠度、质量是否足够,若数据本身就是有问题的,那分析后的结果也不会是正确的。
面临挑战
随着互联网用户量的增多,大用户数据,大数据流量已经远远超过单机服务器的处理能力,虽然摩尔定律给出在价格不变的情况下,硬件性能每隔18个月,性能都会提高提升1倍,即便如此,横向扩展比纵向扩展成本要低得多,分布式系统由此而产生。
Hadoop课程
ZK : 分布式系统的协调服务。
Flume : 分布式日志采集。
Kafka : 分布式消息队列。
Hive : HQL(Hive Query language)sql 翻译成MapReduce程序运行 ETL hive编程指南
Hbase :基于列存储数据库,基于分布式存储HDFS 行10亿 * 百万大数据随机访问
HDFS :分布式文件存储
MapReduce:分布式计算

Hadoop是一个能够对大量数据进行分布式处理的软件框架,以一种可靠、高效、可伸缩的方式进行数据处理,其有许多元素构成,以下是其组成元素:
1.Hadoop Common:Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。
2.HDFS:分布式文件系统,提供高吞吐量的应用程序数据访问,对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是HDFS 的架构是基于一组特定的节点构建的(参见图 1),这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。
存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
3.MapReduce:一个分布式海量数据处理的软件框架集计算集群。
4.Avro :doug cutting主持的RPC项目,主要负责数据的序列化。有点类似Google的protobuf和Facebook的thrift。avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑。
5.Hive :类似CloudBase,也是基于hadoop分布式计算平台上的提供data warehouse的sql功能的一套软件。使得存储在hadoop里面的海量数据的汇总,即席查询简单化。hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。
6.HBase :基于HadoopDistributed File System,是一个开源的,基于列存储模型的可扩展的分布式数据库,支持大型表的存储结构化数据。
7.Pig :是一个并行计算的高级的数据流语言和执行框架 ,SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。
8.ZooKeeper:Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
9.Chukwa :一个管理大型分布式系统的数据采集系统 由yahoo贡献。
10.Cassandra:无单点故障的可扩展的多主数据库
11.Mahout :一个可扩展的机器学习和数据挖掘库

HDFS环境安装
参考:
http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop-common/SingleCluster.html

1)安装JDK配置JAVA_HOME环境变量(jdk-7u79-linux-x64.rpm)

[root@CentOS ~]# rpm -ivh jdk-7u79-linux-x64.rpm
[root@CentOS ~]# vi /root/.bashrc
JAVA_HOME=/usr/java/latest
PATH= P A T H : PATH: JAVA_HOME/bin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
[root@CentOS ~]# source .bashrc

小提示:[root@CentOS ~]# yum install -y lrzsz之后键入rz文件上传,sz文件下载
[root@CentOS ~]# sz jdk-7u79-linux-x64.rpm
[root@CentOS ~]# rz
2)关闭防火墙
[root@CentOS ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[root@CentOS ~]# chkconfig iptables off
3)配置主机名为CentOS
[root@CentOS ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=CentOS
4)配置主机名和IP映射关系
[root@CentOS ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.37.138 CentOS
5)配置SSH免密码认证登陆(基于密匙的安全验证)
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。

[root@CentOS ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
39:c8:22:dd:e8:25:9d:e8:aa:ac:6b:ac:89:a1:98:eb root@CentOS
The key’s randomart image is:
±-[ RSA 2048]----+
| |
| |
| |
| . * o . |
| . * B S |
| + + . |
|o o |
|=* . |
|^E. |
±----------------+
[root@CentOS ~]# ssh-copy-id CentOS
等价于
[root@CentOS ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[root@CentOS ~]# ssh CentOS
Last login: Mon Jul 23 19:42:25 2018 from centos

6)配置HDFS基本环境
1)上传解压hadoop-2.6.0.tar.gz解压到/usr目录并且配置HADOOP_HOME环境变量
[root@CentOS ~]# tar -zxf hadoop-2.6.0_x64.tar.gz -C /usr/
[root@CentOS ~]# vi .bashrc
HADOOP_HOME=/usr/hadoop-2.6.0
JAVA_HOME=/usr/java/latest
PATH= P A T H : PATH: JAVA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOP_HOME/sbin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
export HADOOP_HOME
[root@CentOS ~]# source .bashrc
2)配置hadoop配置文件(core|hdfs-site.xml/slaves)
core-site.xml
[root@CentOS ~]# vi /usr/hadoop-2.6.0/etc/hadoop/core-site.xml

fs.defaultFS
hdfs://CentOS:9000


hadoop.tmp.dir
/usr/hadoop-2.6.0/hadoop-${user.name}

hdfs-site.xml
[root@CentOS ~]# vi /usr/hadoop-2.6.0/etc/hadoop/hdfs-site.xml

dfs.replication
1

slaves
[root@CentOS ~]# vi /usr/hadoop-2.6.0/etc/hadoop/slaves
CentOS
附注:hadoop安装文件目录说明
[root@CentOS ~]# yum install -y tree

7)启动HDFS环境
1.首次启动hdfs
[root@CentOS ~]# hdfs namenode -format

18/07/23 20:06:58 INFO namenode.NNConf: XAttrs enabled? true
18/07/23 20:06:58 INFO namenode.NNConf: Maximum size of an xattr: 16384
18/07/23 20:06:58 INFO namenode.FSImage: Allocated new BlockPoolId: BP-258224419-192.168.37.138-1532347618173
18/07/23 20:06:58 INFO common.Storage: Storage directory /usr/hadoop-2.6.0/hadoop-root/dfs/name has been successfully formatted.
18/07/23 20:06:58 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/07/23 20:06:58 INFO util.ExitUtil: Exiting with status 0
附注:生成fsimage镜像文件
[root@CentOS ~]# tree /usr/hadoop-2.6.0/hadoop-root/
/usr/hadoop-2.6.0/hadoop-root/
└── dfs
└── name
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION

3 directories, 4 files
2.执行start命令启动HDFS
[root@CentOS ~]# start-dfs.sh 启动HDFS
Starting namenodes on [CentOS]
CentOS: starting namenode, logging to /usr/hadoop-2.6.0/logs/hadoop-root-namenode-CentOS.out
CentOS: starting datanode, logging to /usr/hadoop-2.6.0/logs/hadoop-root-datanode-CentOS.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host ‘0.0.0.0 (0.0.0.0)’ can’t be established.
RSA key fingerprint is 02:cc:8c:da:b9:6d:c9:66:6c:e8:93:64:53:8e:a1:af.
Are you sure you want to continue connecting (yes/no)? yes
0.0.0.0: Warning: Permanently added ‘0.0.0.0’ (RSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/hadoop-2.6.0/logs/hadoop-root-secondarynamenode-CentOS.out
3)检查是否成功
[root@CentOS ~]# jps
2700 Jps
2597 SecondaryNameNode
2357 NameNode
2436 DataNode
或者:http://192.168.37.138:50070(namenode的web访问入口)
如果出现诡异错误记得查看启动日志
[root@CentOS ~]# ls /usr/hadoop-2.6.0/logs/

HDFS架构 (Architecture 架构)

HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的高容错、高可靠性、高可扩展性、高获得性、高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利。

(二) HDFS的优缺点比较
HDFS 的优点:
1、高容错性
1)数据自动保存多个副本。它通过增加副本的形式,提高容错性

2)某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的,我们不必关心。
2、适合批处理
1)它是通过移动计算而不是移动数据

2)它会把数据位置暴露给计算框架。
3、适合大数据处理
1)处理数据达到 GB、TB、甚至PB级别的数据。
2)能够处理百万规模以上的文件数量,数量相当之大。

3)能够处理10K节点的规模
4、流式文件访问

1)一次写入,多次读取。文件一旦写入不能修改,只能追加。

2)它能保证数据的一致性。
5、可构建在廉价机器上

1)它通过多副本机制,提高可靠性。
2)它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。

HDFS 缺点(不适用适用HDFS的场景):
1、低延时数据访问
1)比如毫秒级的来存储数据,这是不行的,它做不到。

2)它适合高吞吐率的场景,就是在某一时间内写入大量的数据。但是它在低延时的情况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。
2、小文件存储
1)存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

2)小文件存储的寻道时间会超过读取时间,它违反了HDFS的设计目标。

3、并发写入、文件随机修改
1)一个文件只能有一个写,不允许多个线程同时写。
2)仅支持数据 append(追加),不支持文件的随机修改。

NameNode和DataNode的软件设计商品的机器上运行。 这些机器通常运行GNU / Linux操作系统(OS)。 HDFS是使用Java语言; 任何支持Java的机器可以运行NameNode或DataNode软件。 使用Java语言具有高度的可移植性意味着HDFS可以部署在一个广泛的机器。 一个典型的部署有专用机器,只能NameNode运行软件。 每一个集群中的其他机器运行一个实例的DataNode软件。 架构并不排除在同一台机器上运行多个datanode但在实际部署,这种情况很少见。
集群中的一个NameNode的存在极大地简化了系统的体系结构。 NameNode是所有HDFS的仲裁员和存储库的元数据。 系统设计以这样一种方式,用户数据不会流经NameNode。
null
HDFS支持传统的分层文件组织。 用户或应用程序可以创建目录和存储文件在这些目录。 文件系统名称空间层次结构类似于其他大多数现有的文件系统; 可以创建和删除文件,一个文件从一个目录移到另一个,或重命名一个文件。 HDFS尚未实现用户配额或访问权限。 HDFS不支持硬链接和软链接。 然而,HDFS架构并不排除实现这些特性。
NameNode维护文件系统名称空间。 任何改变文件系统名称空间或其属性被NameNode记录。 应用程序可以指定文件的副本的数量应该由HDFS。 文件的拷贝数称为该文件的复制因子。 这些信息存储NameNode。
数据复制
HDFS被设计为地可靠地存储海量的文件在一个大集群中可以跨机器。 它存储块的每个文件作为一个序列; 文件除了最后一个块中的所有块是相同的大小。 文件的块复制容错。 块大小和复制每个文件都是可配置的因素。 应用程序可以指定文件的副本的数量。 复制因子可以指定在创建文件时,可以改变。 在HDFS文件写一次,严格的一位作家。
关于复制块NameNode作出所有决定。 它定期接收心跳和Blockreport从每个datanode的集群。 收到心跳意味着DataNode正常运作。 一个Blockreport DataNode包含所有模块的列表。

猜你喜欢

转载自blog.csdn.net/weixin_43975771/article/details/85789619