【云计算】Hadoop急速入门
小标 2019-01-07 来源 : 阅读 1052 评论 0

摘要:本文主要向大家介绍了【云计算】Hadoop急速入门,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】Hadoop急速入门,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。


目录


1 Hadoop背景介绍


1.1 什么是Hadoop


1.2 Hadoop产生背景


1.3 Hadoop在大数据,云计算中的位置和关系


1.4 Hadoop生态圈以及各组成部分的简介


2 分布式系统概述


2.1 分布式软件系统(Distributed Software Systems)


2.2 分布式软件系统举例


3 离线数据分析流程介绍


3.1 需求分析


3.1.1 案例名称


3.1.2 案例需求描述


3.1.3 数据来源


3.2 数据处理流程


3.2.1 流程图解析


3.2.2 项目技术架构图


4 集群搭建


4.1 Hadoop集群搭建


4.1.1 集群简介


4.1.2 服务器准备


4.1.3 网络环境准备


4.1.4 服务器系统设置


4.1.5 Jdk环境安装


4.1.6 Hadoop安装部署


4.1.7 启动集群


4.1.8 测试


5 集群初步使用


5.1 HDFS使用


5.2 MAPREDUCE使用


5.2.1 Demo开发-wordcount


5.2.2 程序打包运行



1 Hadoop背景介绍


1.1 什么是Hadoop


HADOOP是apache旗下的一套开源软件平台 HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 HADOOP的核心组件有


 

HDFS(分布式文件系统)


 

YARN(运算资源调度系统)


 

MAPREDUCE(分布式运算编程框架)



4.广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈


1.2 Hadoop产生背景


1.HADOOP最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。


2.2003年、2004年谷歌发表的两篇论文为该问题提供了可行的解决方案。


——分布式文件系统(GFS),可用于处理海量网页的存储


——分布式计算框架MAPREDUCE,可用于处理海量网页的索引计算问题。


3.Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。


1.3 Hadoop在大数据,云计算中的位置和关系


1.云计算是分布式计算、并行计算、网格计算、多核计算、网络存储、虚拟化、负载均衡等传统计算机技术和互联网技术融合发展的产物。借助IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等业务模式,把强大的计算能力提供给终端用户。


2.现阶段,云计算的两大底层支撑技术为“虚拟化”和“大数据技术”


3.而HADOOP则是云计算的PaaS层的解决方案之一,并不等同于PaaS,更不等同于云计算本身。


1.4 Hadoop生态圈以及各组成部分的简介




 

重点组件:


 

HDFS:分布式文件系统


 

MAPREDUCE:分布式运算程序开发框架


 

HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具


 

HBASE:基于HADOOP的分布式海量数据库


 

ZOOKEEPER:分布式协调服务基础组件


 

Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库


 

Oozie:工作流调度框架


 

Sqoop:数据导入导出工具


 

Flume:日志数据采集框架



2 分布式系统概述


注:由于大数据技术领域的各类技术框架基本上都是分布式系统,因此,理解hadoop、storm、spark等技术框架,都需要具备基本的分布式系统概念


2.1 分布式软件系统(Distributed Software Systems)


该软件系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现最终的整体功能 比如分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。

2.2 分布式软件系统举例


一个solrcloud集群通常有多台solr服务器 每一个solr服务器节点负责存储整个索引库的若干个shard(数据分片) 每一个shard又有多台服务器存放若干个副本互为主备用 索引的建立和查询会在整个集群的各个节点上并发执行 solrcloud集群作为整体对外服务,而其内部细节可对客户端透明

总结:利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。


3 离线数据分析流程介绍


注:本环节主要感受数据分析系统的宏观概念及处理流程,初步理解hadoop等框架在其中的应用环节,不用过于关注代码细节


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


3.1 需求分析


3.1.1 案例名称


“网站或APP点击流日志数据挖掘系统”。


3.1.2 案例需求描述


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


3.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.jsver=1.10.2 HTTP/1.1" 304 0 "//blog.fens.me/nodejs-socketio-chat/" "Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0"


     


3.2 数据处理流程


3.2.1 流程图解析


本案例跟典型的BI系统极其类似,整体流程如下: 【haiv】



但是,由于本案例的前提是处理海量数据,因而,流程中各环节所使用的技术则跟传统BI完全不同:


