# 10小时入门大数据 # 学习笔记

## 第1章 大数据概述 ##
### 1-1 导学
学习本项目的前置基础知识要求:

– 了解J2SE编程
– 懂得JAVA语法
– 了解J2SE基础知识
– 了解LINUX常用基本命令的使用

环境介绍:

– Linux版本:CentOS 6.4
– Hadoop版本:CDH5.7
– 开发工具:IDAE

课程安排:

– 大数据概述
– 初识Hadoop
– 分布式文件系统HDFS
– 分布式资源调度YARN
– 分布式计算框架MapReduce
– Hadoop项目实战
– Hadoop分布式集群搭建
– Hadoop集成Spring的使用
– 前言技术拓展:Spark/Flink/Bean
– Hadoop3.x新特性

### 1-2 课程安排
– 大数据故事
– 大数据背景
– 大数据基本概念
– 大数据涉及到的技术
– 大数据带来的技术挑战
– 大数据带来的思维变革

### 1-3 两个案例
– 莱曼世界杯扑出点球的纸条
– 电商把假货卖给谁

### 1-4 大数据与生活息息相关

### 1-5 大数据基本概念
图:4V特征

图:大数据要解决的问题

### 1-6 大数据所面对的技术挑战
大数据涉及到的技术:

– 数据采集
– 数据存储
– 数据处理/分析/挖掘
– 可视化

大数据在技术架构上带来的挑战

– 对现有的数据库管理技术的挑战
– 经典数据库技术没有考虑数据的多类别
– 实时性的技术挑战
– 网络架构、数据中心、运维的挑战

大数据带来的其他挑战

– 数据隐私
– 数据源复杂多样

### 1-7 如何应对大数据带来的挑战
挑战分析之如何对大数据进行存储和分析呢?

图:大数据存储和分析

开源实现:Hadoop

### 1-8 如何学好大数据
– 官网、官网、官网
– 英文、英文、英文
– 项目实战对知识点进行巩固和融会贯通
– 社区活动:开源社区大会、线下沙龙等
– 切记:多动手、多练习、贵在坚持

## 第2章 初识Hadoop ##
### 2-1 章节安排
– Hadoop概述
– Hadoop核心组件
– Hadoop优势
– Hadoop发展史
– Hadoop生态系统
– Hadoop发行版的选择
– Hadoop企业应用案例

### 2-2 Hadoop概述
图1:名字的由来

Hadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名。

图2:官网的说明

图3:Hadoop介绍

图4:Hadoop能做什么

### 2-3 Hadoop核心组件
分布式文件系统HDFS:

– 源自于Google的FDS论文,论文发表于2003年10月
– HDFS的GFS克隆版
– HDFS特点:扩展性、容错性、海量数据存储
– 将文件分成指定大小的数据块并以多副本的存储在多个机器上
– 数据切分、多副本、容错等操作对用户是透明的

图5:分布式文件系统HDFS

资源调度系统YARN:

– YARN: Yet Another Resource Negotiator
– 负责整个集群资源的管理和调度
– YARN特点:扩展性、容错性、多框架资源统一调度(2.0)

图6:资源调度系统YARN

分布式计算框架MapReduce

– 源自于Google的MapReduce论文,论文发表于2004年12月
– MapReduce是Google MapReduce的克隆版
– MapReduce特点:扩展性、容错性、海量数据离线处理

图7:分布式计算MapReduce

### 2-4 Hadoop优势
高可靠性

– 数据存储:数据块多副本
– 数据计算:重新调度作业计算

高扩展性

– 存储/计算资源不够时,可以横向的线性扩展机器
– 一个集群中可以包含数以千计的节点

其他

– 存储在廉价机器上,降低成本
– 成熟的生态圈

### 2-5 Hadoop发展史
文章:《Hadoop十年解读与发展预测》

### 2-6 Hadoop生态系统
狭义Hadoop:是一个适合大数据分布式存储、分布式计算、和资源调度的平台。

广义Hadoop:指的是整个Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,Hadoop是其中最重要最基础的一个部分;生态系统中的每一个子系统只解决某一个特定的问题域,不搞统一型的一个全能系统,而是小而精的多个小系统。

图8:Hadoop生态系统

特点:

– 开源、社区活跃
– 囊括了大数据处理的方方面面
– 成熟的生态圈

### 2-7 Hadoop发行版的选择
常用发行版和选型:

– Apache Hadoop
CDH:Cloudera Distributed Hadoop
– HDP:Hortonworks Data Platform

图9-10:CDH发行版

### 2-8 Hadoop企业应用案例
图11:消费大数据之亚马逊预测式发货

图12:商品零售大数据

## 第3章 分布式文件系统HDFS ##
### 3-1 章节安排
– HDFS概述及设计目标
– HDFS架构
– HDFS副本机制
– HDFS环境搭建(伪分布式)
– HDFS shell
– JAVA API操作HDFS
– HDFS文件读写流程(重点)
– HDFS优缺点

