第二次作业:Hadoop演进与Hadoop生态
1.了解对比Hadoop不同版本的特性,可以用图表的形式呈现。
1.Apache hadoop
Hadoop 2
1)hadoop通用模块,支持其他hadoop模块的通用工具集;
(2)Hadoop分布式文件系统,支持对应数据高吞吐量访问的分布式文件系统;
(3)用于作业调度和集群资源管理的Hadoop YANRN框架;
(4)Hadoop MapReduce,基于YARN的大数据并行处理系统
目前最新的是Hadoop 3
(1)增加了参数冲突检测,避免重复定义和冗余参数
(2)CLASSPATH, JAVA_LIBRARY_PATH, and LD_LIBRARY_PATH等参数的去重,缩短环境变量
(3)shell脚本重构,将更多的代码加入function中,提供重载,删除重复代码,便于测试
(4)脚本清理和简化
(5)尽可能与当前系统保持兼容
(6)提供一份Hadoop环境变量列表
1.License
Hadoop 2.x - Apache 2.0,开源
Hadoop 3.x - Apache 2.0,开源
2.支持的最低Java版本
Hadoop 2.x - java的最低支持版本是java 7
Hadoop 3.x - java的最低支持版本是java 8
3.容错
Hadoop 2.x - 可以通过复制(浪费空间)来处理容错。
Hadoop 3.x - 可以通过Erasure编码处理容错。
4.数据平衡
Hadoop 2.x - 对于数据,平衡使用HDFS平衡器。
Hadoop 3.x - 对于数据,平衡使用Intra-data节点平衡器,该平衡器通过HDFS磁盘平衡器CLI调用。
5.存储Scheme
Hadoop 2.x - 使用3X副本Scheme
Hadoop 3.x - 支持HDFS中的擦除编码。
6.存储开销
Hadoop 2.x - HDFS在存储空间中有200%的开销。
Hadoop 3.x - 存储开销仅为50%。
7.存储开销示例
Hadoop 2.x - 如果有6个块,那么由于副本方案(Scheme),将有18个块占用空间。
Hadoop 3.x - 如果有6个块,那么将有9个块空间,6块block,3块用于奇偶校验。
8.YARN时间线服务
Hadoop 2.x - 使用具有可伸缩性问题的旧时间轴服务。
Hadoop 3.x - 改进时间线服务v2并提高时间线服务的可扩展性和可靠性。
9.默认端口范围
Hadoop 2.x - 在Hadoop 2.0中,一些默认端口是Linux临时端口范围。所以在启动时,他们将无法绑定。
Hadoop 3.x - 但是在Hadoop 3.0中,这些端口已经移出了短暂的范围。
10.工具
Hadoop 2.x - 使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。
Hadoop 3.x - 可以使用Hive,pig,Tez,Hama,Giraph和其他Hadoop工具。
11.兼容的文件系统
Hadoop 2.x - HDFS(默认FS),FTP文件系统:它将所有数据存储在可远程访问的FTP服务器上。Amazon S3(简单存储服务)文件系统Windows Azure存储Blob(WASB)文件系统。
Hadoop 3.x - 它支持所有前面以及Microsoft Azure Data Lake文件系统。
12.Datanode资源
Hadoop 2.x - Datanode资源不专用于MapReduce,我们可以将它用于其他应用程序。
Hadoop 3.x - 此处数据节点资源也可用于其他应用程序。
13.MR API兼容性
Hadoop 2.x - 与Hadoop 1.x程序兼容的MR API,可在Hadoop 2.X上执行
Hadoop 3.x - 此处,MR API与运行Hadoop 1.x程序兼容,以便在Hadoop 3.X上执行
14.支持Microsoft Windows
Hadoop 2.x - 它可以部署在Windows上。
Hadoop 3.x - 它也支持Microsoft Windows。
15.插槽/容器
Hadoop 2.x - Hadoop 1适用于插槽的概念,但Hadoop 2.X适用于容器的概念。通过容器,我们可以运行通用任务。
Hadoop 3.x - 它也适用于容器的概念。
16.单点故障
Hadoop 2.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复。
Hadoop 3.x - 具有SPOF的功能,因此只要Namenode失败,它就会自动恢复,无需人工干预就可以克服它。
17.HDFS联盟
Hadoop 2.x - 在Hadoop 1.0中,只有一个NameNode来管理所有Namespace,但在Hadoop 2.0中,多个NameNode用于多个Namespace。
Hadoop 3.x - Hadoop 3.x还有多个名称空间用于多个名称空间。
18.可扩展性
Hadoop 2.x - 我们可以扩展到每个群集10,000个节点。
Hadoop 3.x - 更好的可扩展性。我们可以为每个群集扩展超过10,000个节点。
19.更快地访问数据
Hadoop 2.x - 由于数据节点缓存,我们可以快速访问数据。
Hadoop 3.x - 这里也通过Datanode缓存我们可以快速访问数据。
20.HDFS快照
Hadoop 2.x - Hadoop 2增加了对快照的支持。它为用户错误提供灾难恢复和保护。
Hadoop 3.x - Hadoop 2也支持快照功能。
21.平台
Hadoop 2.x - 可以作为各种数据分析的平台,可以运行事件处理,流媒体和实时操作。
Hadoop 3.x - 这里也可以在YARN的顶部运行事件处理,流媒体和实时操作。
22.群集资源管理
Hadoop 2.x - 对于群集资源管理,它使用YARN。它提高了可扩展性,高可用性,多租户。
Hadoop 3.x - 对于集群,资源管理使用具有所有功能的YARN。
2.Cloudera Distribution Hadoop
cdh5.
体系架构
CM分为Server与Agent两部分及数据库(自带更改过的嵌入Postgresql),
它主要做三件事件:
1.管理监控集群主机;
2.统一管理配置;
3.管理维护Hadoop平台系统.
实现采用C/S结构,Agent为客户端负责执行服务端发来的命令,执行方式一般为使用python调用相应的服务shell脚本。Server端为Java REST服务,提供REST API,Web管理端通过REST API调用Server端功能,Web界面使用富客户端技术(Knockout)。
CDH6,
1.打包集成Solr7,更好的应对无论是结构化数据还是非结构化数据。Solr7支持直接使用SQL查询,并且通过SQL接口可以将对非结构化数据的查询对接到传统BI工具。Cloudera Enterprise 6.0支持新的 JSON Facet Module以及Nested Documents,对于Solr7的新的查询界面UI也在6.x的Roadmap中。
2.Hive2的矢量化(vectorization )进一步提升分析性能,带来20%-80%的性能提升。YARN可以在带有GPU的专有硬件上调度作业,对于深度学习用例的性能提升在5倍到10倍。
3.通过全自动的wire encryption(TLS)以及对于Cloudera Manager用户的更加细粒度对每个集群访问的控制,提升Cloudera Manager的集群管理效率,并保护敏感数据以及对基础架构的访问。从而使管理员可以在几分钟之内部署超过2500个节点的多个集群,同时管理开销最小。
3.Hortonworks
现版本为Ambari2.7+HDP3.0
需求使用到的分别为Apache Ambari和HDP和HDP-UTILS。
Apache Ambari是一个基于web的工具,用于配置、管理和监视Apache Hadoop集群,支持Hadoop HDFS,、Hadoop MapReduce、Hive、HCatalog,、HBase、ZooKeeper、Oozie、Pig和Sqoop。Ambari同样还提供了集群状况仪表盘,比如heatmaps和查看MapReduce、Pig、Hive应用程序的能力,以友好的用户界面对它们的性能特性进行诊断。
HDP是hortonworks的软件栈,里面包含了hadoop生态系统的所有软件项目,比如HBase,Zookeeper,Hive,Pig等等。
HDP-UTILS是工具类库。
2.Hadoop生态的组成、每个组件的作用、组件之间的相互关系,以图例加文字描述呈现。
HDFS:分布式文件系统
Yarn:资源调度系统
MapReduce:分布式运算程序开发框架
HIVE:SQL数据仓库工具
HBASE:基于Hadoop的分布式海量数据库
Zookeeper:分布式协调服务基础组件
另外还有
Sqoop:数据迁移工具
Flume:日志数据采集框架