数据采集:定制开发采集程序,或使用开源框架FLUME 数据预处理:定制开发mapreduce程序运行于hadoop集群 数据仓库技术:基于hadoop之上的Hive 数据导出:基于hadoop的sqoop数据导入导出工具 数据可视化:定制开发web程序或使用kettle等产品 整个过程的流程调度:hadoop生态圈中的oozie工具或其他类似开源产品

3.2.2 项目技术架构图



4 集群搭建


4.1 Hadoop集群搭建


4.1.1 集群简介



 

HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起


 

HDFS集群:


 

负责海量数据的存储,集群中的角色主要有 NameNode / DataNode


 

YARN集群:


 

负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager


 

(那mapreduce是什么呢?它其实是一个应用程序开发包)



本集群搭建案例,以5节点为例进行搭建,角色分配如下:




 
 
 


 

hdp-node-01 NameNode SecondaryNameNode


 

hdp-node-02 ResourceManager


 

hdp-node-03 DataNode NodeManager


 

hdp-node-04 DataNode NodeManager


 

hdp-node-05 DataNode NodeManager


     


部署图如下:



4.1.2 服务器准备


本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:


Vmware 11.0 Centos 6.5 64bit

4.1.3 网络环境准备


采用NAT方式联网 网关地址:192.168.33.1 3个服务器节点IP地址:192.168.33.101、192.168.33.102、192.168.33.103 子网掩码:255.255.255.0

4.1.4 服务器系统设置


添加HADOOP用户 为HADOOP用户分配sudoer权限 同步时间 设置主机名 hdp-node-01 hdp-node-02 hdp-node-03 配置内网域名映射: 192.168.33.101hdp-node-01 192.168.33.102hdp-node-02 192.168.33.103hdp-node-03 配置ssh免密登陆 配置防火墙

4.1.5 Jdk环境安装


上传jdk安装包 规划安装目录 /home/hadoop/apps/jdk_1.7.65 解压安装包 配置环境变量 /etc/profile

4.1.6 Hadoop安装部署


上传HADOOP安装包 规划安装目录 /home/hadoop/apps/hadoop-2.6.1 解压安装包 修改配置文件 $HADOOP_HOME/etc/hadoop/

最简化配置如下:


vihadoop-env.sh


/usr/local/src/jdk1.7.0_71




 
 
 


 

# The java implementation to use.


 

export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51


     


vicore-site.xml




 
 
 


 
 
 

fs.defaultFS


 

hdfs://hdp-node-01:9000


 
 

hadoop.tmp.dir


 

/home/HADOOP/apps/hadoop-2.6.1/tmp


     


vihdfs-site.xml




 
 
 


 
 
 

dfs.namenode.name.dir


 

/home/hadoop/data/name


 
 

dfs.datanode.data.dir


 

/home/hadoop/data/data


 
 

dfs.replication


 

3


 
 

dfs.secondary.http.address


 

hdp-node-01:50090


     


vimapred-site.xml




 
 
 


 
 
 

mapreduce.framework.name


 

yarn


     


viyarn-site.xml




 
 
 


 
 
 

yarn.resourcemanager.hostname


 

hadoop01


 
 

yarn.nodemanager.aux-services


 

mapreduce_shuffle


     


visalves




 
 
 


 

hdp-node-01


 

hdp-node-02


 

hdp-node-03


     


4.1.7 启动集群


初始化HDFS



 

bin/hadoop namenode -format



启动HDFS



 

sbin/start-dfs.sh



启动YARN



 

sbin/start-yarn.sh



4.1.8 测试


1 上传文件到HDFS


从本地上传一个文本文件到hdfs的/wordcount/input目录下




 
 
 


 

[HADOOP@hdp-node-01 ~]$ HADOOP fs -mkdir -p /wordcount/input


 

[HADOOP@hdp-node-01 ~]$ HADOOP fs -put /home/HADOOP/somewords.txt /wordcount/input


     


2 运行一个mapreduce程序


在HADOOP安装目录下,运行一个示例mr程序




 
 
 


 

cd $HADOOP_HOME/share/hadoop/mapreduce/


 

hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input /wordcount/output


     


5 集群初步使用


5.1 HDFS使用


1 查看集群状态



 

命令: hdfs dfsadmin –report


 

也可打开web控制台查看HDFS集群信息,在浏览器打开//hdp-node-01:50070/



2 上传文件到HDFS



 

查看HDFS中的目录信息


 