问题:如果让我们来设计一个分布式文件系统,怎么做?

图1:自定义分布式文件系统

HDFS是按照每个文件先进行拆分,拆分成块,每个块的大小我们可以进行设置,一般设置成128M。

### 3-2 HDFS概述及设计目标
什么是HDFS?

– Hadoop实现了一个分布式文件系统,简称HDFS(Hadoop Distributed File System)。
– 源自于Google的GFS论文
– 发表于2003年,HDFS是GFS的克隆版

设计目标:

– 非常巨大的分布式文件系统
– 运行在廉价的硬件上
– 易扩展、为用户提供性能不错的文件存储服务

官方链接:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html

图2:官网HDFS介绍

### 3-3 HDFS架构
图3:HDFS架构图

官网原文:NameNode and DataNodes

HDFS has a master/slave architecture. An HDFS cluster consists of a single NameNode, a master server that manages the file system namespace and regulates access to files by clients. In addition, there are a number of DataNodes, usually one per node in the cluster, which manage storage attached to the nodes that they run on. HDFS exposes a file system namespace and allows user data to be stored in files. Internally, a file is split into one or more blocks and these blocks are stored in a set of DataNodes. The NameNode executes file system namespace operations like opening, closing, and renaming files and directories. It also determines the mapping of blocks to DataNodes. The DataNodes are responsible for serving read and write requests from the file system’s clients. The DataNodes also perform block creation, deletion, and replication upon instruction from the NameNode.

The NameNode and DataNode are pieces of software designed to run on commodity machines. These machines typically run a GNU/Linux operating system (OS). HDFS is built using the Java language; any machine that supports Java can run the NameNode or the DataNode software. Usage of the highly portable Java language means that HDFS can be deployed on a wide range of machines. **A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software.** The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.

The existence of a single NameNode in a cluster greatly simplifies the architecture of the system. The NameNode is the arbitrator and repository for all HDFS metadata. The system is designed in such a way that user data never flows through the NameNode.

1个Master(NameNode,简称NN),带N个Slave(DataNode,简称DN)。1个文件会被拆分成多个Block,blocksize:128M。

NN负责处理:

  • (1)负责客户端请求的响应
  • (2)负责元数据[文件的名称\副本系数\Block存放的DN]的管理。

DN负责处理:

  • (1)存储用户的文件对应的数据块
  • (2)要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况。

### 3-4 HDFS副本机制

HDFS supports a traditional hierarchical file organization. A user or an application can create directories and store files inside these directories. The file system namespace hierarchy is similar to most other existing file systems; one can create and remove files, move a file from one directory to another, or rename a file.

The NameNode maintains the file system namespace. Any change to the file system namespace or its properties is recorded by the NameNode. An application can specify the number of replicas of a file that should be maintained by HDFS. The number of copies of a file is called the replication factor(副本系数,副本因子) of that file. This information is stored by the NameNode.

HDFS is designed to reliably store very large files across machines in a large cluster. It stores each file as a sequence of blocks. The blocks of a file are replicated for fault tolerance. The block size and replication factor are configurable per file.

All blocks in a file except the last block are the same size, while users can start a new block without filling out the last block to the configured block size after the support for variable length block was added to append and hsync.

An application can specify the number of replicas of a file. The replication factor can be specified at file creation time and can be changed later. Files in HDFS are write-once (except for appends and truncates) and have strictly one writer at any time.

The NameNode makes all decisions regarding replication of blocks. It periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode.

图4:HDFS副本机制&Block信息

### 副本存放策略
图5:副本存放策略:分机架、分节点

### 3-5 HDFS环境搭建(伪分布式)
cdh下载地址:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0/hadoop-project-dist/hadoop-common/SingleCluster.html

http://archive.cloudera.com/cdh5/cdh/5/

图6:官网介绍安装前准备

Hadoop伪分布式安装步骤:

1)安装JDK详细步骤

– 解压:`tar -zxvf jdk-7u79-linux-x64.tar.gz -C ~/app`
– 添加到系统环境变量:`~\.bash_profile`
– export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79
– export PATH=$JAVA_HOME/bin:$PATH
– 使得环境变量生效:`source ~/.bash_profile`
– 验证JAVA是否配置成功:java -version

2)SSH免密码配置详细步骤

– sudo yum install ssh
– ssh -keygen -t rsa
– `cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys`

3)下载并解压Hadoop

## 第4章 分布式资源调度YARN ##

## 第5章 分布式计算框架MapReduce ##

## 第6章 Hadoop项目实战 ##

## 第7章 Hadoop分布式集群搭建 ##

## 第8章 Hadoop集成Spring的使用 ##

## 第9章 前沿技术拓展Spark,Flink,Beam ##

## 第10章 Hadoop3.x新特性 ##