Hadoop三种配置模式共存步骤详解

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

图1:找到Hadoop的安装目录
echo $PATH

图2:复制3份配置文件目录:/安装目录/etc/hadoop
${hadoop_home}/etc/local
${hadoop_home}/etc/pesudo
${hadoop_home}/etc/full

需要使用什么配置,就创建软链接:`ln -s pesudo hadoop`

详解:实现SSH协议免密码登录步骤

SSH概念:
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

对称加密算法
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

我们有一个重要文件,进行加密,不希望给没有权限的人来看,比如常见的方式,压缩的时候进行加密压缩,解压的时候就需要输入解压密码。(这里明文就是我们的重要文件,密钥就是压缩工具,加密解密都使用的是同一个密码)。

这种方法最大的问题就是加密和解密使用了相同的密码。更先进的方法就是:非对称加密算法。

非对称加密算法
非对称加密算法,又名“公开密钥加密算法”,需要生成2个密钥:公开密钥(public key)和私有密钥(private key)。

实例:

公钥就是可以公开,私钥就是只能自己使用。A用户使用B用户的公钥和自己的公钥进行文件加密(我想要谁有权限看这个文件,就使用谁的公钥),此时文件传送给B,B只需要拿自己的密码和自己的私钥一起解密,就可以查看这个文件,整个过程B不需要知道A的密码。这个过程主要是为了保存A的密码安全,不需要告诉B密码。

SSH命令
# 远程管理指定Linux服务器
ssh 用户名@ip
# 下载文件
scp [-r] 用户名@ip:文件路径 本地路径
# 上传文件
scp [-r] 本地文件 用户名@ip:上传路径

免密码登录方案之SSHkey
实现原理:

客户端向服务器端发送SSH连接的请求时,首先客户端生成自己的公钥和私钥,然后将公钥提供给服务器端的验证文件:authorized_key追加保存,从而实现免秘钥登录。

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

该步骤利用了SSH传输协议,必须将客户端的公钥文件,保存到服务器端的authorized_keys文件中。

6)修改authorized_keys的权限为644.
$>chmod 644 authorized_keys

备注:这是CentOS系统下的一个bug,必须设置权限为644,默认是664。

7)测试
$>ssh localhost

#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执行过程的容错机制。