命令: hadoopfs –ls /


 

上传文件


 

命令: hadoop fs -put ./scala-2.10.6.tgzto /


 

从HDFS下载文件


 

命令: hadoop fs -get /yarn-site.xml



5.2 MAPREDUCE使用


mapreduce是hadoop中的分布式运算编程框架,只要按照其编程规范,只需要编写少量的业务逻辑代码即可实现一个强大的海量数据并发处理程序


5.2.1 Demo开发-wordcount


1、需求


从大量(比如T级别)文本文件中,统计出每一个单词出现的总次数


2、mapreduce实现思路


Map阶段:


从HDFS的源数据文件中逐行读取数据 将每一行数据切分出单词 为每一个单词构造一个键值对(单词,1) 将键值对发送给reduce

Reduce阶段:


接收map阶段输出的单词键值对 将相同单词的键值对汇聚成一组 对每一组,遍历组中的所有“值”,累加求和,即得到每一个单词的总次数 将(单词,总次数)输出到HDFS的文件中 具体编码实现

(1)定义一个mapper类


//首先要定义四个泛型的类型
//keyin:  LongWritable    valuein: Text
//keyout: Text            valueout:IntWritable

public class WordCountMapper extends Mapper{
 //map方法的生命周期:  框架每传一行数据就被调用一次
 //key :  这一行的起始点在文件中的偏移量
 //value: 这一行的内容
 @Override
 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
  //拿到一行数据转换为string
  String line = value.toString();
  //将这一行切分出各个单词
  String[] words = line.split(" ");
  //遍历数组,输出<单词,1>
  for(String word:words){
   context.write(new Text(word), new IntWritable(1));
  }
 }
}


(2)定义一个reducer类


//生命周期:框架每传递进来一个kv 组,reduce方法被调用一次
 @Override
 protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {
  //定义一个计数器
  int count = 0;
  //遍历这一组kv的所有v,累加到count中
  for(IntWritable value:values){
   count += value.get();
  }
  context.write(key, new IntWritable(count));
 }
}


(3)定义一个主类,用来描述job并提交job


public class WordCountDriver {
 //把业务逻辑相关的信息(哪个是mapper,哪个是reducer,要处理的数据在哪里,输出的结果放哪里。。。。。。)描述成一个job对象
 //把这个描述好的job提交给集群去运行
 public static void main(String[] args) throws Exception {
  Configuration conf = new Configuration();
  Job wcjob = Job.getInstance(conf);
  //指定我这个job所在的jar包
//  wcjob.setJar("/home/hadoop/wordcount.jar");
  wcjob.setJarByClass(WordCountRunner.class);
  
  wcjob.setMapperClass(WordCountMapper.class);
  wcjob.setReducerClass(WordCountReducer.class);
  //设置我们的业务逻辑Mapper类的输出key和value的数据类型
  wcjob.setMapOutputKeyClass(Text.class);
  wcjob.setMapOutputValueClass(IntWritable.class);
  //设置我们的业务逻辑Reducer类的输出key和value的数据类型
  wcjob.setOutputKeyClass(Text.class);
  wcjob.setOutputValueClass(IntWritable.class);
  
  //指定要处理的数据所在的位置
  FileInputFormat.setInputPaths(wcjob, "hdfs://hdp-server01:9000/wordcount/data/big.txt");
  //指定处理完成之后的结果所保存的位置
  FileOutputFormat.setOutputPath(wcjob, new Path("hdfs://hdp-server01:9000/wordcount/output/"));
  
  //向yarn集群提交这个job
  boolean res = wcjob.waitForCompletion(true);
  System.exit(res0:1);


5.2.2 程序打包运行


将程序打包 准备输入数据

vi/home/hadoop/test.txt




 
 
 


 

Hello tom


 

Hello jim


 

Hello ketty


 

Hello world


 

Ketty tom


     


在hdfs上创建输入数据文件夹:


hadoopfs mkdir -p /wordcount/input


将words.txt上传到hdfs上


hadoopfs –put /home/hadoop/words.txt /wordcount/input


3.将程序jar包上传到集群的任意一台服务器上


4.使用命令启动执行wordcount程序jar包



 

$ hadoop jar wordcount.jar com.test.mrsimple.WordCountDriver /wordcount/input /wordcount/out



5.查看执行结果



 

$ hadoopfs –cat /wordcount/out/part-r-00000



          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved