Hadoop 2.X管理与开发(一)

hadoop的起源与背景知识

一、什么是大数据

举例:

1.电商的推荐系统(可能会用到推荐算法:协同过滤,ALS,逻辑回归…)
2.天气预报

核心的问题:数据的存储,数据的计算(不是算法)

数据的存储:采用分布式的文件系统HDFS(hadoop Distributed file system)

数据的计算:采用分布式的计算MapReduce,Spark(RDD:弹性分布式数据集)

二、数据仓库和大数据

传统方式:搭建数据仓库(Data Werehouse)来解决大数据的问题

1.数据仓库就是一个数据库(Orcale,MySQL,MS)
2.数据仓库和大数据一般只做查询(分析)
3.搭建数据仓库的过程

(1)数据源RDBMS:关系型数据库(结构化数据)/文本数据/其他数据
(2)利用ETL抽取/转化/加载数据后搭建数据仓库(保存为原始数据)
(3)分析处理数据(SQL,PL/SQL,JDBC)
(4)经过分析后搭建数据集市(hr,sales)
(5)提供给hr系统或销售系统

Hadoop和Spark都可以看成是数据仓库的一种实现

1.从ETL到搭建数据集都可以用Hadoop和Spark所提供的方式解决,也可以用传统方式解决
2.hadoop中使用sqoop和Flume组件完成ETL
3.hadoop中使用HDFS存储数据(或存入基于HDFS之上的HBase或Hive数据仓库)
4.hadoop中使用MapReduce(java程序)或Spark(Scala程序,只有数据计算,没有数据存储)或SQL处理数据
5.处理数据后使用HDFS或NoSQL:Redis存储到数据集市
*.大数据的终极目标是使用SQL处理数据

三、OLTP和OLAP

LTP:Online Transaction processing 联机事务处理,指:insert、update、delete —> 事务

OLAP:Online Analytic Processing 联机分析处理,一般只做查询 —> 数据仓库就是一种OLAP的应用系统

Hadoop、Spark看成是一种数据仓库的解决方案

数据仓库(查询)不支持事务

四、Google的基本思想:三篇论文

(一)GFS(Google File System) —- HDFS(Hadoop Distributed File System):分布式文件系统

(*) HDFS = NameNode + SecondaryNameNode + DataNode
1.分布式文件系统
2.大数据的存储问题
3.HDFS中,记录数据的位置信息(元信息) —- 采用倒排索引(Reverted Index)

(1)什么是索引?Index
* CREATE INDEX创建索引
* 索引就是一个记录(Oracle中索引表保存的是有规律的行地址)
* 通过索引可以找到对应的数据
(2)什么是倒排索引?
* 最简单的倒排索引:单词表(wordID,word,index)
(3)NameNode(主节点,名称节点)是整个HDFS的管理员,和SecondaryNameNode(第二名称节点)同处一台主机,负责管理DateNode(从节点,数据节点),并不负责存储,与DateNode(从节点,数据节点)构成HDFS环境

(二)MapReduce:分布计算模型,问题来源PageRank(网页排名)

1.PageRank(网页排名)
2.MapReduce的标程模型:

*. 核心:先拆分(拆分计算,Map阶段),再合并(Reduce阶段)
*. MR任务:job=map+reduce
*. Map的输出同时也是Reduce的输入
*. 一个MR任务一共存在四对输入和输出(),Map的输入和输出,Reduce的输入和输出
*. k2=k3,v2和v3数据类型一致,v3是一个集合,该集合中的每个值就是v2
*. 所有的数据类型必须是Hadoop自己的数据类型(为了实现Hadoop的序列化机制)
*. MR任务处理的是HDFS上的数据
*. Hadoop2.X开始,通过Yarn容器编程部署MR任务(ResourceManager<主节点> + NodeManager<从节点>)

1
2
3
Example:/root/training/Hadoop-2.7.3/Share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
Yarn的web console:http://192.168.226.11:8088
命令://hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /out/wcl

(三)BigTable:大表 —- NoSQL数据库:HBase

