Hadoop
文章平均质量分 58
墨染百城
目前专注于数据分析、大数据计算方面的学习
展开
-
Hadoop2.7.3完全分布式集群安装过程
需要安装的软件Hadoop包含HDFS集群和YARN集群。部署Hadoop就是部署HDFS和YARN集群。机器数量、角色4台。 NameNode 1台、DataNode 3台 主机名 IP 角色 amaster 192.168.37.143 Name Node:9000Resource Manager anode1 192.168.37.129 Data NodeN原创 2017-02-16 01:01:13 · 2418 阅读 · 0 评论 -
使用MapReduce计算Pi
总体思路核心思想是向以(0,0),(0,1),(1,0),(1,1)为顶点的正方形中投掷随机点。统计(0.5,0.5)为圆心的单位圆中落点占总落点数的百分比,即可算出单位圆的面积Pi/4,然后乘以4即得到Pi的近似值。从输入文件中读入一行内容。每一行都是一个数字,代表随机投掷那么多点来估算Pi的值。在Mapper中则随机生成指定数量的随机点(x,y)。x和y的范围在0-1之间。然后求出(x,y)与(原创 2017-03-11 23:48:29 · 5082 阅读 · 0 评论 -
使用MapReduce统计微博关注数据
MapReduce的思想可以参考http://blog.csdn.net/mrbcy/article/details/60139191总体思路 输入 输出 Mapper 用户1 用户2 Reducer <用户名,1/-1>上表中的-1代表入度,1代表出度实现代码代码内容如下:package tech.mrbcy.bigdata.weiborelation;import jav原创 2017-03-12 10:25:45 · 1008 阅读 · 0 评论 -
MapReduce初体验
首先跑一下Hadoop自己带的world count。先得上传文件到HDFS。hadoop fs -mkdir -p /wordcount/inputhadoop fs -put GitHubLog.txt /wordcount/input然后运行hadoop jar /root/apps/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-原创 2017-02-18 16:10:01 · 363 阅读 · 0 评论 -
Hadoop NameNode的Federation
在极端情况下,HDFS上的文件特别多,内存不够用,之前的HA本质上还是一个NameNode,为了应对这种需求就需要多个NameNode。此时不同的NameNode持有的数据都不一样,都在同时对外提供服务。为了保持服务的一致性,可以分目录来进行区分。比如分为/ns1和/ns2,就像两个分区那样。是一个逻辑路径,映射到实际的hdfs路径下面。此时,两个NameNode就变成了Federation。Fed原创 2017-03-22 19:09:10 · 568 阅读 · 0 评论 -
Hadoop中的高可用机制
HDFS的高可用可用性用小时来衡量,如:7*24小时、364 * 24高可用不能简单的通过keepalive来进行NameNode的高可用。因为NameNode需要有大量的状态信息维护。可行的方法:两个NameNode,一个对外工作(active),一个后补(standby),这就涉及到元数据同步的问题。可以将edits保存到第三方,standy的NameNode即可收到edits,从而保持元数据的原创 2017-03-22 18:45:00 · 975 阅读 · 0 评论 -
Hadoop HA的搭建
我们目前只有4台机器,所以需要好好规划一下机器的角色。如果机器多最好还是分得开一点 机器名 角色 amaster NameNodeResourceManagerZooKeeper anode1 NameNodeZooKeeperJournalNode anode2 DataNodeNodeManagerZooKeeperJournalNode anode3 Da原创 2017-03-22 21:15:34 · 440 阅读 · 0 评论 -
WordCount程序运行流程分析
在job.submit()时,客户端会去查看输入文件的规模,并根据输入的文件规模决定使用多少个MapperTask来运行Job。同时还会进行任务的规划,划分具体哪个MapTask处理哪个数据文件的具体范围。等到Job被提交给YARN集群后,ResourceManager会根据当前集群中各节点的情况,选择一台机器启动MR Appmaster,并把Job相关的信息都交给MR Appmaster。然后MR原创 2017-03-13 15:51:43 · 1179 阅读 · 0 评论 -
在MapReduce的Map和Reduce过程中使用自定义数据类型
手机流量数据文件如下所示,现在需要写一个MR程序计算每个手机的上行流量总数,下行流量总数及总流量。1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 2001363157995052 13826544101 5C-0原创 2017-03-13 16:49:37 · 1069 阅读 · 0 评论 -
Hadoop中MapTask的并行度的决定机制
在MapReduce程序的运行中,并不是MapTask越多就越好。需要考虑数据量的多少及机器的配置。如果数据量很少,可能任务启动的时间都远远超过数据的处理时间。同样可不是越少越好。那么应该如何切分呢?假如我们有一个300M的文件,它会在HDFS中被切成3块。0-128M,128-256M,256-300M。并被放置到不同的节点上去了。在MapReduce任务中,这3个Block会被分给3个MapTa原创 2017-03-13 17:14:43 · 1184 阅读 · 0 评论 -
MR程序中ReduceTask并行度的控制
接之前的流量汇总程序,可以参考http://blog.csdn.net/mrbcy/article/details/61921268现在有一个新的需求,要把流量统计结果按照手机归属地省份的不同,输出到不同的文件中去。所以,这涉及到ReduceTask并行度的控制。ReduceTask的并行度是手动控制的。可以通过job.setJobReduceTasks(4);来进行设置。假设有6个省,跑6个Red原创 2017-03-13 20:52:59 · 1565 阅读 · 0 评论 -
MapReduce过程详解
在描述具体过程之前,先上一幅大图。MapTask的工作流程Map Task在工作时,使用FileInputFormat组件读取输入文件(默认使用TextInputFormat),把数据变成<key,value>,写新的InputFormat即可处理不同的数据(图片、视频、数据库中的记录等)。一次读一行是TextInputFormat的特性,并不代表就只能这么读。但是无论怎么读,必须返回<key,va原创 2017-03-15 17:19:25 · 404 阅读 · 0 评论 -
YARN的运行机制
YARN是运算资源的调度系统。运算资源包括运行程序的jar包,配置文件,CPU,内存,IO等。使用了linux的资源隔离机制cgroup实现了CPU和内存的隔离。它的运行容器叫做container。每个container中包含了一定的CPU+内存。docker,openstack等虚拟化框架都使用了cgroup。首先,客户端启动后获取一个YARNRunner,它本质上是一个动态代理对象。它负责将任务原创 2017-03-16 22:08:18 · 975 阅读 · 0 评论 -
Map Side Join解决数据倾斜
如果Mapper输出的一些Key特别多,另一些Key特别少就会产生数据倾斜。造成一些Reducer特别忙,一些则比较闲。那么要如何解决这个问题呢?先来考虑一下我们为什么要把数据发给Reducer。因为我们需要把id相同的放在一起才能进行拼接,所以才需要Reducer。如果我们不需要Reducer就能做拼接,就不存在数据倾斜了。为此,我们需要为每一个MapTask准备一个表的全表。这种机制叫做Map原创 2017-03-20 16:32:15 · 563 阅读 · 0 评论 -
MapReduce中实现Join操作
需求订单数据表t_order的数据如下: id date pid amount 1001 20150710 P0001 2 1002 20150710 P0001 2 1002 20150710 P0002 3商品信息表t_product的数据如下: id name categroy_id price P0001原创 2017-03-18 23:06:41 · 518 阅读 · 0 评论 -
MR程序中查看使用System.out.print()输出的内容
由于我们的MR程序一般是运行在集群上的,因此在MR程序中写的System.out.print()的内容是不会打印在屏幕上的,只能去NodeManager的日志中查看。具体的路径如下:$HADOOP_HOME/logs/userlogs/<job_id>/<container_id>/一般会有下面三个文件:-rw-r--r-- 1 root root 1710 3月 11 23:34 stder原创 2017-03-18 21:27:04 · 1714 阅读 · 0 评论 -
Win10-x64编译Hadoop2.7.3
参考资料https://svn.apache.org/repos/asf/hadoop/common/trunk/BUILDING.txt http://note.youdao.com/share/?id=4dfbbc5b4048654026f571c04924f437&type=note#/http://stackoverflow.com/questions/31295963/hadoop-on-原创 2017-02-19 19:08:16 · 6564 阅读 · 8 评论 -
Hdfs shell命令操作
本篇博客介绍Hadoop的HDFS客户端的基本shell命令查看文件列表hadoop fs -ls /上传文件hadoop fs -put /root/GitHubLog.txt /然后再用ls来查看一下文件列表:hadoop fs -ls /输出结果为:Found 1 items-rw-r--r-- 2 root supergroup 23562 2017-02-18 12:53原创 2017-02-18 13:33:11 · 525 阅读 · 0 评论 -
Hdfs Java API初探
这篇博客我们来体验通过Java API来访问HDFS。Windows上配置环境变量解压Hadoop,然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面。替换bin目录要把官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的bin目录。开始时我没做这一步,上传文件成功了原创 2017-02-19 22:45:35 · 488 阅读 · 0 评论 -
HDFS读写数据流程
概述HDFS集群分为两大角色:NameNode、DataNode (Secondary Namenode)NameNode负责管理整个文件系统的元数据DataNode 负责管理用户的文件数据块文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上每一个文件块可以有多个副本,并存放在不同的datanode上Datanode会定期向Namenode汇报自原创 2017-02-20 19:45:27 · 1104 阅读 · 0 评论 -
NameNode管理元数据的机制
NameNode的职责:负责客户端请求的响应和元数据的管理(查询、修改)。这篇博客主要说说NameNode元数据的管理。元数据的存储机制内存保存一份操作日志文件image镜像文件更新流程在内存中更新记录操作日志定期把操作日志和映像(fsimage)进行合并(check point),这项任务非常繁重,交给secondary namenode来做。check point流程check原创 2017-02-20 23:30:16 · 1572 阅读 · 0 评论 -
DataNode掉线判定时限
DataNode职责存储管理用户的文件块数据定期向namenode汇报自身所持有的block信息(通过心跳信息上报) (这点很重要,因为,当集群中发生某些block副本失效时,集群如何恢复block初始副本数量的问题)配置文件如下:<property> <name>dfs.blockreport.intervalMsec</name> <value>3600000</valu原创 2017-02-20 23:31:14 · 1308 阅读 · 0 评论 -
HDFS Java API再探
有时对于MapReduce等框架来说,需要有一套更底层的API来获取某个指定文件中的一部分数据,而不是一整个文件。一方面来说,获取整个文件是对网络的很大压力;另一方面,可能整个文件非常大,客户端也存不下。因此这篇博客再体验一下HDFS的流式API。测试类代码package tech.mrbcy.bigdata.hdfs;import java.io.FileInputStream;import ja原创 2017-02-21 20:14:17 · 398 阅读 · 0 评论 -
使用Hadoop中的RPC框架
Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架,挺有意思的。我们自己来使用一下看看。示例代码已经上传到http://download.csdn.net/detail/mrbcy/9760207服务端业务接口首先定义业务方法的接口:ClientNamenodeProtocolClientNamenodeProtocol.javapackage tech.mrbcy.had原创 2017-02-22 01:11:54 · 655 阅读 · 0 评论 -
Hadoop生态圈介绍
Hadoop是一个分布式框架,底层的rpc也是用的netty。Spark2.0以后也用netty做rpc。推荐Scala的书:《快学Scala》、《Scala编程指南》什么是HadoopHadoop是一套开源的平台中间件Hadoop是服务器集群,在集群上执行我们的代码广义上来说,Hadoop是指一个更广泛的概念——Hadoop生态圈Hadoop的核心组件HDFS分布式文件系统。有效利用各节原创 2017-02-15 14:48:33 · 2275 阅读 · 0 评论 -
MapReduce的核心思想概述
为什么需要MapReduceMapReduce是一个分布式运算程序的编程框架。核心功能是用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序。什么是分布式程序如果一批文本文件有2G大小。假设我们要统计每个单词出现的总次数。我们无法单独的用一台机器处理。我们要写一个程序同时在多个机器上运行。首先第一个问题是如何存放文件?将文件存放到HDFS上去。每个机器只能统计到自己机器上的数据,但是无原创 2017-03-03 13:59:15 · 9008 阅读 · 0 评论 -
Hadoop离线分析在实际项目中的架构
点击流日志数据挖掘概述很多网站(比如电商)都会收集用户的浏览行为,然后进行分析能够实现广告推荐等功能,可以改善网站设计,提高企业利润。数据收集预埋一些js代码,为页面上的一些标签添加绑定事件。当事件发生时可以使用ajax请求到后台。Web服务器的日志中将会记录这些事件信息,从而获得不断增长的日志文件。数据处理流程一般来说离线分析都是这个流程。各流程概述:数据采集:定制开发采集程序,或使用开源框架F原创 2017-02-15 18:24:09 · 3590 阅读 · 0 评论 -
Shell脚本定时采集日志数据到HDFS
在一些web站点上,会在页面上用js来监听一些用户操作事件,然后用ajax请求web服务器上的action来记录用户的行为。Web服务器上会有很多日志文件描述了用户的行为。其他的Web服务器也是分别记录自己的日志文件到磁盘。此时我们需要把这些日志文件汇聚起来,用HDFS进行分析。比如每小时收集一次。一个解决方案是自己写一个后台程序,然后过滤出合法的日志文件(已经滚动完毕的日志文件),然后用HDFS的原创 2017-02-25 21:33:06 · 3005 阅读 · 0 评论 -
如何在Windows中运行MapReduce程序
Windows上配置环境变量解压Hadoop,然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面。替换bin目录要在Windows运行MapReduce,你首先需要编译Windows版的Hadoop的应用程序。然后把官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的原创 2017-03-16 22:42:19 · 2804 阅读 · 0 评论