1. HDFS
HDFS(Hadoop分布式文件系统)被设计为一个适合运行在通用硬件上的分布式文件系统,和其他的分布式文件系统有着很多共同点,但比之还是有诸多优点。
(1)HDFS是一个高度容错性的系统,适合部署在廉价的机器上。
(2)HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
(3)HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。
作为一个主从结构,HDFS主要含有NameNode、DataNod、SecondaryNameNode(节点。以下是关于节点的主要底层原理:
(1)NameNode是HDFS的管理节点,负责DataNode的管理和元数据管理(元数据即hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置);
SecondaryNameNode是NameNode的一个助理,帮助NameNode管理元数据,防止元数据丢失;
(2)NameNode记录整个文件的数据信息(数据块数量、长度、分别在哪个DataNode上),存在内存中,也会定期将元数据序列化到磁盘上。
(3)Namenode元数据存在内存hdpdata下(定期序列化到磁盘上 ,并将更新元数据的信息记录在fsimage文件中)。
元数据实时更新,磁盘文件通过edits日志文件记录操作 (引起元数据变化的客户端操作)。
DataNode负责数据存储。
(4)DataNode存储数据块时是存储在服务器的本地磁盘中,每个DataNode存储多个、不同副本以防数据块丢失。
(5)DataNode上还会有一个.meta文件,用于校验数据块,如果遭遇非法恶意更改,可以保证恢复原始数据块的准确性。
(6)SecondaryNamenode会定期从Namenode上下载fsimage镜像和新生成的edits日志,然后加载fsimage镜像到内存中,然后顺序解析edits文件,对内存中的元数据对象进行修改(整合)。整合完成后,将内存元数据序列化成一个新的fsimage,并将这个fsimage镜像文件上传给Namenode.。
2. Yarn
Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统。
关于Yarn,这里不做过多赘述,只需要将Yarn上的两大核心角色,即两个"manager"的工作原理进行理解即可。
ResourceManagerNodeManager)——创建容器,运行程序。
ResourceManager是YARN的管理节点,负责NodeManager的管理、任务调度等。接受用户提交的分布式计算程序,并为其划分资源。管理、监控各个NodeManager上的资源情况,以便于均衡负载。
NodeManager是YARN的节点管理器,负责向ResourceManager汇报当前节点的状态和启动计算任务进程(YarnChild)并监控YarnChild。管理它所在机器的运算资源(cpu + 内存)。负责接受Resource Manager分配的任务,创建容器、回收资源。
3. MapReduce
Mapreduce 是一个分布式运算程序的编程框架,是用户开发“基于 hadoop 的数据分析 应用”的核心框架。
Mapreduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上。
Mapreduce作为一个编程框架,可根据实际需要实现不同功能。每个MapReduce都由两个阶段组成,即Map阶段和Reduce阶段。
MapReduce的四大组件:
Mapper、Reducer、Partitioner、Combiner
4. Hive
Hive是基于Hadoop的一个数据仓库,可以将结构化的数据文件映射为一张表,并提供类sql查询功能,Hive底层将sql语句转化为mapreduce任务运行。相对于用java代码编写mapreduce来说,Hive的优势明显:快速开发,人员成本低,可扩展性(自由扩展集群规模),延展性(支持自定义函数)。
5. HBase(&Zookeeper)
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。
关于HBase,核心内容有以下四点:
1.分布式的,可扩展的,大数据存储的hadoop数据库。
2.当需要实时读写时,会提供百亿行*百亿列规模的数据库。
3.开源的,多版本的结构化数据库模型。
4.来源于谷歌三论文 HDFS,MapReduce,Bigtable
3.官网学习Hadoop的安装与使用,用文档的方式列出步骤与注意事项。
1、JDK1.8的安装
- 添加ppa
12
sudoadd-apt-repository ppa:webupd8team/javasudoapt-get update -
安装Oracle-java-installer
1sudoapt-getinstalloracle-java8-installer这条语句可以默认确认条款:echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selec
-
设置系统默认jdk
jdk7 切换到jdk8
sudo update-java-alternatives -s java-8-oracle - 测试jdk 是是否安装成功:
java -version javac -version - 若选择下载安装包安装
下载: wget http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.tar.gz 创建目录: sudo mkdir /usr/lib/jvm 解压缩至目标目录: sudo tar -zxvfjdk-8u151-linux-x64.tar.gz -C /usr/lib/jvm 修改环境变量: sudo vim ~/.bashrc 文件的末尾追加下面内容: #set oracle jdk environment export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_151 ## 这里要注意目录要换成自己解压的jdk 目录 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 使环境变量马上生效 source ~/.bashrc 设置系统默认jdk 版本 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_151/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_151/bin/javac 300 sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_151/bin/jar 300 sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_151/bin/javah 300 sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_151/bin/javap 300 sudo update-alternatives --config java java -version
二、下载安装配置Hadoop3.0
- 下载Hadoop wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.0.0/hadoop-3.0.0.tar.gz
- 解压缩至/usr/local/hadoop3
- 配置环境变量
vi /etc/profile 末尾添加#Hadoop 3.0 export HADOOP_HOME=/usr/local/hadoop3 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_CONF_DIR=$HADOOP_HOME
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoopexport HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=rootsource /etc/profile
- 配置环境变量
- 配置文件
修改/usr/local/hadoop3/etc/hadoop/core-site.xml,配置hdfs端口和地址,临时文件存放地址<configuration> <property> <name>fs.default.name</name> <value>hdfs://ha01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop3/hadoop/tmp</value> </configuration>
#hdfs://ha01:9000 中ha01是主机名,下面是永久修改hostname的方法
1.修改network文件# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=ha01 //在这修改hostname
NISDOMAIN=eng-cn.platform.com
2.修改/etc/hosts里面的名字
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
172.17.33.169 ha01 //在这修改hostname修改hdfs-site.xml 配置副本个数以及数据存放的路径 <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop3/hadoop/hdfs/name</value> </property> <property> <name>dfs.namenode.data.dir</name> <value>/home/hadoop3/hadoop/hdfs/data</value> </property> </configuration>修改mapred-site.xml,配置使用yarn框架执行mapreduce处理程序,与之前版本多了后面两部 不配置mapreduce.application.classpath这个参数mapreduce运行时会报错: Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value> /usr/local/hadoop3/etc/hadoop, /usr/local/hadoop3/share/hadoop/common/*, /usr/local/hadoop3/share/hadoop/common/lib/*, /usr/local/hadoop3/share/hadoop/hdfs/*, /usr/local/hadoop3/share/hadoop/hdfs/lib/*, /usr/local/hadoop3/share/hadoop/mapreduce/*, /usr/local/hadoop3/share/hadoop/mapreduce/lib/*, /usr/local/hadoop3/share/hadoop/yarn/*, /usr/local/hadoop3/share/hadoop/yarn/lib/* </value> </property> </configuration>修改yar-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>ha01</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>workers文件里添加主机名 ha02 ha03
- Hadoop设置完成,现在实现分布式
通过克隆linux或者复制hadoop文件夹的方式构建其它节点 scp -r /usr/local/hadoop3 root@ha02:/usr/local scp -r /usr/local/hadoop3 root@ha03:/usr/local 复制时候ha02无法解析,此时需要我们在系统hosts文件中声明 192.168.160.101 ha01 192.168.160.102 ha02 192.168.160.103 ha03 - hadoop节点需要设置免密码登录。
1234
ssh-keygen -t rsa//生成密钥id-rsa、公钥id-rsa.pub将公钥的内容复制到需要ssh免密码登陆的机器的~/.ssh/authorized_keys文件中。例如:A机器中生成密钥及公钥,然后将公钥内容复制到B机器的authorized_keys文件中,这样变实现了A免密码ssh登陆B。<br><br>一.SSH免密登录
1.1、检查是否可以免密匙登录
[root@master ~]# ssh localhostThe authenticity of host 'localhost (::1)' can't be established.1.2CentOS默认没有启动ssh无密登录,去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置,
#RSAAuthentication yes
#PubkeyAuthentication yes1.3生成密钥输入命令 ssh-keygen -t rsa 然后一路回车即可1.4复制到公共密钥中cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys1.5再次登录,即可免密匙1[root@master ~]# ssh localhost<br>Last login: Thu Oct 20 15:47:22 2016 from 192.168.0.100
4.评估华为hadoop发行版本的特点与可用性。
华为云是华为的云服务品牌,将华为30多年在ICT领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,赋能应用、使能数据、做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。华为Fusion Insight是一个分布式数据处理系统,对外提供大容量的数据存储、查询和分析能力。Fusion Insight在Hadoop集群上又封装了一层,类似于开源的CDH,HDP等大数据平台
。



- Fusion Insight解决方案由4个子产品Fusion Insight HD、Fusion Insight MPPDB、Fusion Insight Miner、Fusion Insight Farmer和1个操作运维系统Fusion Insight Manager构成。
- Fusion Insight HD:企业级的大数据处理环境,是一个分布式数据处理系统,对外提供大容量的数据存储、分析查询和实时流式数据处理分析能力。
Fusion Insight MPPDB:企业级的大规模并行处理关系型数据库。Fusion Insight MPPDB采用MPP(Massive Parallel Processing)架构,支持行存储和列存储,提供PB(Petabyte,2的50次方字节)级别数据量的处理能力。
Fusion Insight Miner:企业级的数据分析平台,基于华为Fusion Insight HD的分布式存储和并行计算技术,提供从海量数据中挖掘出价值信息的平台。
Fusion Insight Farmer:企业级的大数据应用容器,为企业业务提供统一开发、运行和管理的平台。
Fusion Insight Manager:企业级大数据的操作运维系统,提供高可靠、安全、容错、易用的集群管理能力,支持大规模集群的安装部署、监控、告警、用户管理、权限管理、审计、服务管理、健康检查、问题定位、升级和补丁等功能。
这次华为搭建的平台,可以描述为Fusion Insight HD,其他的子产品后续需要使用的话,需要另外搭建。

浙公网安备 33010602011771号