1.关系型数据库:以二维表的形式保存数据
2.大表的基本思想:所有的数据存入一张表(通过牺牲空间,换取时间)
3.常见的NoSQL数据库(一般为行式数据库,适合)

* Redis:内存数据库(一般为行式数据库,适合DML操作,insert,update,delect)
* MongoDB:面向文档(BSON文档:是JSON的二进制)
* HBase:面向列(列式数据库,查询,select,在HBase中,rowKey不能为null,但是可以重复,相同的ey是一条记录)

1
HBase = ZooKeeper + HMaster(主节点) + RegionServer(从节点)


hadoop的环境

一、Hadoop的目录结构

hadoop-2.7.3/ —> Hadoop的HOME目录
bin/ —> Hadoop的操作命令
etc/hadoop/ —> 所有的配置文件
sbin/ —> Hadoop集群的命令:启动,停止等
share/ —> 所有共享文件
share/hadoop –> 所有依赖jar包

二、Hadoop的三种安装模式

(一)本地模式

* 没有HDFS,只能测试MapReduce程序(不是运行在Yarn中,作为一个独立的Java程序来运行)
* 配置文件:etc/Hadoop/hadoop-env.sh export JAVA_HOME={JAVA_HOME} 自己的JAVA_HOME路径
* 本地模式中用到的路径都是本地路径,因为没有HDFS

(二)伪分布模式

* 特点:再单击上模拟一个分布式的环境,具备Hadoop的所有功能
* 具备HDFS:NameNode + DataNode + SecondaryNameNode(端口50070)
* 具备Yarn:ResourceManager + NodeManager(端口8088)
* 对HDFS的NameNode进行格式化(/root/training/hadoop-2.7.3/tmp)
* 启动HDFS:start-dfs.sh
* 启动Yarn:start-yarn.sh
* 统一启动:start-all.sh
* 配置文件:etc/Hadoop/hadoop-env.sh export JAVA_HOME={JAVA_HOME} 自己的JAVA_HOME路径
* 配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//hdfs-site.xml:

//配置数据块的冗余度
//原则冗余度跟数据节点的个数保持一致,最大不要超过3
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

//是否开启HDFS权限检查,默认值为true(使用默认值,需要再改)
<!--
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
-->


//core-site.xml:

//配置HDFS主节点的地址,就是NameNode的地址
//9000是RPC的通信端口
<property>
<name>fs.defaultFS</name>
<value>hdfs://RedHat111:9000</value>
</property>

//HDFS数据块和元信息保存在操作系统的目录位置
//默认值是Linux的tmp目录
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tmp</value>
</property>


//mapred-site.xml:(默认没有这个文件)
//MR程序运行的程序或框架
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>


//yarn-site.xml:
//配置yarn主节点的位置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>RedHat111</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

(三)全分布模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(1)hdfs-site.xml:
<!—配置数据块的冗余度,默认是3—>
<!—原则冗余度跟数据节点保持一致,最大不要超过3—>
<property>
<name>dis.replication</name>
<value>2</value>
</property>

<!—是否开启HDFS权限检查,默认是true—>
<property>
<name>dis.permissions</name>
<value>false</value>
</property>

(2)core-site.xml:
<!—配置HDFS主节点位置,就是NameNode的位置—>
<!—9000是RPC的通信端口—>
<property>
<name>fs.defaultFS</name>
<value>hdfs://RedHat112:9000</value>
</property>

<!—HDFS元信息和数据块保存在操作目录的位置—>
<!—默认是系统的tmp文件夹,会随断电而清除—>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/training/hadoop-2.7.3/tnp</value>
</porperty>

(3)mapped-site.xml
<!—MR运行容器或框架—>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

(4)yarn-site.xml
<!—配置yarn主节点的位置—>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>RedHat112</value>
</property>

<!—NodeManager执行MR任务的方式是Shuffle洗牌—>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

(4)slaves配置从节点地址:
RedHat113
RedHat114

(5)对NameNode进行格式化

(6)把RedHat上安装好的目录复制到从节点上
scp -r hadoop-2.7.3/ root@RedHat113:/root/training
scp -r hadoop-2.7.3/ root@RedHat114:/root/training

(7)在主节点上启动集群
start-all.sh