Hadoop Yarn上的调度器 1. 引言Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。上图是Yarn的基本架构,其中 ResourceManager 是整个架构的核心组件,负责集群上的资源管理,包括内存、CPU以及集群上的其他资; ApplicationMaster 负责在生命周期内的应用程序调度; NodeManager 负责本节点上资源的供给和隔离;Con...
Spark内部原理之运行原理一 原文来源于:Spark内部原理之运行原理一在大数据领域,只有深挖数据科学领域,走在学术前沿,才能在底层算法和模型方面走在前面,从而占据领先地位。Spark的这种学术基因,使得它从一开始就在大数据领域建立了一定优势。无论是性能,还是方案的统一性,对比传统的 Hadoop,优势都非常明显。Spark 提供的基于 RDD 的一体化解决方案,将 MapReduce、Streaming、SQL、Machin...
Flink1.4 用于外部数据访问的异步IO 原文来源:Flink1.4 用于外部数据访问的异步IO1. 异步IO操作的必要性当与外部系统交互时(例如,使用存储在数据库中数据丰富流事件),需要注意与外部系统的通信延迟并不决定流应用程序的整体工作。访问外部数据库中的数据(例如在 MapFunction 中)通常意味着同步交互:将请求发送到数据库,MapFunction 会等待直到收到响应。在许多情况下,这个等待时间占了该函数绝大部分时间。与外部...
Stream 分布式数据流的轻量级异步快照 原文来源:Stream 分布式数据流的轻量级异步快照1. 概述分布式有状态流处理支持在云中部署和执行大规模连续计算,主要针对低延迟和高吞吐量。这种模式的一个最根本的挑战就是在可能的失败情况下提供处理保证。现有方法依赖于可用于故障恢复的周期性全局状态快照。这些方法有两个主要缺点。首先,他们经常拖延影响数据摄取的整体计算过程。其次,持久化存储所有传输中的记录以及算子状态,这会导致比所需的快照要更大。因...
Flink1.4 窗口触发器与Evictors 原文来源于:Flink1.4 窗口触发器与Evictors1. 窗口触发器触发器(Trigger)决定了窗口(请参阅窗口概述)博文)什么时候准备好被窗口函数处理。每个窗口分配器都带有一个默认的 Trigger。如果默认触发器不能满足你的要求,可以使用 trigger(...) 指定自定义的触发器。触发器接口有五个方法来对不同的事件做出响应:public abstract TriggerResult...
Flink1.4 HDFS Connector 原文来源于:Flink1.4 HDFS Connector此连接器提供一个 Sink,将分区文件写入 Hadoop FileSystem 支持的任何文件系统。要使用此连接器,添加以下依赖项:<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-...
Hadoop Trash回收站使用指南 我们在删除一个文件时,遇到如下问题,提示我们不能删除文件放回回收站:sudo -uxiaosi hadoop fs -rm -r tmp/data_group/test/employee/employee_salary.txt17/12/06 16:34:48 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion in
[算法系列]算法一 地理空间距离计算优化 1. 地理空间距离计算面临的挑战打开美团app,不管是筛选团购还是筛选商家,默认的排序项都是“离我最近”或者“智能排序”(如下图所示):不管是“离我最近”还是“智能排序”,都涉及到计算用户位置与各个团购单子或者商家的距离(注:在智能排序中距离作为一个重要的参数参与排序打分)。以筛选商家为例,北京地区有5~6w个POI(本文将商家称之为POI),当用户进入商家页,请求北京全城+所有品类+离我最近/智
[Flink]Flink1.3 Stream指南八 图解事件时间与Watermarks 如果你正在构建实时流处理应用程序,那么事件时间处理是你迟早必须使用的功能之一。因为在现实世界的大多数用例中,消息到达都是无序的,应该有一些方法,通过你建立的系统知道消息可能延迟到达,并且有相应的处理方案。在这篇博文中,我们将看到为什么我们需要事件时间处理,以及我们如何在ApacheFlink中使用它。EventTime是事件在现实世界中发生的时间,ProcessingTime是Flink系统处理该
[Flink]Flink1.3 Stream指南七 理解事件时间与Watermarks Flink实现了数据流模型(Dataflow Model)中许多技术。如果想对事件时间(event time)和水位线(watermarks)更详细的了解,请参阅下面的文章:The world beyond batch: Streaming 101The Dataflow Model支持事件时间的流处理器需要一种方法来衡量事件时间的进度。例如,一个构建按小时处理窗口的窗口算子,当事件时间超过一小时
[Flink]Flink1.3 Stream指南六 事件时间与处理时间 Flink在数据流中支持几种不同概念的时间。1. 处理时间 Processing TimeProcessing Time(处理时间)是指执行相应操作机器的系统时间(Processing time refers to the system time of the machine that is executing the respective operation.)。当一个流程序以处理时间来运行时,
[Flink]Flink1.3 Stream指南五 窗口触发器与驱逐器 1. 窗口触发器触发器(Trigger)确定窗口(由窗口分配器形成)何时准备好被窗口函数处理。每个窗口分配器都带有默认触发器。如果默认触发器不满足你的要求,可以使用trigger(...)指定自定义触发器。触发器接口有五种方法允许触发器对不同的事件做出反应:public abstract TriggerResult onElement(T element, long timestamp, W wi
[Flink]Flink1.3 Stream指南四 窗口函数 1.4版本:Flink1.4 窗口函数在定义窗口分配器之后,我们需要在每个窗口上指定我们要执行的计算。这是窗口函数的责任,一旦系统确定窗口准备好处理数据,窗口函数就处理每个窗口中的元素。窗口函数可以是ReduceFunction,FoldFunction或WindowFunction其中之一。前两个函数执行更有效率,因为Flink可以在每个窗口中元素到达时增量地聚合。WindowFunction将...
[Flink]Flink1.3 Batch指南二 集群运行 Flink程序可以分布在许多机器的群集上。有两种方式可以将程序发送到集群上运行: (1) 命令行接口 (2) 远程环境1. 命令行接口命令行接口允许你将打包程序(JAR)提交到集群(或单机配置)。详细请参阅[Flink]Flink1.3 指南四 命令行接口。2. 远程环境远程环境允许你直接在集群上运行Flink Java程序。远程环境指的是你要在上面运行程序的集群。2.1 Maven依赖使用下面依
[Flink]Flink1.3 Stream指南三 窗口分配器 1.4版本:Flink1.4 窗口概述Windows(窗口)是处理无限数据流的核心。Windows将流分解成有限大小的"桶",在上面我们可以进行计算。本文档重点介绍如何在Flink中处理窗口,以及如何从它提供的功能中获得最大的收益。窗口Flink程序的一般结构如下。第一个片段指的是指定key的数据流,而第二个到未指定key的数据流。可以看出,唯一的区别是指定key的数据流调用keyBy()以及wi...
[Flink]Flink1.3 指南五 指定keys 一些转换(例如,join,coGroup,keyBy,groupBy)要求在一组元素上定义一个key。其他转换(Reduce,GroupReduce,Aggregate,Windows)允许在使用这些函数之前对数据进行分组。一个DataSet进行分组如下:DataSet input = // [...]DataSet reduced = input.groupBy(/*define key he
[Flink]Flink1.3 指南四 命令行接口 Flink提供了一个命令行接口(CLI)用来运行打成JAR包的程序,并且可以控制程序的运行。命令行接口在Flink安装完之后即可拥有,本地单节点或是分布式的部署安装都会有命令行接口。命令行接口启动脚本是 $FLINK_HOME/bin目录下的flink脚本, 默认情况下会连接运行中的Flink master(JobManager),JobManager的启动脚本与CLI在同一安装目录下。使用命...
[Flink]Flink1.3 Batch指南一 本地运行 Flink可以在单台机器上运行,甚至可以在单个Java虚拟机中运行。 这运行机制可以方便用户在本地测试和调试Flink程序。本节概述了Flink的本地执行机制。本地环境和执行器(executors)允许你可以在本地Java虚拟机上运行Flink程序,或者是在正在运行程序的Java虚拟机上(with within any JVM as part of existing programs)。对于大部分
[Flink]Flink1.3 指南二 安装与启动 1. 下载Flink 可以运行在 Linux, Mac OS X和Windows上。为了运行Flink, 唯一的要求是必须在Java 7.x (或者更高版本)上安装。Windows 用户, 请查看 Flink在Windows上的安装指南。你可以使用以下命令检查Java当前运行的版本:java -version如果你安装的是Java 8,输出结果类似于如下:java version "1.8.0_
[Hive]Hive使用指南七 空值与NULL 1. NULL(null)值创建一个临时表tmp_null_empty_test,并插入一些NULL数据:CREATE TABLE IF NOT EXISTS tmp_null_empty_test( uid string)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'LINES TERMINATED BY ''STORED AS T
[ElasticSearch]ElasticSearch,Kibana安装与启动 1. 检查JDK版本使用如下命令检验JDK版本:xiaosi@Qunar:~$ java -versionjava version "1.7.0_40"Java(TM) SE Runtime Environment (build 1.7.0_40-b43)Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)xiaosi
[Maven]maven-shade-plugin使用指南 1. Selecting Contents for Uber JAR下面的POM代码段显示了如何控制在uber JAR中应该包含/排除哪些项目依赖关系:project> ... build> plugins> plugin> groupId>org.apache.maven.pluginsgroupId> artifactId>maven
[Scala]Scala学习笔记十 模式匹配 Scala有一个十分强大的模式匹配机制.可以应用在很多场合:switch语句,类型检查等等.此外Scala还提供了样例类,对模式匹配进行了优化.1. 更好的switch如下是Scala中C风格switch语句的等效代码:var sign = 2val ch = '+'ch match { case '+' => sign = 1 case '-' => sign = -1 case
[Scala]Scala学习笔记九 提取器 1. apply和update方法Scala允许你使用如下函数调用语法:f(arg1, arg2, ...)扩展到可以应用于函数之外的值.如果f不是函数或方法,那么这个表达式就等同于调用:f.apply(arg1, arg2, ...)如果它出现在赋值语句的等号左侧:f(arg1, arg2, ...) = value则等同于调用:f.update(arg1, arg2, ..., valu
[Guava]Throwables:简化异常和错误的传播与检查 1. 异常传播有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在 Error 或 RuntimeException 被捕获的时候,你没想捕获它们,但是声明捕获 Throwable 和 Exception 的时候,也包括了了 Error 或 RuntimeException。Guava 提供了若干方法,来判断异常类型并且重新传播异常。例如:try { someMethodThatCou
[Scala]Scala学习笔记八 高阶函数 Scala混合了面向对象和函数式的特性.在函数式编程语言中,函数可以像任何其他数据类型一样被传递和操作.如果想要给算法传入明细动作时,只需要将明细动作包在函数当中作为参数传入即可.1. 作为值的函数在Scala中,函数就和数字一样,可以在变量中存放:import scala.math._val num = 3.14val fun = ceil _println(num) // 3.14p
[Scala]Scala学习笔记七 正则表达式 1. Regex对象我们可以使用scala.util.matching.Regex类使用正则表达式.要构造一个Regex对象,使用String类的r方法即可:val numPattern = "[0-9]+".r如果正则表达式包含反斜杠或引号的话,那么最好使用"原始"字符串语法"""...""":val positiveNumPattern = """^[1-9]\d*$"""如果在Java中
[AirFlow]AirFlow使用指南四 DAG Operator Task 1. DAG在Airflow中,DAG或有向无环图是你运行所有任务的集合,以某种组织方式来反映所有任务之间的关系和依赖。例如,一个简单的DAG可以包括三个任务:A,B和C.可以说A必须在B运行之前成功运行,但C可以随时运行。 可以说任务A在5分钟后超时,为防止失败,B可以最多重启5次。也可以说工作流从某个特定日期开始每晚10点运行。以这种方式,DAG描述了你如何执行工作流程; 但是请注意,我们还没
[AirFlow]AirFlow使用指南三 第一个DAG示例 经过前两篇文章的简单介绍之后,我们安装了自己的AirFlow以及简单了解了DAG的定义文件.现在我们要实现自己的一个DAG.1. 启动Web服务器使用如下命令启用:airflow webserver现在可以通过将浏览器导航到启动Airflow的主机上的8080端口来访问Airflow UI,例如:http://localhost:8080/admin/备注Airfl...
[AirFlow]AirFlow使用指南二 DAG定义文件 1. Example"""Code that goes along with the Airflow tutorial located at:https://github.com/airbnb/airflow/blob/master/airflow/example_dags/tutorial.py"""from airflow import DAGfrom airflow.operato
[AirFlow]AirFlow使用指南一 安装与启动 1. 安装通过pip安装:xiaosi@yoona:~$ pip install airflow如果速度比较慢,可以使用下面提供的源进行安装:xiaosi@yoona:~$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple airflow如果出现下面提示,表示你的airflow安装成功了:Successfully installed
[Shell]bash的良好编码实践 最好的bash脚本不仅可以工作,而且以易于理解和修改的方式编写。很多好的编码实践都是来自使用一致的变量名称和一致的编码风格。验证用户提供的参数是否正确,并检查命令是否能成功运行,以及长时间运行是否能保持可用性。下面分享一下我的工作技巧。1. 使用良好的缩进使用良好的缩进能使代码可读性更好,从而能更好的维护。当你有三级以上的逻辑时,缩进能使我们轻松的查看脚本的整体逻辑。使用多少个空格缩进并不重要,尽
[Scala]Scala学习笔记六 文件 1. 读取行读取文件,可以使用scala.io.Source对象的fromFile方法.如果读取所有行可以使用getLines方法:val source = Source.fromFile("/home/xiaosi/exception.txt", "UTF-8")val lineIterator = source.getLines()for(line println(line)}s
[Scala]Scala学习笔记五 Object 1. 单例对象Scala没有静态方法或静态字段,可以使用object来达到这个目的,对象定义了某个类的单个实例:object Account{ private var lastNumber = 0 def newUniqueNumber () = {lastNumber += 1; lastNumber}}当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueN
[Scala]Scala学习笔记四 类 1. 简单类与无参方法class Person { var age = 0 // 必须初始化字段 def getAge() = age // 方法默认为公有的}备注在Scala中,类并不声明为public. Scala源文件可以包含多个类,所有这些类都具有公有可见性.属性不声明默认为public.使用类:val p = new Person // 或者new Person()p.ag
[Scala]Scala学习笔记三 Map与Tuple 1. 构造映射可以使用如下命令构造一个映射:scala> val scores = Map("Alice" -> 90, "Kim" -> 89, "Bob"-> 98)scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 90, Kim -> 89, Bob -> 98)上面构造了一个不可变的Map[String,
[Git]Git指南一 查看创建删除标签 1. 查看标签列出现有标签,使用如下命令:xiaosi@yoona:~/code/learningnotes$ git tagr-000000-000000-cm.cmv1.0.0v1.0.1我们可以用特定的搜索模式列出符合条件的标签。如果只对1.0系列的版本感兴趣,可以运行如下命令:xiaosi@yoona:~/code/learningnotes$ git tag -l 'v1.0.
[Scala]Scala学习笔记二 数组 1. 定长数组如果你需要一个长度不变的数组,可以使用Scala中的Array.val nums = new Array[Int](10) // 10个整数的数组 所有元素初始化为0val strs = new Array[String](10) // 10个字符串的数组 所有元素初始化为nullval s = Array("Hello", "World") // 长度为2的Array[Stri
[Scala]Scala学习笔记一 基础 1. 变量val定义的值实际上是一个常亮,无法改变其内容scala> val num = 0num: Int = 0scala> num = 2:12: error: reassignment to val num = 2 ^如果要声明其值可变的变量,可以使用varscala> var number = 0number: Int = 0sca
[Hive]HiveServer2配置 HiveServer2(HS2)是一个服务器接口,能使远程客户端执行Hive查询,并且可以检索结果。HiveServer2是HiveServer1的改进版,HiveServer1已经被废弃。HiveServer2可以支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。这篇文章将介绍如何配置服务器端。如何使用客户端与此服务器端交互将在下篇文章中介绍。备注Hive
[Hive]HiveServer2概述 1. HiveServer1HiveServer是一种可选服务,允许远程客户端可以使用各种编程语言向Hive提交请求并检索结果。HiveServer是建立在Apache ThriftTM(http://thrift.apache.org/) 之上的,因此有时会被称为Thrift Server,这可能会导致混乱,因为新服务HiveServer2也是建立在Thrift之上的.自从引入HiveServe
[Mvel]Mvel2.0使用指南一 基础 MVEL在很大程度上受到Java语法的启发,作为一个表达式语言,也有一些根本的区别,旨在更高的效率,例如:直接支持集合、数组和字符串匹配等操作以及正则表达式。 MVEL用于执行使用Java语法编写的表达式。除了表达语言之外,MVEL还可用作配置和字符串构造的模板语言。MVEL2.x表达式包含以下部分的内容:属性表达式布尔表达式方法调用变量赋值函数定义1. 基本语法MVEL 是一种基于Java语法,
[Redis]Redis指南二 配置 我们可以通过redis-server的启动参数port设置了Redis的端口号,除此之外Redis还支持其他配置选项,如是否开启持久化,日志级别等.由于可以配置的选项较多,通过启动参数设置这些选项并不方便,所以Redis支持通过配置文件来设置这些选项.启动配置文件的方法在启动时将配置文件的路径作为启动参数传递给redis-server:redis-server /path/to/redis.con
[Spark]Shark, Spark SQL, Hive on Spark以及SQL On Spark的未来 随着Spark SQ的引入以及Hive On Apache Spark的新功能(HIVE-7292)的引入,我们对这两个项目的立场以及它们与Shark的关系有了很多的关注。在今天的Spark Summit上,我们宣布我们正在停止Shark的开发,并将资源全部集中在Spark SQL上,这将为现有Shark用户提供一个Shark特色的圈子(will provide a superset of Sha
[Spark]Spark RDD 指南五 持久化 1. 概述Spark中最重要的功能之一是操作时在内存中持久化(缓存)数据集(persisting (or caching) a dataset in memory across operations)。当我们让Spark持久化存储一个RDD时,每个节点都会将其计算的任何分区存储在内存中,并将其重用于该数据集(或从其派生的数据集)的其他行动操作(each node stores any partit
[Shell]tr命令使用指南 1. 用途tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。2. 语法tr [OPTION]... SET1 [SET2]3. 参数3.1 -s 压缩重复字符-s: squeeze-repeats,用SET1指定的字符来替换对应的重复字符 (replace each input sequence of a repeated character that
[Shell]test命令使用指南 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。1. 数值参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真-lt小于则为真-le小于等于则为真Example:num1=100num2=100if test $[num1] -eq $[num2]then echo '两个数相等'else echo
[Shell]特殊变量$0$#$*$@$?和命令行参数 1. 参数变量特殊变量列表变量含义$0当前脚本的文件名$n传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。$#传递给脚本或函数的参数个数。$*传递给脚本或函数的所有参数。$@传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。$?上个命令的退出状态,或函数的返回值。$$当前Shell进程ID。对于 Shell 脚
[Spark]Spark RDD 指南四 RDD操作 Spark2.3.0版本: Spark2.3.0 RDD操作RDD支持两种类型的操作:转移(transformations):从现有数据集创建一个新数据集动作(actions):在数据集上进行计算后将值返回给驱动程序例如,map是一个转移操作,传递给每个数据集元素一个函数并返回一个新RDD表示返回结果。 另一方面,reduce是一个动作操作,使用一些函数聚合RDD的所有元素并将最终结果返回给驱动...
[Spark]Spark RDD 指南三 弹性分布式数据集(RDD) Spark2.3.0 版本: Spark2.3.0 创建RDDSpark的核心概念是弹性分布式数据集(RDD),RDD是一个可容错、可并行操作的分布式元素集合。有两种方法可以创建RDD对象:在驱动程序中并行化操作集合对象来创建RDD从外部存储系统中引用数据集(如:共享文件系统、HDFS、HBase或者其他Hadoop支持的数据源)。1. 并行化集合通过在驱动程序中的现有集合上调用JavaSpark...
[Spark]Spark RDD 指南二 初始化 1. 初始化Spark程序必须做的第一件事是创建一个JavaSparkContext对象(Scala和Python中是SparkContext对象),它告诉Spark如何访问集群。 要创建SparkContext,您首先需要构建一个包含有关应用程序信息的SparkConf对象。Java版本:private static String appName = "JavaWordCountDemo";p
[Spark]Spark RDD 指南一 引入Spark 2.3.0版本:Spark2.3.0 引入Spark1. Java版Spark 2.1.1适用于Java 7及更高版本。 如果您使用的是Java 8,则Spark支持使用lambda表达式来简洁地编写函数,否则可以使用org.apache.spark.api.java.function包中的类。请注意,从Spark 2.0.0开始,不支持Java 7,并且可能会在Spark 2.2.0中删除(No...
[Spark]那些年我们遇到的Spark的坑 1. java.lang.NoClassDefFoundError: org/apache/spark/Logging1.1 问题Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging at java.lang.ClassLoader.defineClass1(Native Me
[Hadoop]Hadoop本地调试 1. Maven依赖dependency> groupId>org.apache.hadoopgroupId> artifactId>hadoop-clientartifactId> version>2.7.2version>dependency>dependency> groupId>junitgroupId> artifactId>junitart
[Zeppelin]设置访问登录权限 1. 概述我们在浏览器中输入 http://localhost:8080/ 进入Zeppelin的主页,不需要用任何的验证就可以进入主页面:换句话说,任何人在浏览器输入上面地址(本机),都可以访问Zeppelin里的所有笔记. 在上图中我们也可以看到我们的登陆用户是anonymous.2. 修改匿名访问Zeppelin启动默认是匿名(anonymous)模式登录的.如果设置访问登录权限,需要设置c
[Zeppelin]Zeppelin安装与初体验 1.安装1.1 下载点击进入下载页面备注下载页面会提供两种二进制包:zeppelin-0.7.1-bin-netinst.tgz 默认只会提供Spark的Interpreterzeppelin-0.7.1-bin-all.tgz 会提供各种各样的Interpreter(MySQL,ElasticSearch等等)所以说要根据你的使用场景具体选择哪种二进制包.1.2 解压缩xiaosi@yoona:
[Redis]Redis指南一 安装与启动 在安装Redis前需要了解Redis的版本规则以选择最合适自己的版本,Redis约定次版本(即第一个小数点后的数字)为偶数的版本是稳定版本(如 2.4版本,2.6版本),奇数版本是非稳定版本(如2.5版本,2.7版本),推荐使用稳定版本进行开发和在生产环境中使用.1. 下载当前最新版本为3.2.9:官网下载:https://redis.io/中文官网下载:http://www.redis.cn/d
[Redis]Redis指南一 数据类型 1. 字符串1.1 SET与GETSET key valueGET keyRedis中的字符串是一个字节序列。Redis中的字符串是二进制安全的,这意味着它们的长度不由任何特殊的终止字符决定。因此,可以在一个字符串中存储高达512兆字节的任何内容。127.0.0.1:6379> SET USER "yoona"OK127.0.0.1:6379> GET USER"yoona"1.2 INC
[ElasticSearch2.x]原理之分布式搜索 这个要比基本的创建-读取-更新-删除(CRUD)请求要难一些。CRUD操作是处理的单个文档。这就意味着我们明确的知道集群中的哪个分片存储我们想要的文档。一个 CRUD 操作只对单个文档进行处理,文档有唯一的组合,由 _index, _type, 和 路由值 (默认是该文档的 _id )组成。 这表示我们确切的知道此文档在集群中哪个分片中。搜索请求是更复杂的执行模型,因为我们不知道哪些文档会与查询匹
[ElasticSearch]嵌套对象之嵌套类型 nested类型是一种特殊的对象object数据类型(specialised version of the object datatype ),允许对象数组彼此独立地进行索引和查询。1. 对象数组如何扁平化内部对象object字段的数组不能像我们所期望的那样工作。 Lucene没有内部对象的概念,所以Elasticsearch将对象层次结构扁平化为一个字段名称和值的简单列表。 例如,以下文件:cu
[ElasticSearch2.x]嵌套对象 考虑到在Elasticsearch中创建,删除和更新的单个文档是原子操作的,因此在相同文档中存储紧密相关的实体是有意义的。 例如,我们可以在一个文档中存储一个订单和其所有的订单线(order lines),或者我们可以通过传递一组评论来将一篇博客文章及其所有评论存储在一起:PUT /my_index/blogpost/1{ "title": "Nest eggs", "body": "
[ElasticSearch]分析之Analysis(分析) 分析(analysis)是将文本(如任何电子邮件的正文)转换为添加到倒排索引中进行搜索的tokens或terms的过程。 分析由分析器analyzer执行,分析器可以是内置分析器或者每个索引定制的自定义分析器。1. 索引时分析(Index time analysis)例如在索引时,内置的英文分析器将会转换下面句子:"The QUICK brown foxes jumped over the laz
[ElasticSearch]Search之分页 之前的文章[ElasticSearch]搜索我们知道,我们的空搜索匹配到集群中的13个文档。 但是,命中数组中只有10个文档(文章只显示了2条数据,故意省略掉)。 我们如何查看其他文档呢?与SQL使用LIMIT关键字返回一个“页面”的结果数据相同,Elasticsearch接受from和size参数:size 表示应返回的结果数,默认为10from 表示应跳过的初始结果数,默认为0如果想每页显示五
[ElasticSearch]搜索 1. 空搜索测试数据:https://gist.github.com/clintongormley/85792811.1 搜索最基本的搜索API是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档:curl -XGET 'localhost:9200/_search?pretty'Java版本:SearchRequestBuilder searchReques
[ElasticSearch2.x]Filter之Cache 过滤器(Filter)的核心实际是采用一个bitset记录与过滤器匹配的文档。当Elasticsearch确定一个bitset可能会在将来被重用时,它将被直接缓存在内存中供以后使用。一旦缓存,这些bitset可以在使用相同查询的任何地方重复使用,而无需再次重新评估整个查询。这些缓存的bitset是非常“机智”的:它们是增量更新的。 在索引新文档时,只需要将那些新文档添加到现有的bitset中,而不
[ElasticSearch2.x]Filter之Filter原理 1. FilterBuilders废弃org.elasticsearch.index.queries.FilterBuilders从ElasticSearch2.0开始已被删除,作为查询和过滤器组合的一部分。 这些过滤器现在可以在QueryBuilders中使用具有相同名称的方法。所有可以接受FilterBuilder的方法现在也可以接受QueryBuilder。以前使用方式:FilterBuil
[ElasticSearch2.x]Queries vs Filters 1. 查询与过滤Elasticsearch 使用的查询语言(DSL) 拥有一套查询组件(queries),这些组件可以以无限组合的方式进行搭配(mixed and matched)。这套组件可以在以下两种上下文中使用:过滤上下文(filtering context)和查询上下文(query context)。当在过滤上下文(filtering context)中使用 时,该查询被设置成一个“不评分
[ElasticSearch2.x]副本分片 1. 副本分片到目前为止,我们只讨论了主分片,但是我们还有另一个工具:副本分片。 副本分片的主要目的是为了故障转移(failover),如深入集群生命周期所述:如果持有主分片的节点死亡,则将其副本提升为主分片的角色。在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。但是,副本分片可以为读取请求提供帮助。 如果通常情况
[Guava源码日报](11)BiMap BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构。通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果我们想根据value值查找key时,我们就需要额外编写一些代码来实现这个功能。BiMap为我们实现了这个功能。@Test public void test1(){ BiMap weekNameMap = Ha
[Guava源码日报](10)Iterables 1. 简介Iterables类包含了一系列的静态方法,来操作或返回Iterable对象。除非另外说明,每一个Iterables方法都会有一个Iterators的方法。2. 源码分析2.1 构造器Iterables类只提供了私有构造器,因此只能通过静态方法来使用Iterables类。public final class Iterables { private Iterables() {}2.2
[Guava源码日报](9)Closeables 它的作用是收集可以关闭的资源并在合适的时候关闭它们。如下使用:Closer closer = Closer.create();try { InputStream in = closer.register(openInputStream()); OutputStream out = closer.register(openOutputStream()); // do stu
[Guava源码日报](8)ImmutableCollection 不可变集合,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。1. UnmodifiableXXXJDK提供了UnmodifiableXXX(Collections.unmodifiable)用于生成不可变容器。不可变容器无法修改返回容器的内容。但是这里值的是无法通过set或add方法修改容器内的reference的指向,而不是禁止reference
[Guava源码日报](7)Throwables分析 有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在Error或RuntimeException被捕获的时候,你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException。Guava提供了若干方法,来判断异常类型并且重新传播异常。例如:try { someMethodThatCouldThrowAnything();
[Guava源码分析](6)Objects分析 1. 私有构造器private Objects() {}2. 判断两个可能为null的对象是否相等public static boolean equal(@Nullable Object a, @Nullable Object b) { return a == b || (a != null && a.equals(b)); }当一个对象中的字段可以为null时,实现Obj
[Guava源码日报](5)Optional分析 大多数情况下,开发人员使用null表明的是某种缺失情形:可能是已经有一个默认值,或没有值,或找不到值。例如,Map.get返回null就表示找不到给定键对应的值。Guava用Optional表示可能为null的T类型引用。一个Optional实例可能包含非null的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)。它从不说包含的是null值,而是用存在或缺失来表示。但Optiona
[Guava源码日报](4)Preconditions Preconditions是guava提供的用于进行代码校验的工具类,其中提供了许多重要的静态校验方法,用来简化我们工作或开发中对代码的校验或预 处理,能够确保代码符合我们的期望,并且能够在不符合校验条件的地方,准确的为我们显示出问题所在,接下来,我们就来学习使用Preconditions 进行代码校验。我们可以轻松的写出我们自己的先决条件,如下:public static Object chec
[Guava源码日报](3)Joiner分析 把任意的字符串,通过一些分隔符将它们连接起来是大多数程序员经常处理东西。以前的方式就是迭代,append等操作,使用Joiner可以更方便。我们先看一下以前的处理方式:// 通过分隔符将字符串链接在一起 public static String builder(ListString> list,String delimiter){ StringBuilder string
[Hive]JsonSerde使用指南 注意:重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在行尾分割文本文件。// this will work{ "key" : 10 }// this will not work{ "key" : 10 }2. 下载Jar使用之前先下载
[Hive]Lateral View使用指南 1. 语法lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*fromClause: FROM baseTable (lateralView)*2. 描述Lateral View一般与用户自定义表生成函数(如explode())结合使用。 如内置表生成函数中所述,UDTF为每
[Hive]Union使用指南 1. union语法select_statement UNION [ALL | DISTINCT] select_statement UNION [ALL | DISTINCT] select_statement ...UNION将多个SELECT语句的结果集合并为一个独立的结果集。当前只能支持UNION ALL(bag union)。不消除重复行。每个select语句返回的列的数量和名字必须一样
[Spark]Spark Streaming 指南四 输入DStreams和Receivers 1. 输入DStream与Receiver输入DStreams表示从源中获取输入数据流的DStreams。在指南一示例中,lines表示输入DStream,它代表从netcat服务器获取的数据流。每一个输入DStream(除 file stream)都 与一个接收器Receiver相关联,接收器从源中获取数据,并将数据存入Spark内存中来进行处理。 输入DStreams表示从数据源获取的原始数据
[Spark]Spark Streaming 指南三 DStreams 离散流或者DStreams是Spark Streaming提供的基本抽象,它代表一个连续的数据流。从源中获取输入流,或者是输入流通过转换算子生成的处理后的数据流。在内部,DStreams由一系列连续的 RDD组成。这是Spark对不可变,分布式数据集的抽象(更多细节参见Spark编程指南)。 DStream中的每个RDD包含来自特定间隔的数据,如下图所示:对DStream应用的任何操作都会转换为D
[Spark]Spark Streaming 指南二 初始化StreamingContext 为了初始化Spark Streaming程序,一个StreamingContext对象必需被创建,它是Spark Streaming所有流操作的主要入口。一个StreamingContext 对象可以用SparkConf对象创建。 可以使用SparkConf对象创建JavaStreamingContext对象:SparkConf conf = new SparkConf().setAppName(
[Spark]Spark Streaming 指南一 Example 1. 概述Spark streaming是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等特点。数据可以从诸如Kafka,Flume,Kinesis或TCP套接字等许多源中提取,并且可以使用由诸如map,reduce,join或者 window等高级函数组成的复杂算法来处理。最后,处理后的数据可以推送到文件系统、数据库、实时仪表盘中。事实上,你可以将处理后的
[Hive]分析函数 RANK ROW_NUMBER CUME_DIST CUME_DIST 1. 常用分析函数下表列出了一些分析函数以及描述信息:分析函数描述RANK返回数据项在分区中的排名。排名值序列可能会有间隔DENSE_RANK返回数据项在分区中的排名。排名值序列是连续的,不会有间隔PERCENT_RANK计算当前行的百分比排名ROW_NUMBER确定分区中当前行的序号CUME_DIST计算分区中当前行的相对排名NTILE()将每个分区的行尽可能均匀地划分为指定数量的分组2. 语法
[Hive]窗口函数LEAD LAG FIRST_VALUE LAST_VALUE 窗口函数(window functions)对多行进行操作,并为查询中的每一行返回一个值。 OVER()子句能将窗口函数与其他分析函数(analytical functions)和报告函数(reporting functions)区分开来。1. 常用窗口函数下表列出了一些窗口函数以及描述信息:窗口函数描述LAG()LAG()窗口函数返回分区中当前行之前行(可以指定第几行)的值。 如果没有行,则返回
[Hive]窗口函数与分析函数 本文介绍了用于窗口函数和分析函数的Hive QL增强功能。所有窗口和分析函数操作都按照SQL标准。 当前版本支持以下窗口函数和分析函数:1 窗口函数LEAD 返回分区中当前行后面行(可以指定第几行)的值。 如果没有行,则返回NULL。LAG 返回分区中当前行之前行(可以指定第几行)的值。 如果没有行,则返回NULL。FIRST_VALUE 返回相对于窗口中第一行的指定列的值。LAST_VALUE
[Spark]Spark 应用程序部署工具spark-submit 1. 简介Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序。 可以通过统一的接口使用Spark所有支持的集群管理器,因此不必为每个集群管理器专门配置你的应用程序(It can use all of Spark’s supported cluster managers through a uniform interface so you don’t have to co
[Hadoop]数据复制DistCp 1.需求我们项目中需要复制一个大文件,最开始使用的是hadoop cp命令,但是随着文件越来越大,拷贝的时间也水涨船高。下面进行hadoop cp与hadoop distcp拷贝时间上的一个对比。我们将11.9G的文件从data_group/adv/day=20170116下所有文件复制到tmp/data_group/adv/day=20170116/文件下1.1 查看文件大小hadoop fs
[Shell]命令行选项解析 1.概述getopts从符合标准POSIX.2选项语法的参数列表中获取选项及其参数(也就是,单个字母前面带有 - ,可能后跟参数值;单个字母可以分组)。通常,shell脚本使用getopts来解析传递给它们的参数。 当在getopts命令行中指定参数时,getopts将解析这些参数,而不是解析脚本命令行。Example:sh test.sh -d 20170120 -p ios -kgetopts
[Hadoop]MapReduce中的InputSplit 在查看数据块的如何处理之前,我们需要更仔细地了解Hadoop如何存储数据。在Hadoop中,文件由一个一个的记录组成,最终由mapper任务一个一个的处理。例如,示例数据集包含有关1987至2008年间美国境内已完成航班的信息。如果要下载数据集可以打开如下网址: http://stat-computing.org/dataexpo/2009/the-data.html 。每一年都会生成一个大文件(
[Hadoop]MapReduce多路径输入与多个输入 1. 多路径输入FileInputFormat是所有使用文件作为其数据源的 InputFormat 实现的基类,它的主要作用是指出作业的输入文件位置。因为作业的输入被设定为一组路径, 这对指定作业输入提供了很强的灵活性。FileInputFormat 提供了四种静态方法来设定 Job 的输入路径:public static void addInputPath(Job job,Path path);