2018年6月25日
摘要: 前言 就这样,大数据领域蓬勃发展了好几年,有很多伙伴执迷于技术,成为了分布式计算与存储的领域专家。也有很多伙伴执迷于数据,成为了行业的数据研发专家。当然还有很多小伙伴,热衷于工具系统开发,成为了数据技术专家。那么我们回过头来考虑,什么是大数据,什么又是数据仓库,什么又是数据技术。大数据其实是个非常笼 阅读全文
posted @ 2018-06-25 23:52 松伯 阅读(9795) 评论(0) 推荐(0) 编辑
  2018年2月24日
摘要: 从上一篇对Hive metastore表结构的简要分析中,我再根据数据设计的实体对象,再进行整个代码结构的总结。那么我们先打开metadata的目录,其目录结构: 可以看到,整个hivemeta的目录包含metastore(客户端与服务端调用逻辑)、events(事件目录包含table生命周期中的检 阅读全文
posted @ 2018-02-24 17:06 松伯 阅读(5639) 评论(0) 推荐(1) 编辑
  2018年2月19日
摘要: 今天总结下,Hive metastore的结构设计。什么是metadata呢,对于它的描述,可以理解为数据的数据,主要是描述数据的属性的信息。它是用来支持如存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录。为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数 阅读全文
posted @ 2018-02-19 18:47 松伯 阅读(5687) 评论(0) 推荐(1) 编辑
摘要: 硬盘的物理组成:由许许多多的圆形硬盘盘所组成。宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟。 首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机械手臂上有多个磁头可以进行读取的动作。而当磁头固定不动,硬盘转一圈所画出来的圆就是所谓的磁道(Tra 阅读全文
posted @ 2018-02-19 12:09 松伯 阅读(362) 评论(0) 推荐(0) 编辑
  2018年2月18日
摘要: 最近在看鸟哥的Linux私房菜,我觉得这本书还是很不错的。这里进行相关的总结。 1、Linux目录权限概念 Linux一般讲目录可存取的方式分为三个类别,分别是owner/group/other,且各有read/write/excute等权限。在Linux系统当中,预设的情况下,所有的系统上的账号与 阅读全文
posted @ 2018-02-18 18:44 松伯 阅读(534) 评论(0) 推荐(0) 编辑
  2017年12月18日
摘要: 有人会问,为啥要用这个叫啥Kudu的,Kudu是啥? 就像官网所说,Kudu是一个针对Apache hadoop 平台而开发的列式存储管理器,在本菜鸟看来,它是一种介于hdfs与hbase的一种存储。它的优势在于: 1、OLAP工作的快速处理,也就是针对于查询,很快,很牛逼。 2、针对同时运行顺序和 阅读全文
posted @ 2017-12-18 21:12 松伯 阅读(3864) 评论(0) 推荐(1) 编辑
  2017年9月11日
摘要: 上次写了hive metastore的partition的生命周期,但是简略概括了下alter_partition的操作,这里补一下alter_partition,因为随着项目的深入,发现它涉及的地方较多,比如insert into 时如果路径存在情况下会调用alter_partition,调用in 阅读全文
posted @ 2017-09-11 01:36 松伯 阅读(1232) 评论(0) 推荐(0) 编辑
  2017年8月30日
摘要: 最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展。比如:在create_table的时候同时进行路径校验及创建,如下代码: 所以这是meta无法统一所有元数据的原因么。。其实hive metastore的代码从大的来看,就好 阅读全文
posted @ 2017-08-30 03:09 松伯 阅读(4108) 评论(0) 推荐(1) 编辑
  2017年8月17日
摘要: 不要问我为什么,因为爱,哈哈哈哈。。。进入正题,最近做项目顺带学习了下hive metastore的源码,进行下知识总结。 hive metastore的整体架构如图: 一、组成结构: 如图我们可以看到,hive metastore的组成结构分为 客户端 服务端 ,那么下来我们逐一进行分析: 1、客 阅读全文
posted @ 2017-08-17 02:34 松伯 阅读(3694) 评论(0) 推荐(1) 编辑
  2017年7月3日
摘要: Hadoop的HDFS可以分为NameNode与DataNode,NameNode存储所有DataNode中数据的元数据信息。而DataNode负责存储真正的数据(数据块)信息以及数据块的ID。 NameNode上并不永久保存哪个DataNode上有哪些数据块的信息,而是通过DataNode启动时的 阅读全文
posted @ 2017-07-03 21:40 松伯 阅读(444) 评论(0) 推荐(0) 编辑
  2017年7月2日
摘要: 最近突然觉得, 很多掌握的都还是很浅的原理,需要更深入细粒度去了解整个分布式系统的运转机制。于是。。开始作死而又作死而又作死的源码之旅。 Hadoop包的功能总共有下列几类: tool:提供一些命令行工具,如DistCp,archive mapreduce,:Hadoop的Map/Reduce实现 阅读全文
posted @ 2017-07-02 15:05 松伯 阅读(459) 评论(0) 推荐(0) 编辑
  2017年4月30日
摘要: 最近做一个oracle项目迁移工作,跟着spark架构师学着做,进行一些方法的总结。 1、首先,创建SparkSession对象(老版本为sparkContext) val session = SparkSession.builder().appName("app1").getOrCreate() 阅读全文
posted @ 2017-04-30 16:12 松伯 阅读(790) 评论(1) 推荐(0) 编辑
  2017年3月19日
摘要: 1、数据查询 //提高聚合的性能 SET hive.map.aggr=true; SELECT count(*),avg(salary) FROM employees; //木匾不允许在一个查询语句中使用多于一个的函数(DISTINCT。。。)表达式 SELECT count(DISTINCT sy 阅读全文
posted @ 2017-03-19 16:19 松伯 阅读(556) 评论(0) 推荐(0) 编辑
摘要: 1、创建表 create table if not exists mydb.employees{ name String COMMENT 'Employee name', salary FLOAT COMMENT 'Empolyee salary', subordinates APPAY<STRIN 阅读全文
posted @ 2017-03-19 12:00 松伯 阅读(472) 评论(0) 推荐(0) 编辑
  2017年3月6日
摘要: 应用于:对于不同用户创建的表目录,进行文件的下载,程序中执行hadoop cat命令 下载文件到本地,随后通过ftp传至目标服务器,并将hdfs文件目录的修改时间存入mysql中。每次修改前将mysql中记录的数据,与本批次下载的HDFS文件路径修改时间对比,如果改变,则决定是否下载文件: 入口: 阅读全文
posted @ 2017-03-06 16:32 松伯 阅读(511) 评论(0) 推荐(0) 编辑
  2017年2月12日
摘要: 帮一个朋友写个样例,顺便练手啦~一直在做平台的各种事,但是代码后续还要精进啊。。。 阅读全文
posted @ 2017-02-12 03:38 松伯 阅读(655) 评论(0) 推荐(0) 编辑
  2016年12月29日
摘要: 之前查阅源码啊,性能测试啊调优啊。。基本告一段落,项目也接近尾声,那么整理下spark所有配置参数与优化策略,方便以后开发与配置: Spark安装配置与代码框架 spark-default.conf 配置 spark.executor.instance 参数,向Yarn申请创建的资源池实例数 spa 阅读全文
posted @ 2016-12-29 11:26 松伯 阅读(1991) 评论(0) 推荐(0) 编辑
  2016年12月11日
摘要: 到年底了,想着总结下所有知识点好了~今年应用的知识点还是很多的~ Hadoop生态圈: 1、文件存储当然是选择Hadoop的分布式文件系统HDFS,当然因为硬件的告诉发展,已经出现了内存分布式系统Tachyon,不论是Hadoop的MapReduce,Spark的内存计算、hive的MapReudu 阅读全文
posted @ 2016-12-11 15:54 松伯 阅读(3851) 评论(0) 推荐(0) 编辑
  2016年12月10日
摘要: 要完整去学习spark源码是一件非常不容易的事情,但是咱可以积少成多嘛~那么,Spark Streaming是怎么搞的呢? 本质上,SparkStreaming接收实时输入数据流并将它们按批次划分,然后交给Spark引擎处理生成按照批次划分的结果流: SparkStreaming提供了表示连续数据流 阅读全文
posted @ 2016-12-10 16:45 松伯 阅读(892) 评论(0) 推荐(0) 编辑
  2016年12月9日
摘要: 假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器端一次读取到的字节数是不确定的,所以可能发生四种情况: 1、服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包。 2、服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包。 3、服务端分两次读取到了两个数 阅读全文
posted @ 2016-12-09 00:54 松伯 阅读(594) 评论(0) 推荐(0) 编辑
  2016年12月8日
摘要: spark呢,对Netty API又做了一层封装,那么Netty是什么呢~是个鬼。它基于NIO的服务端客户端框架,具体不再说了,下面开始。 创建了一个线程工厂,生成的线程都给定一个前缀名。 像一般的netty框架一样,创建Netty的EventLoopGroup: 在常用的netty框架中呢,会创建 阅读全文
posted @ 2016-12-08 23:42 松伯 阅读(3008) 评论(0) 推荐(0) 编辑
  2016年12月6日
摘要: 首先,整理NIO进行服务端开发的步骤: (1)创建ServerSocketChannel,配置它为非阻塞模式。 (2)绑定监听,配置TCP参数,backlog的大小。 (3)创建一个独立的I/O线程,用于轮询多路复用器Selector。 (4)创建Selector,将之前创建的ServerSocke 阅读全文
posted @ 2016-12-06 23:42 松伯 阅读(2127) 评论(0) 推荐(0) 编辑
  2016年12月5日
摘要: 自己对着源码敲一遍练习,写上注释。发现NIO编程难度好高啊。。虽然很复杂,但是NIO编程的有点还是很多: 1、客户端发起的连接操作是异步的,可以通过在多路复用器注册OP_CONNECTION等待后续结果,不需要像BIO的客户端一样被同步阻塞。 2、SocketChannel的读写操作都是异步的,如果 阅读全文
posted @ 2016-12-05 23:50 松伯 阅读(1390) 评论(0) 推荐(0) 编辑
  2016年11月27日
摘要: 如何能更好的运用与监控sparkSQL?或许我们改更深层次的了解它深层次的原理是什么。之前总结的已经写了传统数据库与Spark的sql解析之间的差别。那么我们下来直切主题~ 如今的Spark已经支持多种多样的数据源的查询与加载,兼容了Hive,可用JDBC的方式或者ODBC来连接Spark SQL。 阅读全文
posted @ 2016-11-27 14:55 松伯 阅读(5322) 评论(0) 推荐(0) 编辑
摘要: 之前阅读也有总结过Block的RPC服务是通过NettyBlockRpcServer提供打开,即下载Block文件的功能。然后在启动jbo的时候由Driver上的BlockManagerMaster对存在于Executor上的BlockManager统一管理,注册Executor的BlockMana 阅读全文
posted @ 2016-11-27 10:33 松伯 阅读(1671) 评论(0) 推荐(0) 编辑
  2016年11月26日
摘要: 我们又都知道,Spark中任务的处理也要考虑数据的本地性(locality),Spark目前支持PROCESS_LOCAL(本地进程)、NODE_LOCAL(本地节点)、NODE_PREF、RACK_LOCAL(本地机架)、ANY(任何)几种。其他都很好理解,NODE_LOCAL会在spark日志中 阅读全文
posted @ 2016-11-26 04:32 松伯 阅读(758) 评论(0) 推荐(0) 编辑
  2016年11月25日
摘要: shuffle。。。相当重要,为什么咩,因为shuffle的性能优劣直接决定了整个计算引擎的性能和吞吐量。相比于Hadoop的MapReduce,可以看到Spark提供多种计算结果处理方式,对shuffle过程进行了优化。 那么我们从RDD的iterator方法开始: 我们可以看到,它调用了cach 阅读全文
posted @ 2016-11-25 00:43 松伯 阅读(1763) 评论(0) 推荐(0) 编辑
  2016年11月24日
摘要: 源码层面整理下我们常用的操作RDD数据处理与分析的函数,从而能更好的应用于工作中。 连接Hbase,读取hbase的过程,首先代码如下: 我们来一点一点解析整个过程。 1、val configuration = HBaseConfiguration.create() 这个用过hbase的伙伴们都知道 阅读全文
posted @ 2016-11-24 10:22 松伯 阅读(1650) 评论(0) 推荐(0) 编辑
  2016年11月23日
摘要: 我们都知道Spark的每个task运行在不同的服务器节点上,map输出的结果直接存储到map任务所在服务器的存储体系中,reduce任务有可能不在同一台机器上运行,所以需要远程将多个map任务的中间结果fetch过来。那么我们就来学习下shuffleClient。shuffleClient存在于每个 阅读全文
posted @ 2016-11-23 22:18 松伯 阅读(1982) 评论(0) 推荐(0) 编辑
  2016年11月22日
摘要: sparkContext创建还没完呢,紧接着前两天,我们继续探索。。作死。。。 紧接着前几天我们继续SparkContext的创建: 接下来从这里我们可以看到,spark开始加载hadoop的配置信息,第二张图中 new出来的Configuration正是hadoop的Configuration。同 阅读全文
posted @ 2016-11-22 21:58 松伯 阅读(688) 评论(0) 推荐(0) 编辑
  2016年11月21日
摘要: 额,没忍住,想完全了解sparksql,毕竟一直在用嘛,想一次性搞清楚它,所以今天再多看点好了~ 曾几何时,有一个叫做shark的东西,它改了hive的源码。。。突然有一天,spark Sql突然出现,如下图: = =好了,不逗了,言归正传。。。那么一条sql传统数据库会是怎么解析的呢? 传统数据库 阅读全文
posted @ 2016-11-21 23:34 松伯 阅读(907) 评论(0) 推荐(0) 编辑
摘要: 紧接着昨天,我们继续开搞了啊。。 1、下面,开始创建BroadcastManager,就是传说中的广播变量管理器。BroadcastManager用于将配置信息和序列化后的RDD、Job以及ShuffleDependency等信息在本地存储。紧接着blockManager的创建后创建。如下: 随之我 阅读全文
posted @ 2016-11-21 21:54 松伯 阅读(694) 评论(0) 推荐(0) 编辑
  2016年11月20日
摘要: 即日起开始spark源码阅读之旅,这个过程是相当痛苦的,也许有大量的看不懂,但是每天一个方法,一点点看,相信总归会有极大地提高的。那么下面开始: 创建sparkConf对象,那么究竟它干了什么了类,从代码层面,我们可以看到我们需要setMaster啊,setAppName啊,set blabla啊。 阅读全文
posted @ 2016-11-20 16:38 松伯 阅读(4274) 评论(2) 推荐(1) 编辑
摘要: 平时用于从生产环境hbase到导出数据到测试环境。 导入数据: 导出数据: 阅读全文
posted @ 2016-11-20 15:04 松伯 阅读(1606) 评论(0) 推荐(0) 编辑
  2016年11月18日
摘要: 环境极其恶劣情况下: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, Row, SQLContext} import org.ap 阅读全文
posted @ 2016-11-18 00:21 松伯 阅读(21836) 评论(0) 推荐(0) 编辑
  2016年11月14日
摘要: 1、代码中尽量避免group by函数,如果需要数据聚合,group形式的为rdd.map(x=>(x.chatAt(0),x)).groupbyKey().mapValues((x=>x.toSet.size)).collection() 改为 rdd.map(x=>(x.chatAt(0),x) 阅读全文
posted @ 2016-11-14 01:16 松伯 阅读(2377) 评论(0) 推荐(0) 编辑
  2016年11月13日
摘要: 有许多场景下,我们需要进行跨服务器的数据整合,比如两个表之间,通过Id进行join操作,你必须确保所有具有相同id的数据整合到相同的块文件中。那么我们先说一下mapreduce的shuffle过程。 Mapreduce的shuffle的计算过程是在executor中划分mapper与reducer。 阅读全文
posted @ 2016-11-13 14:05 松伯 阅读(7846) 评论(0) 推荐(0) 编辑
摘要: Spark 内部管理机制 Spark的内存管理自从1.6开始改变。老的内存管理实现自自staticMemoryManager类,然而现在它被称之为”legacy”. “Legacy” 默认已经被废弃掉了,它意味着相同的代码在1.5版本与1.6版本的输出结果将会不同。需要注意的是,出于兼容性的考虑,你 阅读全文
posted @ 2016-11-13 10:29 松伯 阅读(1686) 评论(0) 推荐(0) 编辑
  2016年10月6日
摘要: #kafka数据的存放地址,多个地址的话用逗号分 log.dirs=/tmp/kafka-logs #broker server服务端口 port=9092 #这个参数会在日志segment没有达到log.segment.bytes设置的大小,也会强制新建一个segment会被 topic创建时的指 阅读全文
posted @ 2016-10-06 01:17 松伯 阅读(697) 评论(0) 推荐(0) 编辑
  2016年10月5日
摘要: ZooKeeper是以Fast Paxos算法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos作了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer, 阅读全文
posted @ 2016-10-05 20:11 松伯 阅读(3444) 评论(0) 推荐(1) 编辑