大数据Hadoop完全分布式环境搭建轻松搞掂步骤

1、Linux虚拟机安装,添加centos用户


Linux发行版:CentOS 7
新增用户:centos

配置分布式的规划IP:

Select Code
1
2
3
4
5
127.0.0.1 localhost
192.168.10.201 s201
192.168.10.202 s202
192.168.10.203 s203
192.168.10.204 s204

配置IP地址:

Select Code
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
$>vim/etc/sysconfig/network-scripts/ifcfg-eno16777736

TYPE="Ethernet"
BOOTPROTO="static" //修改为静态地址
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
NAME="eno16777736"
UUID="e6767070-2995-451c-bf70-293efa16d962"
DEVICE="eno16777736"
ONBOOT="yes"	//修改为yes
// 新增IP地址配置信息,其他保持不变
IPADDR=192.168.10.201
PREFIX=24	
GATEWAY=192.168.10.2
NETMASK=255.255.255.0
DNS=8.8.8.8
DNS2=114.114.114.114

配置hostname

Select Code
1
$>vim /etc/hostname

输入:s201

s202,s203,s204克隆s201。

2、安装JAVA


下载:jdk-8u65-linux-x64.tar.gz
根目录下创建目录:sudo mkdir /soft

Select Code
1
2
3
4
$>chown centos:centos /soft
$>cd /soft
$>tar -xzvf jdk-8u65-linux-x64.tar.gz
$>ln -s /soft/jdk1.8.0_131 /soft/jdk

3、安装Hadoop


下载:hadoop-2.7.3.tar.gz

Select Code
1
2
$>tar -xzvf hadoop-2.7.3.tar.gz
$>ln -s /soft/hadoop-2.7.3 /soft/hadoop

4、写入环境变量

Select Code
1
$>sudo vim /etc/profile

写入如下配置:

Select Code
1
2
3
4
5
6
7
export JAVA_HOME=/soft/jdk
export PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export PS1='[\u@\h `pwd`]\$'

使配置生效:

Select Code
1
$>source /etc/profile

检查配置是否生效:

Select Code
1
2
java -version
hadoop version

5、配置Hadoop


配置hadoop,使用符号连接的方式,让三种配置形态共存。

Select Code
1
2
3
4
$>cp -r /soft/hadoop/etc/hadoop /soft/hadoop/etc/local
$>cp -r /soft/hadoop/etc/hadoop /soft/hadoop/etc/pesudo
$>cp -r /soft/hadoop/etc/hadoop /soft/hadoop/etc/full
$>rm -rf /soft/hadoop/etc/hadoop

需要使用哪种模式就创建软链接指向对应的配置:

Select Code
1
$>ln -s /soft/hadoop/etc/full /soft/hadoop/etc/hadoop

a) 进入${HADOOP_HOME}/etc/hadoop目录

b) 编辑core-site.xml

Select Code
1
2
3
4
5
6
7
<?xml version="1.0"?>
<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://s201/</value>
	</property>
</configuration>

c) 编辑hdfs-site.xml

Select Code
1
2
3
4
5
6
7
<?xml version="1.0"?>
<configuration>
	<property>
		<name>dfs.replication</name>
		<value>3</value>
	</property>
</configuration>

d) 编辑mapred-site.xml

Select Code
1
2
3
4
5
6
7
8
cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>

e) 编辑yarn-site.xml

Select Code
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
<configuration>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>s201</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>

f) 编辑slaves

Select Code
1
2
3
s202
s203
s204

g) 编辑hadoop-env.sh

Select Code
1
2
3
...
export JAVA_HOME=/soft/jdk
...

6、克隆虚拟机


s202,s203,s204克隆s201。

克隆后:修改每台机器的ip地址:

Select Code
1
$>vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

检测是否成功:CMD客户端是否可以ping ip通过。

7、配置SSH无密登录


远程连接s202,s203,s204清空 /home/centos/.ssh,使用centos用户创建 /home/centos/.ssh 目录(注意目录的权限)

在客户端s201生成公钥和秘钥:

Select Code
1
2
3
4
5
6
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

$>scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s202:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s203:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s204:/home/centos/.ssh/authorized_keys

测试

Select Code
1
$>ssh localhost

(注意:/home/centos/.ssh的目录权限为700)

Select Code
1
2
3
-rw-r--r--  1 centos centos  393 Nov 18 04:59 authorized_keys
-rw-------  1 centos centos 1675 Nov 18 04:58 id_rsa
-rw-r--r--  1 centos centos  393 Nov 18 04:58 id_rsa.pub

authorized_keys 文件的权限为 644。

Select Code
1
2
3
4
ssh s201 chmod 644 ~/.ssh/authorized_keys;
ssh s202 chmod 644 ~/.ssh/authorized_keys;
ssh s203 chmod 644 ~/.ssh/authorized_keys;
ssh s204 chmod 644 ~/.ssh/authorized_keys;

