MapReduce入门
写在前面本篇来学习MapReduce,主要包括MapReduce简介、设计目标、特点、不适合场景、编程模型等内容,并在此基础上通过一个词频统计功能来加深对于MapReduce的理解。
MapReduce简介MapReduce是谷歌开源的一个用于大数据量的计算框架,对于大数据量的计算,通常采用并行计算方式来处理。但是如果让开发人员自己来完全实现一个并行计算程序,这是非常困难的,鉴于此种情况,MapReduce就孕育而生,它是一种简化并行计算的编程模型,允许没有并发计算经验的开发者也能开发出并行计算程序,这无疑大大降低了并行计算的实现门槛。
设计目标从简介中可以知道MapReduce的设计目标就是便于开发人员在不熟悉分布式并发编程的情况下,也能将自己的程序运行在分布式系统上。
MapReduce采用的是“分而治之”的思想,即把对大规模数据集的操作,分发给一个主节点管理下的各个子节点,让它们共同来完成,之后整合各个子节点的中间结果,进而得到最终的计算结果。用一句话来概括MapReduce就是“分散任务,汇总结果”。
特点(1)容易编程。MapReduce只需简单实现一些接口,就能完成一个个分 ...
HDFS高级知识
写在前面本篇来学习HDFS更高级的知识,主要包括Hadoop序列化机制、SequenceFile和MapFile的使用。
Hadoop序列化机制序列化与反序列化序列化是将对象转化为字节流,便于在网络上传输或者写入磁盘进行永久存储;而反序列化就是将字节流转回对象。
序列化在分布式数据处理的“进程间通信”和“永久存储”这两个领域出现的概率较大。请注意,在Hadoop中多个节点进程之间的通信是通过远程过程调用来实现的,即(Remote Procedure Call),简称RPC。
Hadoop的序列化请注意Hadoop没有使用Java的序列化,而是采用自己的序列化机制。原因在于Hadoop的序列化,允许用户复用对象,这样就减少了Java对象的分配和回收,提高了应用效率。
Hadoop提供了Writable接口,用于实现序列化:
12345678@Public@Stablepublic interface Writable { //将状态写入到DataOutput二进制流 void write(DataOutput var1) throws IOException; ...
深入学习HDFS的运行原理
写在前面本篇来深入学习HDFS的运行原理,主要包括HDFS文件的读写流程、副本机制和文件数据的负载均衡和机架感知。
HDFS文件读写流程HDFS文件读流程首先学习HDFS文件的读流程,主要是客户端读取数据,其流程如下所示:
(1)客户端通过调用FileSystem的open方法获取需要读取的数据文件,对于HDFS来说这个FileSystem就是DistributeFileSystem;(2)DistributeFileSystem通过RPC来调用NameNode,进而获取到需要读取的数据文件对应的Block存储在哪些DataNode上;(3)客户端会先到最佳位置(所谓最佳位置其实就是离它最近的)的DataNode上调用FSDataInputStream的read方法,通过反复调用read方法,就可以将数据从DataNode传递到客户端;(4)当读取完所有的数据之后,FSDataInputStream就会关闭与DataNode的连接,然后寻找下一块的最佳位置,也就是说对于客户端而言,它只需要读取连续的流;(5)一旦客户端完成读取操作后,就对FSDataInputStream调用clos ...
访问HDFS文件系统
写在前面本篇来学习如何访问HDFS文件系统,主要包括使用Shell和Java API这两种方式。
使用HDFS Shell方式概述HDFS提供了基于Shell的操作命令来管理HDFS上的数据,这些Shell命令和Linux系统上的命令非常相似,因此熟悉Linux的小伙伴可以快速对HDFS进行操作。
HDFS的基本命令格式为:
1bin/hdfs dfs -cmd <args>
请注意在使用HDFS Shell之前,用户需要提前启动Hadoop。
一些常用的Shell命令接下来学习一些HDFS Shell中常用的命令,如下所示:(1)列出HDFS指定路径下的文件目录。其对应的命令格式如下所示:
1hadoop fs -ls 目录路径
举个例子,查看HDFS根目录下的文件:
123456[hadoop@master bin]$ hadoop fs -ls /Found 4 items-rw-r--r-- 1 hadoop supergroup 38 2020-06-20 22:08 /hello.txtdrwxr-xr-x - hadoop superg ...
HDFS入门
写在前面在前面对HDFS相关内容进行了简要学习,接下来开始学习HDFS入门相关的内容,具体包括:(1)HDFS产生背景;(2)HDFS简介;(3)HDFS缺点;(4)HDFS设计目标;(5)HDFS一些概念;(6)HDFS架构。
认识HDFSHDFS产生背景前面也说了,由于现在每天产生的数据量很大,平常使用的操作系统无法满足数据量的存储和处理,如果将多个操作系统综合为一个大的操作系统,方法是可行,但是却不便于管理和维护,鉴于此就诞生了分布式文件管理系统(Distributed File System),简称DFS。
说白了分布式文件系统就是允许一个文件通过网络在多台主机上以多副本的方式进行存储(可提供容错性),实际上是通过网络来访问文件,这样使得用户看起来就像是在访问本地磁盘中的文件一样。
HDFS简介Hadoop Distributed File System,简称HDFS,它是Hadoop项目的核心子项目,用于分布式计算中的数据存储。
Hadoop官方的描述是:HDFS可以运行在廉价的服务器上,为海量数据存储提供了高容错、高可靠、高扩展性、高获得性和高吞吐率等特征。Hadoop其实 ...
搭建Hadoop伪分布式环境
写在前面前面对Hadoop进行了一个基础的学习,接下来开始学习如何安装Hadoop平台。这里使用VMware Workstation Pro、CentOS7.7、Hadoop使用CDH5.7版本。
本篇主要学习如何在VMware Workstation虚拟机上安装的CentOS系统上搭建Hadoop伪分布式环境。
注意关于VMware Workstation Pro和CentOS7.7的安装这里就跳过,假设现在已经成功在VMware Workstation Pro虚拟机上成功安装了CentOS7.7系统,那么接下来就正式进入Hadoop伪分布式环境搭建。
所谓伪分布式是指在一台机器上启动Hadoop需要的所有进程进行工作;而分布式是指在多台机器上都启动Hadoop,按照集群的规划在不同的机器上启动各自需要的Hadoop进程进行相互协调工作。
Hadoop伪分布式环境搭建CentOS系统上软件下载存放地址为/home/soft,软件安装地址为/envy。
Java安装请注意,推荐使用Oracle JDK,因此需要卸载CentOS默认安装的OpenJDK,操作步骤如下:(1)使用rpm - ...
Hadoop初识
写在前面前面学习了大数据相关的知识,本篇正式进入Hadoop的学习,里面涉及到的知识较多,需要好好复习。本篇文章主要内容如下:(1)Hadoop概述:介绍Hadoop是什么以及它能干什么;(2)Hadoop优势:与其他大数据框架进行对比学习;(3)Hadoop发展史:介绍Hadoop发行到现在经历的一些过程;(4)Hadoop核心组件:介绍Hadoop核心组件有哪些以及各自用处;(5)Hadoop发行版本选择:介绍Hadoop一些发行版的特点和优缺点,以及在工作中如何选择合适的发行版本;(6)Hadoop生态系统:介绍Hadoop的生态系统中的其他框架,以及它们适合的业务场景;(7)Hadoop企业案例:介绍几个使用Hadoop来实现的企业案例。
Hadoop概述Hadoop是Hadoop作者孩子的一个棕黄色玩具大象的名字。
Hadoop是一个开源的可靠的(reliable),可扩展的(scalable),分布式计算(distributed computing)框架。
Hadoop是Apache基金会下的一个分布式系统基础架构,主要包括分布式文件系统HDFS(Hadoop Distri ...
大数据概述
写在前面本套笔记使用环境CentOS7.7,Hadoop的版本为CDH5.7,开发工具使用IDEA2018.03。
机器学习、深度学习和人工智能都离不开大数据。大数据的生态圈有两个,一个是Hadoop生态圈,另一个是Spark生态圈。在本套快速入门笔记中,关于Hadoop会学习其三大核心组件的原理与使用,具体包括分布式文件系统HDFS、分布式资源调度YARN和分布式计算框架MapReduce。之后会在此基础上基于某网站的日志来进行Hadoop项目实战学习,主要分析该网站用户使用浏览器访问该网站的情况,可能A用户使用谷歌浏览器,B用户使用IE浏览器,C用户使用Firefox浏览器进行访问,我们需要做的就是基于用户访问日志来分析和统计不同浏览器的使用数量及占比情况。除了Hadoop项目实战之外,还会学习如何搭建Hadoop分布式集群,Hadoop集成Spring框架。
当然除了学习Hadoop,本套笔记中也会简单学习一些关于Spark、Flink和Beam的知识。尽管本套笔记主要学习的是Hadoop2.x相关内容,但是也会对Hadoop3新特性进行讲解。
大数据概述在大数据领域有两个非常经 ...
SSL配置、泛域名和静态服务
写在前面现在大部分网站都使用https协议,而不是传统的http,因此本篇就来学习如何使用Nginx配置网站HTTPS和如何将http重定向到https,同时也会学到如何进行泛域名路径分离和请求转发,静态服务的相关配置,这些都是企业日常开发过程中经常会遇到的情况。
Nginx配置网站HTTPSHTTPSHTTPS是超文本传输安全协议(英文为Hyper Text Transfer Protocol Secure,简称HTTPS)是超文本传输协议HTTP和SSL/TLS的组合,用以提供加密通信以及对网络服务器身份的鉴定。HTTPS连接通常被用于万维网上的交易支付和企业信息系统中敏感信息的传输。请不要将HTTPS协议与在RFC2600中定义的安全超文本传输协议(S-HTTP)相混淆。
HTTPS目前已经是所有注重隐私和安全的网站的首选,随着技术的不断发展,HTTPS网站已经大面积创建了,个人和站长均可以自己动手搭建一个安全的加密网站。
第一步,创建本地SSL证书,依次执行如下命令:
1234// 创建存储文件目录mkdir -p /etc/nginx/ssl// 创建有效期为100年,加密算 ...
Nginx运行状态和NginxWebUI
写在前面开发者需要经常获悉Nginx的运行状态,以便进行更好的使用和维护。因此本篇首先来学习如何通过Nginx提供的ngx_http_stub_status_module模块来监控Nginx的运行状态,同时考虑到实际工作的便利性,这里还会学习如何使用NginxWebUI工具来通过网页方式配置Nginx。
Nginx状态信息这一部分其实应该在前面就应该学习的,但是放在这里学习也是可以。通过前面的学习,我们知道在Nginx模块中有一个ngx_http_stub_status_module模块,这个模块的主要功能就是记录Nginx的基本访问信息,可以让使用者随时掌握Nginx的工作状态。注意在编译的时候就必须增加这个模块,开发者可以使用nginx -V来检查在编译的时候是否添加了此模块:
1234[root@envythink vhost]# nginx -Vnginx version: nginx/1.17.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) configure arguments: --user=nginx --gr ...