#大数据学习笔记第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