测试s201无密登录s202,s203,s204 (登录后exit退出,测试下一个)

8、如果存在临时文件,则需要清空

Select Code
1
2
3
4
5
6
7
8
$>ssh s202 rm -rf /tmp/hadoop-centos/;
ssh s203 rm -rf /tmp/hadoop-centos/;
ssh s204 rm -rf /tmp/hadoop-centos/;
ssh s201 rm -rf /tmp/hadoop-centos/;
ssh s201 rm -rf /soft/hadoop/logs/*;
ssh s202 rm -rf /soft/hadoop/logs/*;
ssh s203 rm -rf /soft/hadoop/logs/*;
ssh s204 rm -rf /soft/hadoop/logs/*;
Select Code
1
hadoop namenode -format;//清空完毕后,格式化

注意:命令可以在一行执行,命令之间使用 ‘;’ 隔开

9、一切准备后续后,开始启动

Select Code
1
$>start-all.sh

完成启动后,jps 测试:
s201
[centos@s201 /home/centos]$jps
24032 SecondaryNameNode
24753 Jps
24211 ResourceManager
23868 NameNode

s202
[centos@s202 /home/centos]$jps
21217 DataNode
21322 NodeManager
21549 Jps

s203
[centos@s203 /home/centos]$jps
21204 Jps
20886 DataNode
20990 NodeManager

s204
[centos@s204 /home/centos]$jps
21028 NodeManager
21241 Jps
20924 DataNode

最终测试WEB页面:
http://192.168.10.201:50070/

#Hadoop笔记# Hadoop大数据平台架构与实践

## 第1章 初识Hadoop ##
### 1-1 Hadoop大数据平台架构与实践课程简介 ###
大数据已经成为了计算机领域里面现在非常热门的一个词汇,越来越多的人们发现,利用大数据可以挖掘出非常有价值的信息,比如说我们利用商业数据、金融数据、可以去预测一个国家的经济走势,我们利用监控的视频的数据我们可以去发现一个潜逃的罪犯等等,这些都是属于大数据应用。想必大家都想去了解这些背后实现的原理和机制是怎样的?本课将会带领大家学习Hadoop平台,学习如何使用Hadoop来搭建一个存储和分析的平台,本课《Hadoop大数据平台架构与实践》。

**包括以下内容:**

1. 大数据技术的相关概念
2. Hadoop的架构和运行机制
3. 实战:Hadoop的安装与配置
4. 实战:Hadoop开发

**课程学习目标:**

1. 掌握大数据存储与处理技术的原理(理论)
2. 掌握Hadoop的使用和开发能力(实践)

**课程学习建议:**

1. 结合书本、知识点更加系统全面 (Hadoop技术详解、Hadoop权威指南)
2. 实践,边听课边实践,坚持

### 1-2 Hadoop的前世今生 ###
在过去的十几年里,随着Web2.0, 3.0, 移动互联网等事物的兴起,大数据时代已经到来,人们创造数据的速度不断加快,各行各业里数据的规模也越来越大,从GB级到TB级,再到PB级,数据增长的速度也是越来越快,数据类型也越来越多样。随着云计算的普及,数据也越来越集中在云端的服务器。大数据以及他的价值,各大企业以及政府部门都在尽可能多的收集更多的数据,从海量的数据中挖掘有价值的信息,马云曾经说过:“21世纪核心的竞争是数据的竞争,谁拥有更多数据谁就拥有未来”,越来越多的企业关注将数据充分利用起来,挖掘价值。那么问题来了,随着数据的快速增长,尤其是到了PB级以后,对数据的存储和分析变得非常的困难,因为随着数据规模的增长之后,单机的系统往往会存在很多的瓶颈,包括存储容量,读写速率和计算效率。都无法满足用户的需求,为了解决这个问题,Google提出了三大技术来解决大规模数据的存储和处理。分别是:MapReduce, BigTable, GFS。这三大技术可以称得上是革命性的技术,那么为什么说它是革命性的技术呢?因为:

1. 成本较低、能用PC机,就不用大型机和高端存储;
2. 软件容错硬件故障视为常态,通过软件保证可靠性;
3. 简化并行分布式计算,无须控制节点同步和数据交换。

但是,Google只发表了相关的技术论文,没有开放源代码。一个模范Google大数据技术的开源实现出来了,它就是Hadoop。

### 1-3 Hadoop的功能与优势 ###
#### Hadoop是什么? ####

开源的;分布式存储+分布式云计算;
官网:[http://hadoop.apache.org/](http://hadoop.apache.org/)

#### Hadoop的组成 ####
包含2个核心组成部分:

– HDFS:分布式文件系统,存储海量的数据;
– MapReduce:并行处理框架,实现任务分解和调度;

#### Hadoop可以用来做什么?
搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务;

比如说:搜索引擎网页数据的处理,各种商业智能、风险评估、欺诈预警…,日志的分析,数据挖掘,推荐商品,人物画像。这些都是可以用Hadoop来做的。

#### Hadoop的优势
– 优势1:高扩展,理论上来说是可以做到无限的,因为在框架下可以通过简单的增加一些硬件,而使得性能的提升、容量的提升;
– 优势2:低成本,Hadoop借鉴了Google的思想,所以也是不依赖高端硬件,只需要普通的PC机就能够去实现,用廉价的机器就能够来堆叠我们的系统,通过软件方面的容错来保证系统的可靠性;
– 优势3:成熟的生态圈,借助于开源的理论,围绕Hadoop有很多周边的一些工具,比如说:Hive, HBase等等,这些都是为了让Hadoop用的更加高效而产生的一些工具。整个的这些工具集,称之为Hadoop的生态圈,这些都是围绕着Hadoop而衍生出来的一些小的工具。

#### Hadoop的应用情况
Hadoop已成为业界大数据平台的首选,人才需求也是越来越大

### 1-4 Hadoop生态系统及版本 ###

借助于开源运动,Hadoop的生态系统得到了迅速的成熟,也催生了处理各种业务和数据的工具。大数据现在俨然成了Hadoop生态圈的天下,在Hadoop大家族里,除了HDFS, MapReduce之外,还有许多优秀的开源工具,共同组成了Hadoop的生态系统。比如说:

Hive:利用Hive你可以不用去编写复杂的Hadoop任务程序,你只需要写一个SQL语句,这个HIVE就会把你的SQL语句转化成Hadoop任务去执行,它最大的作用就是降低了使用Hadoop的门槛;

HBase:存储结构化数据的分布式数据库,和传统的关系型数据库不一样,HBase放弃了事务特性,它的设计目标是为了追求更高的扩展。和HDFS不同,它提供了数据的随机读写和实时访问,实现对表数据的读写功能。

zookeeper:中文意思是动物管理员。我们知道动物管理员的职责就是看管动物,给动物喂食,那么这个zookeeper工具,就像动物管理员一样,它要监控Hadoop集群里面,每个节点的状态,管理整个集群的配置,维护节点之间数据的一致性,等等。

#### Hadoop的版本
v1.2 稳定版

## 第2章 Hadoop安装 ##
之前我们已经介绍了Hadoop的功能以及应用场景,接下来我们将学习如何安装Hadoop。

– Step1: 准备Linux环境
– Step2: 安装JDK
– Step3: 配置Hadoop

### 2-1 Hadoop安装-获取linux操作系统 ###
1. Windows上使用虚拟机搭建环境;
2. 租用云主机(如阿里云等),公网IP;

本实例以Ubuntu云主机为例。

### 2-2 Hadoop安装-安装JDK ###

Select Code
1
2
3
4
javac
apt-get install openjdk-7-jdk
vim /etc/profile
source /etc/profile

//设置环境变量

Select Code
1
2
3
4
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

### 2-3 Hadoop安装-配置hadoop ###
– 下载:wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz
– 移动安装文件:mv hadoop-1.2.1.tar.gz /opt/
– 进入安装目录下:cd /opt/
– 解压安装包:tar -zxvf hadoop-1.2.1.tar.gz
– 进入安装包的配置文件目录:cd hadoop-1.2.1/conf
– 配置4个文件:
– 修改hadoop-env.sh,设置JAVA_HOME
– 修改core-site.xml,设置hadoop.tmp.dir, dfs.name.dir, fs.default.name
– 修改hdfs-site.xml,设置dfs.data.dir
– 修改mapred-site.xml,设置mapred.job.tracker

如图所示:

### 2-4 安装小结 ###
– 在Linux中安装JDK,并设置环境变量。
– 下载Hadoop并设置Hadoop环境变量。
– 修改4个配置文件。
– 修改hadoop-env.sh,设置JAVA_HOME
– 修改core-site.xml,设置hadoop.tmp.dir, dfs.name.dir, fs.default.name
– 修改mapred-site.xml,设置mapred.job.tracker
– 修改hdfs-site.xml,设置dfs.data.dir
– 配置完毕后,输入命令,进行格式化:hadoop namenode -format
– 格式化,在hadoop/conf目录下,执行启动命令:start-all.sh
– 启动后可以使用`jps`命令查看当前运行的进程

## 第3章 Hadoop的核心-HDFS简介 ##
### 3-1 HDFS基本概念 ###
– 块(block):HDFS的文件被分成块进行存储,默认的块大小是64MB,块是文件存储处理的逻辑单元,我们进行文件的备份、查找都是按块进行处理的。
– NameNode:NameNode是管理节点,存放文件元数据。(1)文件与数据块的映射表;(2)数据块与数据节点的映射表
– DataNode:DataNode是工作节点,存放数据块。

NameNode是唯一的一个管理节点,客户端如果要访问HDFS,会向NameNode查询它的元数据,返回的结果就会告诉我们,这些文件是存放在哪些节点上面,于是客户端就向这些节点拿数据块。下载到数据块之后,就拼接成它想要的文件。如图所示,有5个DateNode,这些节点是存放真正的数据块的。

### 3-2 数据管理策略 ###

保存3份:HDFS中的数据不是随机乱放,而是遵守了一套管理策略。比如说对于任何一个数据块,都是保存3份,HDFS为了保证硬件上的容错,任何一个节点有可能会发生故障,所以数据块有多份冗余,其中2份在同一个机架上面,还有1份在另外一个机架上面。比如说DataNode1挂了,A我们可以在相同的机架上找到;如果整个机架发生故障,还可以在另外一台机架上找到,这样就可以保证数据的可靠。

心跳检测:DataNode定期向NameNode发送心跳消息,检测是否处于active状态,网络是否正常,NameNode就可以知道这个集群中,哪些DataNode处于正常状态。

二级NameNode:英文名称Secondary NameNode。那么如果NameNode发生故障,整个这里面的元数据会丢失,那么为了保证NameNode和元数据不会丢失,它进行了备份,会定期的同步到Secondary NameNode。在大部分情况下,只要NameNode是正常的,Secondary NameNode只是进行备份,不会进行请求。一旦NameNode发生故障,Secondary NameNode会进行同步,进行切换,变成主的NameNode,Secondary NameNode来保证NameNode的高可用性。

### 3-3 HDFS中文件的读写操作 ###

HDFS读取文件的流程:

– 第一步:客户端向NameNode发取读取文件的请求。客户端可能是JAVA程序,也可能是命令行。发取文件读取请求,就是把文件名、文件路径告诉NameNode。
– 第二步:NameNode查询元数据,返回给客户端。客户端就知道这些元数据包含哪些数据块,以及这些块分别会在哪些DataNode里可以找到。
– 第三步:那么客户端就找到这些DataNode,读取这些Block。下载下来后,再进行组装。


HDFS写入文件的流程:

– 第一步:如果客户端有文件需要写入HDFS,首先需要拆分成块,固定大小64MB的Block,通知NameNode。
– 第二步:NameNode会找到一些当前可用的DataNodes返回。
– 第三步:根据返回的DataNodes,客户端对块进行写入。
– 第四步:写入第1个块之后,系统帮我们进行流水线复制。
– 第五步:复制完成之后,更新元数据,告诉NameNode,完成操作。依次完成第2个,第3个块的写入。

### 3-4 HDFS特点 ###
1. 数据冗余,硬件容错
2. 流式的数据访问(写一次,读多次,不能修改)
3. 适合存储大的文件(如果是大量的小文件,NameNode的压力会很大)
4. 适合数据批量读写,吞吐量高
5. 不适合交互式应用,低延迟很难满足
6. 适合一次写入多次读取,顺序读写
7. 不支持多用户并发写相同文件

### 3-5 HDFS使用 ###
HDFS命令行操作,就同Linux命令操作一样。

Select Code
1
2
3
4
5
6
7
hadoop fs -ls /
hadoop fs -put 本地文件 HDFS路径
hadoop fs -get HDFS路径 本地路径
hadoop fs -mkdir HDFS目录名
hadoop fs -rm 文件名
hadoop fs -cat HDFS路径
hadoop dfsadmin -report

## 第4章 Hadoop的核心-MapReduce原理与实现 ##
### 4-1 MapReduce的原理 ###
MapReduce采用了分而治之的思想,将一个大任务拆分成多个小任务(map),并行执行后,合并结果(reduce)。

举例1:假设我们有1000副扑克牌,但是少了一张,希望找出少了哪一张。

我们首先可以把牌进行划分,分成很多份,比如分成了5份,然后每个人对拿到的牌进行map操作,map操作会对每个花色、每张牌进行统计出现的次数,每个人都这么操作,对自己分到的牌进行统计。接下来进行数据交换,约定好按照一定的映射关系规约,规约之后再次统计,就可以筛选出结果。

相同的方法还可以用于流量统计,比如说100GB的网站访问日志文件,找出访问次数最多的IP地址。

### 4-2 MapReduce的运行流程 ###
基本概念:

– Job & Task
– JobTracker
– TaskTracker

Job:它是一个任务(作业),这个任务要完成,需要分成多个Task,一个Job被拆分成多个Task。

Task:分为MapTask和ReduceTask。

JobTracker是一个主要的管理节点,客户端提交任务(Job)给JobTracker,JobTracker将它放入任务候选队列中,在适当的时间选择一个Job,将这个Job拆分成多个Map任务和多个Reduce任务。Map任务分发给TaskTracker来做,TaskTracker是具体做任务的事情。在实际上部署的时候,TaskTracker往往和HDFS的DataNode是同一组物理节点。这样就能保证说计算跟着数据走,当我某个任务分到这里的时候,我需要的数据就是在本机的DataNode中,这样可以保证我们读取数据的时候开销是最小的,最快的读取到我们的数据。

JobTracker的角色

– 作业调度
– 分配任务、监控任务执行进度
– 监控TaskTracker的状态

TaskTracker的角色

– 执行任务
– 汇报任务状态

MapReduce作业执行过程

![](./img/25.jpg)

– 第一步:输入的数据进行分片,分片之后到分配Map端,按照一定的规则,执行Map TaskTracker任务。
– 第二步:任务执行完成之后,产生中间结果,Key-Value对,根据映射规则进行交换;
– 第三步:交换后的结果到Reduce端,执行Reduce TaskTracker任务。
– 第四步:然后,数据结果写回到HDFS中去。数据可能是从HDFS中来的,中间的一些结果可能会写到本地的一些磁盘。

任何一个任务都是通过JobTracker进行分配,分配成Map任务和Reduce任务。对于一些复杂的任务,可能执行多轮以完成更加复杂的任务。

MapReduce的容错机制

– 重复执行
– 推测执行

容错指的是允许在执行任务的过程当中,执行TaskTracker时,会出现一些宕机,发生故障,重启。出错后有两种机制,重复执行和推测执行。重复执行,在执行时遇到了任何问题,会尝试重新执行,一般默认4次,还是失败就放弃执行。推测执行是在任务执行过程中,需要等到所有的Map端执行完成之后,Reduce端才会开始,那么这个时候可能会存在某个节点计算的特别的慢,这时JobTracker再找一个TaskTracker做同样的事情,只要这个事情它们两者谁先计算完,就终止另外一个。这样就不管某个TaskTracker出现故障,导致整个任务的执行效率很低,这就是Hadoop里面MapReduce执行过程的容错机制。

#大数据学习笔记第28天# Hadoop概述

一、hadoop背景介绍


Hadoop官网:http://hadoop.apache.org/

1.1 什么是hadoop

(1)、hadoop是apache旗下的一套开源软件平台,可以通过http://apache.org/—>project–>hadoop打开
(2)、Hadoop是开源软件,可靠的、分布式、可伸缩的。
(3)、Hadoop提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
(4)、广义上来说,Hadoop通常是指一个更广泛的概念—-hadoop生态圈

1.2 数据分析故事

1.3 数据有多大呢

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
1KB (Kilobyte) 	=1024B; 
1MB (Megabyte)	=1024KB = 2^20 B; 
1GB (Gigabyte)	=1024MB = 2^30 B;
1TB (Trillionbyte)	=1024GB
1PB (Petabyte)		=1024TB
1EB (Exabyte)		=1024PB
1ZB (Zettabyte)	=1024EB
1YB (Yottabyte)	=1024ZB
1BB (Brontobyte)	=1024YB
1NB (NonaByte)	=1024BB
1DB (DoggaByte)	=1024NB
1CB (Corydonbyte)	=1024 DB = 2^120 B;
1XB (Xerobyte)	=1024 CB = 2^130 B;

> 注:2014年阿里在杭州召开大数据峰会时提出,大数据从4个V的年代,Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)延伸至三个维度,可实时性、可解释性、数据准确性稳定性。这三个维度是现在到底数据能不能用上的很重要的三个维度。

去IOE
– IBM //ibm小型机.
– Oracle //oracle数据库服务器 RAC
– EMC //EMC共享存储设备。

较为出名的“去IOE”事件要追溯到2013年5月份——阿里巴巴首先发动了“去IOE”运动。

IBM是服务器提供商,Oracle是数据库软件提供商,EMC则是存储设备提供商,三者构成了一个从软件到硬件的企业数据库系统。由这三驾马车构成的数据库系统几乎占领了全球大部分商用数据库系统市场份额。除阿里巴巴这样需要大量数据运算的电商企业,其他如石油、金融行业也广泛地使用这套系统。

具体来说,阿里巴巴的“去IOE”运动就是用成本更加低廉的软件—MYSQL替代Oracle,使用PC Server替代EMC2、IBM小型机等设备,以消除“IOE”对自己数据库系统的垄断。这一行动也被业内解读为低成本化——基于“IOE”在业内的垄断,整套系统维护费用非常昂贵,仅仅Oracle系统三年的销售价格就达到八位数,而阿里旗下的用户群每年都在增长,在应用云计算的过程中,“IOE”系统并不适合云服务横向扩展,也就是多个数据库系统同时运行,因此云服务一旦扩张,这部分维护成本将非常高。

2013年5月17日,最后一台小型机在阿里巴巴支付宝下线,标志着阿里已经完成去IOE化。上海财大经济学院副教授、高等研究院市场机制设计和信息经济研究中心主任李玲芳对《第一财经日报》称,阿里巴巴的“去IOE”为市场带来了一个成功的范本,证明“去IOE”是有可能的。

1.4 分布式
由分布在不同主机上的进程协同在一起,才能构成整个应用。
(1)、分布式软件系统(Distributed Software Systems)
该软件系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能

(2)、分布式应用系统模拟开发
需求:可以实现由主节点将运算任务发往从节点,并将各从节点上的任务启动;

程序清单:
– AppMaster
– AppSlave/APPSlaveThread
– Task

程序运行逻辑流程:

1.5 HADOOP在大数据、云计算中的位置和关系
(1)、虚拟化技术
虚拟化技术是指计算元件在虚拟的基础上而不是真实的基础上运行,它可以扩大硬件的容量,简化软件的重新配置过程,减少软件虚拟机相关开销和支持更广泛的操作系统方面。通过虚拟化技术可实现软件应用与底层硬件相隔离,它包括将单个资源划分成多个虚拟资源的裂分模式,也包括将多个资源整合成一个虚拟资源的聚合模式。虚拟化技术根据对象可分成存储虚拟化、计算虚拟化、网络虚拟化等,计算虚拟化又分为系统级虚拟化、应用级虚拟化和桌面虚拟化目。在云计算实现中。计算系统虚拟化是一切建立在“云”上的服务与应用的基础。虚拟化技术目前主要应用在CPU、操作系统、服务器等多个方面,是提高服务效率的最佳解决方案。

(2)、分布式存储
云计算系统由大量服务器组成,同时为大量用户服务,因此云计算系统采用分布式存储的方式存储数据,用冗余存储的方式(集群计算、数据冗余和分布式存储)保证数据的可靠性。冗余的方式通过任务分解和集群,用低配机器替代超级计算机的性能来保证低成本,这种方式保证分布式数据的高可用、高可靠和经济性,即为同一份数据存储多个副本。云计算系统中广泛使用的数据存储系统是Google的GFS和Hadoop团队开发的GFS的开源实现HDFS。

(3)、海量数据管理技术
云计算需要对分布的、海量的数据进行处理、分析,因此,数据管理技术必需能够高效的管理大量的数据。云计算系统中的数据管理技术主要是Google的BT sT-lO数据管理技术和Hadoop团队开发的开源数据管理模块HBase。由于云数据存储管理形式不同于传统的RDBMS数据管理方式,如何在规模巨大的分布式数据中找到特定的数据,也是云计算数据管理技术所必须解决的问题。同时,由于管理形式的不同造成传统的SQL数据库接口无法直接移植到云管理系统中来,目前一些研究在关注为云数据管理提供RDBMS和SQL的接口,如基于Hadoap 子项目HBase和Hive等。另外,在云数据管理方面,如何保证数据安全性和数据访问高效性也是研究关注的重点问题之一。

(4)、分布式编程模型
云计算提供了分布式的计算模式,客观上要求必须有分布式的编程模式。云计算采用了一种思想简洁的分布式并行编程模型Map-Reduce。Map-Reduce是一种编程模型和任务调度模型。主要用于数据集的并行运算和并行任务的调度处理。在该模式下,用户只需要自行编写Map函数和Reduce函数即可进行并行计算。其中,Map 函数中定义各节点上的分块数据的处理方法,而Reduce函数中定义中间结果的保存方法以及最终结果的归纳方法。

(5)、云平台管理技术
云计算资源规模庞大,服务器数量众多并分布在不同的地点,同时运行着数百种应用,如何有效的管理这些服务器,保证整个系统提供不问断的服务是巨大的挑战。云计算系统的平台管理技术能够使大量的服务器协同工作,方便的进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。

1.6 HADOOP产生背景

1. HADOOP最早起源于Apache Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。
2. 2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。
– 分布式文件系统(GFS),可用于处理海量网页的存储
– 分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。
3. Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。

1.7 HADOOP现状
– Yahoo:4.2万节点/10万CPU/大群4500节;广告/用户行为分析/反垃圾邮件
– FaceBook:1400台/1.12万CPU/15PB
– 百度:单群2800节点/上万台/存储100PB
– 阿里:3200/30000core/100Tmem/60PB; 淘宝/天猫/支付宝/秒杀
– 腾讯:5000/单群2000/游戏/QQ/财付通

1.8 国内外HADOOP应用案例介绍
(1)、HADOOP应用于数据服务基础平台建设

(2)、HADOOP用于用户画像

(3)、HADOOP用于网站点击流日志

1.9 国内HADOOP的就业情况分析

(1)、HADOOP就业整体情况
1. 大数据产业已纳入国家十三五规划
1. 各大城市都在进行智慧城市项目建设,而智慧城市的根基就是大数据综合平台
1. 互联网时代数据的种类,增长都呈现爆发式增长,各行业对数据的价值日益重视
1. 相对于传统JAVAEE技术领域来说,大数据领域的人才相对稀缺
1. 随着现代社会的发展,数据处理和数据挖掘的重要性只会增不会减,因此,大数据技术是一个尚在蓬勃发展且具有长远前景的领域

(2)、HADOOP就业职位要求
大数据是个复合专业,包括应用开发、软件平台、算法、数据挖掘等,因此,大数据技术领域的就业选择是多样的,但就HADOOP而言,通常都需要具备以下技能或知识:
1. HADOOP分布式集群的平台搭建
1. HADOOP分布式文件系统HDFS的原理理解及使用
1. HADOOP分布式运算框架MAPREDUCE的原理理解及编程
1. Hive数据仓库工具的熟练应用
1. Flume、sqoop、oozie等辅助工具的熟练使用
1. Shell/python/scala/等脚本语言的开发能力

2.0 HADOOP生态圈以及各组成部分的简介

重点组件:
– [HDFS:分布式文件系统]
– [MAPREDUCE:分布式运算程序开发框架]
– [HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具]
– HBASE:基于HADOOP的分布式海量数据库
– [ZOOKEEPER:分布式协调服务基础组件]
– Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库
– Oozie:工作流调度框架
– Sqoop:数据导入导出工具
– Flume:日志数据采集框架

二、数据分析流程介绍


一个应用广泛的数据分析系统:“web日志数据分析”

2.1 需求分析
2.1.1 案例名称
一般中型的网站(10W的PV以上),每天会产生1G以上Web日志文件。大型或超大型的网站,可能每小时就会产生10G的数据量。
具体来说,比如某电子商务网站,在线团购业务。每日PV数100w,独立IP数5w。用户通常在工作日上午10:00-12:00和下午15:00-18:00访问量最大。日间主要是通过PC端浏览器访问,休息日及夜间通过移动设备访问较多。网站搜索浏量占整个网站的80%,PC用户不足1%的用户会消费,移动用户有5%会消费。

对于日志的这种规模的数据,用HADOOP进行日志分析,是最适合不过的了。

2.1.2 案例需求描述
“Web点击流日志”包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值,广告转化率、访客的来源信息,访客的终端信息等。

2.1.3 数据来源
本案例的数据主要由用户的点击行为记录
获取方式:在页面预埋一段js程序,为页面上想要监听的标签绑定事件,只要用户点击或移动到标签,即可触发ajax请求到后台servlet程序,用log4j记录下事件信息,从而在web服务器(nginx、tomcat等)上形成不断增长的日志文件。

形如:
58.215.204.118 – – [18/Sep/2013:06:51:35 +0000] “GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1” 304 0 “http://blog.fens.me/nodejs-socketio-chat/” “Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0”

2.2 数据处理流程
2.2.1 流程图解析
本案例跟典型的BI系统极其类似,整体流程如下:

但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同,后续课程都会一一讲解:
1. 数据采集:定制开发采集程序,或使用开源框架FLUME
1. 数据预处理:定制开发mapreduce程序运行于hadoop集群
1. 数据仓库技术:基于hadoop之上的Hive
1. 数据导出:基于hadoop的sqoop数据导入导出工具
1. 数据可视化:定制开发web程序或使用kettle等产品
1. 整个过程的流程调度:hadoop生态圈中的oozie工具或其他类似开源产品

2.2.2 项目技术架构图

2.3 项目最终效果
经过完整的数据处理流程后,会周期性输出各类统计指标的报表,在生产实践中,最终需要将这些报表数据以可视化的形式展现出来,本案例采用web程序来实现数据可视化

效果如下所示:

三、hadoop 3种集群方式

独立模式 伪分布式模式 完全分布式模式

3.1独立模式


默认就是独立模式,使用本地文件系统。
3.1.1安装
a)下载jdk-8u65-linux-x64.tar.gz
b)tar开

Select Code
1
2
3
4
$>su centos ; cd ~
$>mkdir downloads
$>cp /mnt/hdfs/downloads/bigdata/jdk-8u65-linux-x64.tar.gz ~/downlooads
$>tar -xzvf jdk-8u65-linux-x64.tar.gz

c)创建/soft文件夹

Select Code
1
2
$>sudo mkdir /soft
$>sudo chown centos:centos /soft

d)移动tar开的文件到/soft下

Select Code
1
$>mv ~/downloads/jdk-1.8.0_65 /soft/

e)创建符号连接

Select Code
1
$>ln -s /soft/jdk-1.8.0_65 /soft/jdk

f)验证jdk安装是否成功

Select Code
1
2
$>cd /soft/jdk/bin
$>./java  -version

3.1.2 配置jdk环境变量
1.编辑/etc/profile

Select Code
1
2
3
4
$>sudo nano /etc/profile
...
export  JAVA_HOME=/soft/jdk
exprot  PATH=$PATH:$JAVA_HOME/bin

2.使环境变量即刻生效

Select Code
1
$>source /etc/profile

3.进入任意目录下,测试是否ok

Select Code
1
2
$>cd ~
$>java  -version

注意点:你创建文件夹一定和你登陆的用户一致

3.1.3 安装HADOOP软件
1.安装hadoop
a)下载hadoop-2.7.3.tar.gz
b)tar开

Select Code
1
2
3
$>su centos ; cd ~
$>cp /mnt/hdfs/downloads/bigdata/hadoop-2.7.3.tar.gz ~/downloads
$>tar -xzvf hadoop-2.7.3.tar.gz

c)无
d)移动tar开的文件到/soft下

Select Code
1
$>mv ~/downloads/hadoop-2.7.3 /soft/

e)创建符号连接

Select Code
1
$>ln -s /soft/hadoop-2.7.3 /soft/hadoop

f)验证hadoop安装是否成功

Select Code
1
2
$>cd /soft/hadoop/bin
$>./hadoop version

2.配置hadoop环境变量

Select Code
1
2
3
4
5
6
7
$>sudo nano /etc/profile
...
export JAVA_HOME=/soft/jdk
exprot PATH=$PATH:$JAVA_HOME/bin

export HADOOP_HOME=/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

3.生效

Select Code
1
$>source /etc/profile

4.进入任意目录下,测试是否ok

Select Code
1
2
$>cd ~
$>hadoop version

5.nothing !
不需要启用单独的hadoop进程。

6.hdfs dfs -ls /home 和 linux中的ls效果一样(使用本地的文件系统

3.2 伪分布模式(Pseudodistributed mode)


a)进入${HADOOP_HOME}/etc/hadoop目录

三种模式共存

1.创建三个配置目录,内容等同于hadoop目录

Select Code
1
2
3
${hadoop_home}/etc/local
${hadoop_home}/etc/pesudo
${hadoop_home}/etc/full

2.创建符号连接

Select Code
1
$>ln -s pesudo hadoop

b)编辑core-site.xml

Select Code
1
2
3
4
5
6
7
<?xml version="1.0"?>
<configuration>
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://localhost/</value>
</property>
</configuration>

c)编辑hdfs-site.xml

Select Code
1
2
3
4
5
6
7
<?xml version="1.0"?>
<configuration>
<property>
	<name>dfs.replication</name>
	<value>1</value>
</property>
</configuration>

d)编辑mapred-site.xml
注意:cp mapred-site.xml.template mapred-site.xml

Select Code
1
2
3
4
5
6
7
<?xml version="1.0"?>
<configuration>
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>
</configuration>

e)编辑yarn-site.xml

Select Code
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0"?>
<configuration>
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>localhost</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
</configuration>

f)配置SSH

四、SSH介绍

4.1 什么是ssh

简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。
最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

4.2 ssh原理

4.2.1查看是否centos自动安装这些软件
命令:yum list installed | grep ssh

4.3 配置SSH

1)检查是否安装了ssh相关软件包(openssh-server + openssh-clients + openssh)
$yum list installed | grep ssh

2)检查是否启动了sshd进程
$>ps -Af | grep sshd

3)在client侧生成公私秘钥对。
$>ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa

4)生成~/.ssh文件夹,里面有id_rsa(私钥) + id_rsa.pub(公钥)

5)追加公钥到~/.ssh/authorized_keys文件中(文件名、位置固定)
$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys

6)修改authorized_keys的权限为644.
$>chmod 644 authorized_keys
其他不能有w这个不能权限

7)测试
$>ssh localhost
Rwx

五、开启伪分布式

1.对hdfs进行格式化

Select Code
1
$>hadoop namenode -format =hdfs namenode -format

2.修改hadoop配置文件,手动指定JAVA_HOME环境变量

Select Code
1
2
3
4
[${hadoop_home}/etc/hadoop/hadoop-env.sh]
...
export JAVA_HOME=/soft/jdk
...

3.启动hadoop的所有进程

Select Code
1
$>start-all.sh

4.启动完成后,出现以下进程

Select Code
1
2
3
4
5
6
7
$>jps
33702 NameNode
33792 DataNode
33954 SecondaryNameNode

29041 ResourceManager
34191 NodeManager

5查看hdfs文件系统

Select Code
1
$>hdfs dfs -ls /

6.创建目录

Select Code
1
$>hdfs dfs -mkdir -p /user/centos/hadoop

7.通过webui查看hadoop的文件系统

Select Code
1
http://IP地址:50070/

8.停止hadoop所有进程

Select Code
1
$>stop-all.sh

六、通过hadoop自带的demo运行单词统计

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
1)mkdir input
2)cd  intput
3)echo “hello word” > file1.txt
4)echo “hello hadoop” > file2.txt
5)echo “hello mapreduce” >> file2.txt
6) more file2.txt
7) hadoop fs -mkdir  /wc_input
8) hadoop fs -ls /
9) hadoop fs -put ~/input/fi* /wc_input
10)hadoop fs -ls  /wc_input
11)hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /wc_input /output
12)hadoop fs -ls /output
13)hadoop fs -cat /output/part-r-00000

执行结果截图:

参考资料:
https://blog.csdn.net/hliq5399/article/details/78193113