Hadoop随笔
文章平均质量分 64
zuochanxiaoheshang
这个作者很懒,什么都没留下…
展开
-
Hadoop常用配置总结
NameNode管理界面:http://namenode:50070JobTracker管理界面:http://jobtracker:50030Hadoop守护进程日志存放目录:可以用环境变量${Hadoop_LOG_DIR}进行配置,默认情况下是${HADOOP_HOME}/logs1.配置类型节点的环境变量在配置集群的时候可以在conf/hadoop-env.sh配置...2012-09-20 21:21:25 · 137 阅读 · 0 评论 -
Hadoop fuse_dfs编译与安装
Hadoop fuse_dfs编译与安装Fuse-dfs可以将HDFS文件系统mount到本地,用于执行一些ls等基本的系统操作命令。Fuse-dfs位于$HADOOP_HOME/src/contrib/fuse-dfs目录下,需要用户进行编译。现将其编译步骤总结如下:1.安装autoconf(autoconf-latest.tar.gz)、automake(automake-1.13.4原创 2013-10-16 18:17:36 · 2966 阅读 · 0 评论 -
Hadoop DBOutputFormat的使用
最近在研究数据在HDFS和关系型数据库之间的迁移,主要使用了两种方式:一是,按照数据库要求的文件格式生成文件,然后由数据库提供的导入工具进行导入;二是采用JDBC的方式进行导入。MapReduce默认提供了DBInputFormat和DBOutputFormat,分别用于数据库的读取和数据库的写入。为了使用DBOutputFormat我们需要完成以下工作。首先,对于每一个数据库表编写对应的原创 2013-10-15 21:16:03 · 3189 阅读 · 0 评论 -
HBase的目录结构
根目录文件(Root-level files)第一部分文件是被Hlog处理的write-ahead日志文件,这些日志文件被保存在HBase根目录下的.logs文件夹。.logs目录下面为每一个HRegionServer单独创建一个文件夹,每一个文件夹下有几个HLog文件(因为log rotation)。每一个HRegionServer的所有region都共享一个HLog文件。当一个日志文件原创 2013-10-10 21:44:14 · 3716 阅读 · 0 评论 -
Hadoop自定义Counter
1.通过enum自定义Counterpublic static num LOG_PROCESSOR_COUNTER {BAD_RECORDS};2.在Mapper或者Reducer中操作Countercontext.getCounter(LOG_PROCESSOR_COUNTER.BAD_RECORDS). increment(1);3.在Job完成后可以进行最终统计结原创 2013-09-10 22:22:25 · 1713 阅读 · 0 评论 -
Hadoop SequenceFile
SequenceFile格式:每一个SequenceFile都包含一个“头”(header)。Header包含了以下几部分。1.SEQ三个字母的byte数组2.Version number的byte,目前为数字3的byte3.Key和Value的类名4.压缩相关的信息5.其他用户定义的元数据6.同步标记,sync marker对于每一条记录(K-V),其内部格式根据原创 2013-09-10 22:21:34 · 2075 阅读 · 0 评论 -
用Hadoop AVRO进行大量小文件的处理
使用 使用使用 使用 HDFS 保存大量小文件的缺点:1.Hadoop NameNode 在内存中保存所有文件的“元信息”数据。据统计,每一个文件需要消耗 NameNode600 字节内存。如果需要保存大量的小文件会对NameNode 造成极大的压力。2.如果采用 Hadoop MapReduce 进行小文件的处理,那么 Mapper 的个数就会跟小文件的个数成线性相关(备注:FileIn原创 2013-06-18 19:41:18 · 7949 阅读 · 2 评论 -
Hadoop HPROF 的使用
我们编写的MapReduce程序不一定都是高效的,我们需要确定MapReduce的瓶颈在什么地方。Hadoop框架提供对HPROF的支持,HPROF能够跟踪CPU、堆的使用以及线程的生命周期,对于确定程序的瓶颈能够提供很大的帮助。为了使用HPROF我们需要在JobConf中进行一些设置,具体操作如下:JobConf jobConf = new JobConf(conf); job原创 2013-05-30 19:33:08 · 1733 阅读 · 0 评论 -
Hadoop实现数据库表关联
Hadoop实现数据库表关联主要有两种方式:Map Side Join和Reduce Side Join。本文主要讨论Reduce Side Join的实现与优化。Reduce Side Join是一个完整的MapReduce Job。在Map阶段将来自不同源的原始数据进行区分,对来自不同表的记录构造关联键并将来自不同“表”的记录划分到同一个分组。在Reduce阶段,将来自不同的表记录进行关联。原创 2013-05-29 20:32:55 · 2338 阅读 · 0 评论 -
Hadoop框架排序和分组的理解
MapReduce框架会确保每一个Reducer的输入都是按Key进行排序的。一般,将排序以及Map的输出传输到Reduce的过程称为混洗(shuffle)。每一个Map都包含一个环形的缓存,默认100M,Map首先将输出写到缓存当中。当缓存的内容达到“阈值”时(阈值默认的大小是缓存的80%),一个后台线程负责将结果写到硬盘,这个过程称为“spill”。Spill过程中,Map仍可以向缓存写入结果原创 2013-05-28 18:54:50 · 7224 阅读 · 6 评论 -
RCFileInputFormat的使用方法
在使用RCFileInputFormat时可以设置需要读取的列的序号: /** * Sets read columns' ids(start from zero) for RCFile's Reader. Once a column * is included in the list, RCFile's reader will not skip its value.原创 2013-05-14 19:27:01 · 1153 阅读 · 0 评论 -
Hadoop Reducer个数设置
在默认情况下,一个MapReduce Job如果不设置Reducer的个数,那么Reducer的个数为1。具体,可以通过JobConf.setNumReduceTasks(int numOfReduceTasks)方法来设置Reducer的个数。那么,如何确定Reducer的个数呢,Hadoop documentation 推荐了两个计算公式:0.95 * NUMBER_OF_NOD原创 2013-04-08 19:06:20 · 5048 阅读 · 3 评论 -
Hadoop LZO的安装与配置
Hadoop支持好几种压缩算法,包括:Bzip2GzipDEFLATEHadoop提供这些算法的Java实现,所以可以很方便的通过FileSystem API来进行文件的压缩和解压缩。这些压缩算法都有一个缺陷,那就是文件不能被分片(splittable)。这就意味着采用这些算法进行压缩的文件需要读取整个文件才能将文件解压缩。这对MapReduce会产生致命的原创 2013-10-17 21:33:02 · 5396 阅读 · 1 评论 -
Hadoop 2.2.0 Symlink的使用
Hadoop 2.2.0允许创建软连接并且允许MapReduce程序直接处理这些Symlink。为了允许在集群中创建symlink,需要在配置文件hdfs-site.xml中增加如下的配置项: test.SymlinkEnabledForTesting true 创建symlink有两种方式:一种是FileSyste原创 2013-12-04 17:36:42 · 4284 阅读 · 0 评论 -
Client向HDFS写入数据的过程解析
Client以数据块(Block)为单位进行数据存储。按照我们一般的理解,Client向HDFS写入数据,首先需要向NameNode申请Block;申请Block完成后,申请DataNode(包括备份存储的DataNode);二者完成后,Clent进行与DataNode之间的数据存储。我们知道NameNode之中维护两张非常重要的表,一张是filename→blocks的映射;另外一...2012-09-20 21:19:34 · 391 阅读 · 0 评论 -
Hadoop RPC整个使用流程——以DataNode向NameNode注册为例
在HDFS实现过程中DataNode class中有一个成员变量namenode,其类型是DatanodeProtocol。namenode可以看作是远程NameNode服务器的一个代理,因为NameNode本身也是DatanodeProtocol接口的具体实现;DataNode通过调用namenode对象的方法与远程NameNode进行交互。 下面看一下namenode变量在DataNode当...2012-09-19 22:26:23 · 209 阅读 · 0 评论 -
Kafka在Zookeeper中保存数据的结构
* Consumer id registry */consumers/[group_id]/ids[consumer_id] -> topic1,...topicN每一个group中的每一个consumer都有一个唯一的ID。每一个consumer都将其ID在zookeeper中创建一个ephemeral znode,节点的值是该consumer订阅的所有topic。当consumer断开其与zoo原创 2016-05-23 15:53:37 · 2770 阅读 · 0 评论 -
STROM state persist操作的基本理解
在state存储过程中,STORM对于state对象并没有进行任何操作.Storm框架只是把batch中的每一个tuple按照输出列的要求保存到一个List当中,在Batch处理完成后统一交由StateUpdater函数进行处理。 public void startBatch(ProcessorContext processorContext) { processorConte原创 2016-05-16 14:48:48 · 1544 阅读 · 0 评论 -
STORM StateQuery方法的使用与底层原理
Stream.stateQuery(TridentState state, Fields inputFields, QueryFunction function, Fields functionFields)方法主要是根据输入从持久化存储系统中读取相应的数据并将其当作一个数据流供Strom Topology使用。下面我们看一下stateQuery的具体执行过程:@Override publi原创 2016-05-16 14:48:00 · 1807 阅读 · 0 评论 -
Storm Aggregator原理与底层框架调用
package org.apache.storm.trident.operation;import org.apache.storm.trident.tuple.TridentTuple;public interface Aggregator<T> extends Operation { T init(Object batchId, TridentCollector collector);原创 2016-05-16 14:46:58 · 1236 阅读 · 0 评论 -
Jafka源代码分析——随笔
Kafka是一个分布式的消息中间件,可以粗略的将其划分为三部分:Producer、Broker和Consumer。其中,Producer负责产生消息并负责将消息发送给Kafka;Broker可以简单的理解为Kafka集群中的每一台机器,其负责完成消息队列的主要功能(接收消息、消息的持久化存储、为Consumer提供消息、消息清理.....);Consumer从Broker获取消息并进行后续的操作。原创 2014-06-27 16:03:40 · 1608 阅读 · 0 评论 -
Jafka源代码分析——Processor
Jafka Acceptor接收到客户端请求并建立连接后,Acceptor会将Socket连接交给Processor进行处理。Processor通过以下的处理步骤进行客户端请求的处理:1. 读取客户端请求。2. 根据客户端请求类型的不同,调用相应的处理函数进行处理。Processor读取客户端请求是一个比较有意思的事情,需要考虑两个方面的事情:第一,请求规则(Processor需要按照原创 2014-06-27 16:19:47 · 1379 阅读 · 0 评论 -
Jafka源代码分析——网络架构
在kafka中,每一个broker都是一个服务器。按照一般理解,服务器就是一个SocketServer,其不断接收用户的请求并进行处理。在Java中进行网络连接有两种方式一种为阻塞模式一种为非阻塞模式。Jafka采用非阻塞模式进行网络通讯。在Java的非阻塞模式中,建立socket server的一般流程如下:1.启动ServerSocketChannel并将其绑定到特定的端口。2.将Se原创 2014-06-27 16:14:36 · 1358 阅读 · 0 评论 -
Jafka源代码分析——LogManager
在Kafka中,LogManager负责管理broker上所有的Log(每一个topic-partition为一个Log)。通过阅读源代码可知其具体完成的功能如下:1. 按照预设规则对消息队列进行清理。2. 按照预设规则对消息队列进行持久化(flush操作)。3. 连接ZooKeeper进行broker、topic、partition相关的ZooKeeper操作。4. 管理brok原创 2014-06-27 16:12:54 · 2664 阅读 · 2 评论 -
Hadoop RPC通信协议
Hadoop RPC客户端(Client)向RPC建立连接时向RPC服务器发送两部分内容:RPC Header和Header。RPC Header的格式如下:private void writeRpcHeader(OutputStream outStream) throws IOException { DataOutputStream out = new DataOutputStream原创 2014-04-17 12:12:36 · 2844 阅读 · 0 评论 -
Hadoop控制输出文件命名
Hadoop 控制输出文件命名在一般情况下,Hadoop 每一个 Reducer 产生一个输出文件,文件以part-r-00000、part-r-00001 的方式进行命名。如果需要人为的控制输出文件的命名或者每一个 Reducer 需要写出多个输出文件时,可以采用 MultipleOutputs 类来完成。MultipleOutputs 采用输出记录的键值对(output Key原创 2013-04-07 19:36:35 · 9256 阅读 · 0 评论 -
Hadoop依赖包处理方式
在编写MapReduce程序时,有时需要很多依赖的Jar包,那么如何处理依赖的Jar包呢?方法一:其中最简单的一种方式是,在项目的根目录下创建lib文件夹,将所依赖的所有Jar包都放在该目录下。在将程序进行打包时将lib一并打包。Jar包的具体结构如下图所示:方法二:在执行Hadoop程序,在命令行直接指定(采用-libjars jar1,jar2,.....):had原创 2013-04-07 19:31:38 · 5486 阅读 · 0 评论 -
自定义实现Hadoop Key-Value
自定义实现Value:如果需要自定义一个一个Value类型,那么需要实现Hadoop预定义接口org.apache.hadoop.io.Writable。Writable包含两个重要的方法:readFields和write,主要用于数据的序列化和反序列化。对于Writable的子类的成员变量必须是Java的基本类型或者是其他实现了Writable接口的类型。如果是Java的基本类型则可以使用D原创 2013-03-06 19:33:35 · 4872 阅读 · 0 评论 -
MapReduce作业提交源码分析
MapReduce作业提交源码分析我们在编写MapReduce程序的时候,首先需要编写Map函数和Reduce函数。完成mapper和reducer的编写后,进行Job的配置;Job配置完成后,调用Job.submit()方法完成作业的提交。那我们思考一下,Job最终如何完成作业(job)的提交呢?粗略想一下,Job必然需要通过某种方式连接到JobTracker,因为只有这样才能将job提交到原创 2012-09-24 20:53:55 · 922 阅读 · 0 评论 -
Hive基础知识学习
Hive基础知识学习1.Hive是什么按照我的理解,Hive是一个中间工具。它的主要作用是将HQL(Hive Query Language)转换为一系列的MapReduce Job,利用Hadoop框架对数据进行类SQL处理。他的主要功能是在Hadoop框架上提供一个类SQL中间层,简化在Hadoop框架上实现SQL功能程序的编写。请思考一下,为了实现这个功能,Hive应该具备什么功能原创 2012-09-24 20:51:01 · 947 阅读 · 0 评论 -
ZooKeeper基本理解
ZooKeeper主要是为分布式应用提供协同服务(A Distributed Coordination Service for Deistributed Applications)。我们可以考虑一下,如果让我们完成一个协同服务的设计应该如何完成呢?是不是可以有这么一个思路:可以先设定一个协同服务器,被协同的子节点定期的向该服务器汇报该节点的状态;当其他节点想要查询其他节点的状态时可以向协同服务器去原创 2012-09-24 21:05:49 · 1113 阅读 · 0 评论 -
Hadoop常用配置总结
NameNode管理界面:http://namenode:50070JobTracker管理界面:http://jobtracker:50030Hadoop守护进程日志存放目录:可以用环境变量${Hadoop_LOG_DIR}进行配置,默认情况下是${HADOOP_HOME}/logs1.配置类型节点的环境变量在配置集群的时候可以在conf/hadoop-env.sh配置不同节点的原创 2012-09-24 20:43:21 · 7149 阅读 · 0 评论 -
Hadoop伪分布式集群环境配置
该文档是对自己在虚拟机环境下进行Hadoop集群环境进行配置的总结。首先安装环境是:宿主机:Windows 7 旗舰版虚拟机:VirtualBox 4.2.0虚拟机操作系统:opensuse 12.2Hadoop:1.0.31.虚拟机安装首先进行VirtualBox和opensuse在VirtualBox中的安装,比较简单,不再做详细的介绍。小技巧:在VirtualBo原创 2012-09-24 20:45:21 · 1210 阅读 · 0 评论 -
Hive安装配置
1.Hive安装Hive的安装配置比较简单。首先,确定HDFS和MapReduce已经正确安装并且可以运行。首先,到Apache下载Hive,本次安装使用的Hive版本为hive-0.9.0。下载完成后,将hive解压到你想安装的目录。tar zxf hive-0.9.0.tar.gz解压缩完成后,配置Hive环境变量,在这里是在/etc/profile中实现的。export原创 2012-09-24 20:48:24 · 1065 阅读 · 0 评论 -
Hadoop集群提交作业问题总结
我们知道可以在本地节点向远程集群提交作业。为了实现远程作业的提交:首先,要确保本地机器的用户名需要跟远程集群的用户名一致(在实验环境中,集群的用户名是hadoop,因此要在本地机器上创建一个hadoop用户)。其次,要确保本地机器上的用户对hadoop执行文件和配置文件具备相应的权限(在实验环境中,hadoop用户需要对hadoop安装文件具有执行权限;需要对hadoop配置文件具备读原创 2012-10-11 19:39:58 · 2646 阅读 · 0 评论 -
Hadoop源码分析 HDFS ClientProtocol——addBlock
addBlock()负责分配一个新的block以及该block备份存储的datanode。addBlock函数声明如下:public LocatedBlock addBlock(String src, String clientName,DatanodeInfo[] excludedNodes) 其中src代表需要写入新block的文件;clientName代表写入该block的clien原创 2012-10-10 19:35:22 · 2513 阅读 · 1 评论 -
Hadoop源码分析HDFS Client向HDFS写入数据的过程解析
Client以数据块(Block)为单位进行数据存储。按照我们一般的理解,Client向HDFS写入数据,首先需要向NameNode申请Block;申请Block完成后,申请DataNode(包括备份存储的DataNode);二者完成后,Clent进行与DataNode之间的数据存储。我们知道NameNode之中维护两张非常重要的表,一张是filename→blocks的映射;另外一张是b原创 2012-09-24 21:08:44 · 1345 阅读 · 1 评论 -
Hadoop源码分析HDFS ClientProtocol——getBlockLocations
Class ClientProtocol是HDFS客户端与NameNode之间的接口。Client通过调用ClientProtocol的方法完成与NameNode之间的交互。本文分析方法getBlockLocations。该方法的方法声明如下:public LocatedBlocks getBlockLocations(String src,long offset, long length)t原创 2012-09-27 00:13:09 · 2805 阅读 · 0 评论 -
Hadoop源码分析FSNamesystem几个重要的成员变量
FSNamesystem中有几个非常重要的变量,对于理解NameNode的实现具有重要意义。下面,我们看一下这几个变量和他的作用。lblocksMap:blocksMap是类BlocksMap的实例,其代表了Block→{INode、datanodes}的映射。具体代表了每一个Block在哪一个DataNode上存储。datanodeMap:datanodeMap是类Navigable原创 2012-09-27 00:15:32 · 2797 阅读 · 0 评论 -
Hadoop RPC整个使用流程——以DataNode向NameNode注册为例
Hadoop RPC整个使用流程——以DataNode向NameNode注册为例在HDFS实现过程中DataNode class中有一个成员变量namenode,其类型是DatanodeProtocol。namenode可以看作是远程NameNode服务器的一个代理,因为NameNode本身也是DatanodeProtocol接口的具体实现;DataNode通过调用namenode对象的方法与原创 2012-09-24 20:55:30 · 694 阅读 · 0 评论