Impala元数据简介
背景
Impala是一个高性能的OLAP查询引擎,与其它SQL-on-Hadoop的ROLAP解决方案如Presto、SparkSQL 等不同的是,Impala对元数据(Metadata/Catalog)做了缓存,因此在做查询计划生成时不再依赖外部系统(如Hive、HDFS、Kudu),能做到毫秒级别的生成时间。另外缓存元数据也能极大减少对底层系统Master节点(Hive Metastore、HDFS NameNode、Kudu Master)的负载。
然而事情总有两面性,元数据缓存给Impala的系统设计引入了极大的复杂性。一方面在功能上为了维护缓存的正确性,引入了两个Impala特有的SQL语句:Invalidate Metadata 和 Refresh,另外还引入了query option SYNC_DDL。这些都让用户参与了缓存的维护。另一方面在架构设计上,有许多元数据相关的复杂设计,比如元数据的增量传播、缓存一致性的维护等。
在数仓规模较大时,Impala的元数据设计暴露出了许多问题,比如大表的元数据加载和刷新时间特别长、元数据的广播会被DDL阻塞导致广播延迟很大、元数据缓存导致节点Full GC或OOM等。因此Impala元数据设计也一直在演化之中,最新进展主要集中在Fetch-on-demand coordinator(又称local catalog mode、catalog-v2等)的设计,详见IMPALA-7127。
本文旨在介绍Impala元数据设计的基本概念,更多元数据相关的复杂设计将在后续文章中介绍。
Impala Server简介
Impala集群包含一个 Catalog Server (Catalogd)、一个 Statestore Server (Statestored) 和若干个 Impala Daemon (Impalad)。Catalogd 主要负责元数据的获取和DDL的执行,Statestored主要负责消息/元数据的广播,Impalad主要负责查询的接收和执行。 Impalad 又可配置为 coordinator only、 executor only 或 coordinator and executor(默认)三种模式。Coordinator角色的Impalad负责查询的接收、计划生成、查询的调度等,Executor角色的Impalad负责数据的读取和计算。默认配置下每个Impalad既是Coordinator又是Executor。生产环境建议做好角色分离,即每个Impalad要么是Coordinator要么是Executor,且可以以1:50的比例配置。更多细节可参考官方文档[1].
Impala元数据的构成
Impala的元数据缓存在catalogd和各个Coordinator角色的Impalad中。Catalogd中的缓存是最新的,各个Coordinator都缓存的是Catalogd内元数据的一个复本。如下图所示,元数据由Catalogd向外部系统获取,并通过 Statestored 传播给各个 Coordinator 元数据缓存主要由Java代码实现,主体代码在FE中。另有一些C++实现的代码,主要处理FE跟BE的交互,以及元数据的广播。代码中把 Catalogd 和 Coordinator (Impalad) 中相同的元数据管理逻辑抽出来放在了 Catalog.java 中,Catalogd 里的实现是 CatalogServiceCatalog.java,Coordinator 里的实现是 ImpaladCatalog.java.
Catalog是一个层级结构,第一层是 db name 到 db 的映射,每二层是每个db下的 function map和 table map:
Catalog
|-- dbCache_ = Map
|-- functions_ = Map>
|-- tableCache_ = CatalogObjectCache
functions_ Map 里的 value 是 Function 列表,主要表示同名函数的不同重载。tableCache_ 由 CatalogObjectCache 来维护。CatalogObjectCache 封装了一个 ConcurrentHashMap,另加了版本管理的逻辑,比如避免低版本的更新覆盖高版本的缓存、追踪所有缓存的版本号等。这些版本管理逻辑在Impalad中尤其重要。我们在后续的文章中会详细介绍。
Table 在代码里有五个具体的子类:HdfsTable、KuduTable、HBaseTable、View、IncompleteTable、DataSourceTable。前4个都比较直白,解释下最后两个:
IncompleteTable 表示未加载元数据的表或视图(View)。Catalogd 启动时,为了减少启动时间,只加载了所有表的表名,每个表用IncompleteTable来表示。如果执行了INVALIDATE METADATA,则表的元数据也会被清空,其表现就是回置成了IncompleteTable。IncompleteTable可能代表一个视图,但这在元数据未加载时是无法确定的。因此在HUE等可视化界面中使用Impala时,常常会看到一个View是用Table的图标表示的,但一旦有被使用过,就又变回成了View的图标。
DataSourceTable 属于external data source的实现,这块没有任何文档提及,因为一直处于实验状态。其初衷是提供一个Java接口来自定义外部数据源,只需要实现 prepare、open、getNext、close 这几个接口。具体可参考代码里的 EchoDataSource 和 AllTypesDataSource。
接下来我们重点介绍下前三个的元数据构成。
HdfsTable
HdfsTable 代表一张底层存储为 HDFS 的 Hive 表。无分区表的元数据比较简单,少了各个分区对应的元数据。这里以分区表为例,其元数据如图所示: 其中 msTable 和 msPartition 表示 HMS API 里返回的对象:
org.apache.hadoop.hive.metastore.api.Table
org.apache.hadoop.hive.metastore.api.Partition
HdfsPartition 代表一个分区的元数据,其一大部分内容是 HDFS 文件和块的信息。图中的 FileDescriptor 和 BlockDescriptor,就是从 HDFS API 里返回的 FileStatus 和 BlockLocation 对象抽取数据后生成的。为了节省空间,实际缓存的并不是上图展示的 FileDescriptor 和 FileBlock。IMPALA-4029 引入了 FlatBuffer 来压缩 FileDescriptor 和 FileBlock。FlatBuffer 的好处是不需要像 protobuf 或 thrift 一样做序列化和反序列化,但却可以直接访问对象里的内容,同时带来了一定的压缩比。更多关于 FlatBuffer 参见文末文档 [2].
HdfsPartition 的另一大部分内容是统计信息,缓存的是deflate算法压缩后的数据,具体详见:PartitionStatsUtil#partStatsFromCompressedBytes()。解压之后是一个 TPartitionStats 对象,主要包含了各列在该partition里的统计信息,每列的统计信息用一个 TIntermediateColumnStats 表示:
struct TIntermediateColumnStats {
1: optional binary intermediate_ndv // NDV HLL 计算的中间结果
2: optional bool is_ndv_encoded // HLL中间结果是否有用 RLE 压缩
3: optional i64 num_nulls // 该列在该分区的 NULL 数目
4: optional i32 max_width // 该列在该分区的最大长度
5: optional double avg_width // 该列在该分区的平均长度
6: optional i64 num_rows // 该分区行数,用于聚集HLL中间结果
}
关于 Impala 里 ndv() 的实现,可参考 be/src/exprs/aggregate-functions-ir.cc 中的 HllInit()、HllUpdate()、HllMerge()、HllFinalEstimate() 的逻辑。ndv 的中间结果用一个string表示,长度为 1024。在传输时一般会用 RLE (Run Length Encoding) 压缩。
Impala的统计信息受限于Hive(因为要保存在Hive Metastore中),目前并没有统计数值类型列的最大最小、平均值等信息。这块有个古老的 JIRA: IMPALA-2416,目前还没有进展。
一个HDFS分区表的元数据在各种压缩后,在内存中的大小约为
分区数*2048 + 分区数*列数*400 + 文件数*500 + 块数目*150
实际应用中要降低大表的元数据大小,就需要在分区数、列数、文件数、块数目上寻求优化的空间。其中 2048、400、500、150 这些数都是各对象压缩大小的估计值,“分区数 * 列数 * 200” 指的是增量统计信息的大小,如果表的统计信息是非增量的,即一直用 Compute Stats 来统计,则不需要这部分。实际应用中很少直接对大表做 Compute Stats,因为执行时间可能很长,一般都是使用 Compute Incremental Stats,因此这部分的内存占用不可忽略。
KuduTable
HdfsTable 代表一张底层存储为 Kudu 的 Hive 表。Impala 缓存的 Kudu 元数据特别有限:
msTable: HMS API 返回的 Table 对象,主要是 Hive 中的元数据
TableStats: HMS 中存的统计信息,主要是各列统计信息和整张表的行数等
kuduTableName: Kudu 存储中的实际表名,该名字可以跟 Hive 中的表名不同。
kuduMasters: Kudu 集群的 master 列表
primaryKeyColumnNames: Kudu 表的主键列
partitions: Kudu 表的分区信息
kuduSchema: Kudu API 返回的 Schema 信息
关于分区信息,只缓存了分区的列是哪些,以及 hash 分区的分区数,并没有缓存 Range 分区的各个 Range 是什么,因此在用 SHOW CREATE TABLE 语句时,看到的 range partition 信息只包含了列名。比如下面这个例子,“Partition by range(id)” 部分的各个 range 被省略了:
Query: show create table functional_kudu.dimtbl
+-------------------------------------------------------------------------------------------------------------------------------------------+
| result |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| CREATE TABLE functional_kudu.dimtbl ( |
| id BIGINT NOT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION, |
| name STRING NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION, |
| zip INT NULL ENCODING AUTO_ENCODING COMPRESSION DEFAULT_COMPRESSION, |
| PRIMARY KEY (id) |
| ) |
| PARTITION BY RANGE (id) (...) |
| STORED AS KUDU |
| TBLPROPERTIES ('STATS_GENERATED'='TASK', 'impala.lastComputeStatsTime'='1573922577', 'kudu.master_addresses'='localhost', 'numRows'='10') |
+-------------------------------------------------------------------------------------------------------------------------------------------+
如果需要查看具体有哪些 range 分区,还是需要用 SHOW RANGE PARTITIONS 语句,Impala 会从 Kudu 中获取结果来返回,然而还是不会缓存这些 range 信息。
Query: show range partitions functional_kudu.dimtbl
+-----------------------+
| RANGE (id) |
+-----------------------+
| VALUES < 1004 |
| 1004 <= VALUES < 1008 |
| VALUES >= 1008 |
+-----------------------+
Fetched 3 row(s) in 0.07s
这块个人觉得还有很多工作可做,比如把 range 分区的分界点缓存下来后,可以用来优化 Insert 语句,提升批量导入 Kudu 的性能(IMPALA-7751)。另外关于更细节的信息如每个 kudu tablet 的复本位置,kudu tserver 地址等都是没有缓存的,利用这些信息实际也能做很多优化,欢迎大家一起来参与开发!
HBaseTable
Impala 对 HBase 的支持始于对 Hive 的兼容(Hive 可以读 HBase 的数据),但目前已经处于维护状态,社区不再在这方面投入精力。一方面是 Kudu 更适合替代 HBase 来做 OLAP,另一方面是 Impala 也不适合太高并发的 DML 操作。
HBaseTable 代表底层存储为 HBase 的 Hive 表,缓存了 HMS 中的 Table 定义和表的大小(行数)这些基本的统计信息,另外也缓存了底层 HBase 表的所有列族名。
总结
Impala 缓存了外部系统(Hive、HDFS、Kudu等)的元数据,主要目的是让查询计划生成阶段不再需要跟外部系统交互。生成查询计划需要哪些元数据,哪些元数据就会被缓存下来:
Table: Schema(表名、字段名、字段类型、分区字段等)、各列统计信息
HdfsTable: 分区目录、文件路径、文件分块及复本位置、各分区的增量统计信息等
KuduTable: 分区列及分区类型(Hash、Range)
HBaseTable: 各列族名
View: 具体的查询语句
参考文档
https://impala.apache.org/docs/build/html/topics/impala_dedicated_coordinator.html
https://google.github.io/flatbuffers/index.html
你可能感兴趣的:(Impala)
Spring Cloud: Hystrix请求队列线程不足
MeazZa
在SpringCloud中,Feign可以实现本地化的微服务API调用,Hystrix可以实现调用失败时的fallback处理。问题描述:在实际生产环境中使用时,我们遇到了这样一个错误:"...,stacktrace:[com.netflix.hystrix.exception.HystrixRuntimeException:QueryNodeImpalaBdService#getQueryRes
探索未来,大规模分布式深度强化学习——深入解析IMPALA架构
汤萌妮Margaret
探索未来,大规模分布式深度强化学习——深入解析IMPALA架构scalable_agent项目地址:https://gitcode.com/gh_mirrors/sc/scalable_agent在当今的人工智能研究前沿,深度强化学习(DRL)因其在复杂任务中的卓越表现而备受瞩目。本文要介绍的是一个开源于GitHub的重量级项目:“ScalableDistributedDeep-RLwithImp
2024年大数据高频面试题(下篇)
猿与禅
Java架构师面试 大数据 面试 scala 即席查询 分桶 调度系统 数据倾斜
文章目录Scala数据类型函数式编程闭包函数柯里化面向对象样例类对象与伴生对象特质(trait)模式匹配隐式转换即席查询KylinKylin特点Kylin工作原理核心算法Kylin总结Kylin的优点什么场景用KylinKylin的缺点Impala什么是ImpalaImpala为什么快FrontendBackendImpala总结:Presto什么是PrestoPresto的执行过程Presto总
Impala-架构与设计
临江蓑笠翁
大数据 # Impala 架构
架构与设计一、背景和起源二、框架概述1.设计特点2.框架优点3.框架限制三、架构图1.ImpalaDaemon2.Statestore3.Catalog四、Impala查询流程1.发起查询2.生成执行计划3.分配任务4.交换中间数据5.汇集结果6.返回结果总结参考链接一、背景和起源现有的大数据查询分析工具Hive更适合长时间批处理查询分析,并不能满足实时交互式场景。因此根据谷歌的Dremel设计思
史上最全OLAP对比
只会写demo的程序猿
数仓 spark hadoop 数据仓库
目录1.什么是OLAP2.OLAP引擎的常见操作3.OLAP分类MOLAP的优点和缺点ROLAP的优点和缺点4.并发能力与查询延迟对比5.执行模型对比5.OLAP引擎的主要特点5.2SparkSQL、FlinkSQL5.3Clickhouse5.4Elasticsearch5.5Presto5.6Impala5.7Doris5.8Druid5.9Kylin综上所述:1.什么是OLAPOLAP(On
【Iceberg学习一】什么是Iceberg?
周润发的弟弟
Iceberg 学习
ApacheIceberg是一个面向大型分析数据集的开放表格格式。Iceberg为包括Spark、Trino、PrestoDB、Flink、Hive和Impala在内的计算引擎增加了表格功能,使用一种高性能的表格格式,其工作方式就像一个SQL表一样。用户体验Iceberg避免了不愉快的意外。模式演化功能正常运作,并不会无意中恢复已删除的数据。用户无需了解分区信息也能获得快速查询。模式演化支持添加、
Spark Chapter 8 Spark SQL
深海suke
【参考以慕课网日志分析为例进入大数据Sparksql】0导读SQL:MySQL,Oracle,DB2,SQLServer在大数据平台上实现大数据计算:Hive/SparkSQL/SparkCore直接使用SQL语句进行大数据分析hive的问题:底层MR,2.x之后可以用spark应用场景SQLonHadoop:Hive,Shark(不维护了),Impala(Cloudera,内存使用较多),Pre
SQL Parser
TaiKuLaHa
sql 数据库
https://blog.csdn.net/w1047667241/article/details/123110220alibabadruid经过不断迭代,已经解决了很多hive解析的bug,比如2020年的createtablebug支持的dbtype多,impala,hive,oracle等等都支持。缺点就是捆绑销售,1个jar包高大全的datasource全家桶。我们只是想要parser而已
Kudu+Impala介绍
wjmmjr1
转自:http://www.360doc.com/content/18/0913/16/59691344_786386910.shtmlKudu+Impala介绍概述Kudu和Impala均是Cloudera贡献给Apache基金会的顶级项目。Kudu作为底层存储,在支持高并发低延迟kv查询的同时,还保持良好的Scan性能,该特性使得其理论上能够同时兼顾OLTP类和OLAP类查询。Impala作为
impala与kudu进行集成
shandongwill
大数据 impala kudu impala与kudu集成
文章目录概要Kudu与Impala整合配置Impala内部表Impala外部表Impalasql操作kuduImpalajdbc操作表如果使用了Hadoop使用了Kerberos认证,可使用如下方式进行连接。概要Impala是一个开源的高效率的SQL查询引擎,用于查询存储在Hadoop分布式文件系统(HDFS)中的大规模数据集。它提供了一个类似于传统关系型数据库的SQL接口,允许用户使用SQL语言
45.使用Sentry授权—Kudu
大勇任卷舒
45.1演示环境CDH5.11.2和CDH5.13两个集群运行正常两个集群Kudu已经安装,且已集成Impala,操作正常两个集群都已启用Sentry并且配置正确CDH5.11.2和CDH5.13集群用root用户操作集群未启用Kerberos该项不影响整个测试效果,Fayson只是为了操作方便。45.2操作演示CDH5.11.2测试Kudu1.3的Sentry授权创建admin管理员role,给
大数据入门-大数据技术概述(二)
水坚石青
大数据理论 大数据 spark kafka
目录大数据入门系列文章1.大数据入门-大数据是什么2.大数据入门-大数据技术概述(一)一、简介二、技术详解1.分布式协调服务:Zookeeper2.分布式资源管理器:Yarn3.计算引擎:Spark4.查询引擎:Impala5.分布式消息系统:Kafka6.日志收集系统:Flume大数据入门系列文章1.大数据入门-大数据是什么2.大数据入门-大数据技术概述(一)最近在收集整理大数据入门文章,各位盆
使用haproxy做impala的负载均衡
要树立远大的理想
Impala 负载均衡 impala haproxy
1.IMPALA组件概述Impala组件包含3个子模块(ImpalaCatalogServer、ImpalaStateStore、ImpalaDaemon),如图所示:其中ImpalaCatalogServer与ImpalaStateStore是无数据、无状态的模块,没有高可用的需求更不需要做负载均衡;ImpalaDaemon模块的每一个节点都可以提供jdbc和thrift服务(作为coordin
Fink CDC数据同步(三)Flink集成Hive
苡~
flink hive 大数据
1目的持久化元数据Flink利用Hive的MetaStore作为持久化的Catalog,我们可通过HiveCatalog将不同会话中的Flink元数据存储到HiveMetastore中。利用Flink来读写Hive的表Flink打通了与Hive的集成,如同使用SparkSQL或者Impala操作Hive中的数据一样,我们可以使用Flink直接读写Hive中的表。2环境及依赖环境:vim/etc/p
InnoDB行格式
saviochen
InnoDB的记录按行存储在数据页中。记录在数据页种的排布在《InnoDB页面结构》中已述及,本文重点介绍InnoDB的记录格式。1行格式总览InnoDB规划了26种行格式,分别对应26种动物,首字母由A至Z:Antelope,Barracuda,Cheetah,Dragon,Elk,Fox,Gazelle,Hornet,Impala,Jaguar,Kangaroo,Leopard,Moose,N
不同的强化学习模型适配与金融二级市场的功能性建议
路人与大师
金融
DQNESDDPGA2CTD3SACQMIXMADDPGPPOCQLIMPALA哪个模型适合进行股票操作在考虑使用哪种模型进行股票操作时,需要考虑模型的特点、适用场景以及实现复杂度等因素。以下是对您列出的几种强化学习模型的简要概述,以帮助您做出选择:DQN(DeepQ-Network):适合:适用于离散动作空间的强化学习任务。特点:通过神经网络近似Q函数,使用经验回放和目标网络来提高学习的稳定性和
Impala源码阅读——SimpleScheduler
stiga-huang
Impala impala 源码 调度
Scheduler的任务相关概念:DistributedPlan在Frontend中已经把SQL转换成了singlenodeplan,然后又将其切分成了distributedplan。代码见Planner::createPlan和DistributedPlanner::createPlanFragments.比如左图的singlenodeplan会切成为右图的distributedplan(图片来
Impala实践:解析glog打印的 C++ 报错堆栈
stiga-huang
Impala c++ impala
Impala实践:解析glog打印的C++报错堆栈Impala使用glog生成日志。生产环境用的都是releasebuild,glog产生的报错堆栈里没有函数名,很难像Java报错堆栈那样方便定位问题。下面是Impalad日志中的一个报错:I052209:07:16.00205620222status.cc:128]Snappy:RawUncompressfailed@0xae26c9@0x107
Impala如何将Iceberg上的查询编译性能提升12倍
stiga-huang
Impala impala 大数据
Impala如何将Iceberg上的查询编译性能提升12倍原文作者:RizaSuminto原文链接:https://blog.cloudera.com/12-times-faster-query-planning-with-iceberg-manifest-caching-in-impala/译者:stiga-huangApacheIceberg是一种新兴的开放表格式,专为大规模分析场景而设计。I
Kudu-1.16编译中下载Gradle依赖失败的解决办法
stiga-huang
Impala gradle impala
Kudu-1.16编译中下载Gradle依赖失败的解决办法最近在国内的机器上编译Impala的native-toolchain,没法挂代理,发现编译kudu-1.16时失败了:FAILURE:Buildfailedwithanexception.*Whatwentwrong:Executionfailedfortask':buildSrc:compileGroovy'.>Couldnotresol
Apache Impala 4.2概览
stiga-huang
Impala apache impala
ApacheImpala4.2概览Impala4.2于2022年12月发布,共有265个commits,有37位开发者贡献了代码。1.新功能1.1Iceberg相关新功能支持读取使用positiondelete模式的IcebergV2表(IMPALA-11484)支持读取Iceberg表的虚拟列,如INPUT__FILE__NAME,FILE__POSITION等(IMPALA-801,IMPAL
Apache Impala 4.1概览
stiga-huang
Impala apache impala
ApacheImpala4.1概览自从Impala4.0发布后,历时近11个月,Impala4.1终于发布了!新版本在Iceberg集成、Catalog优化、Parquet/ORC读取性能、嵌套类型等方面都有较大进展。限于个人认知和篇幅有限,本文只能挑些重要功能进行介绍,详细更新列表可见ChangeLog-4.1.1.Iceberg集成Impala-4.1开始正式支持ApacheIceberg。I
在CDH6.3中单独升级Impala到Apache Impala 3.4
stiga-huang
Impala impala cloudera CDH
1.实验环境一个CDH6.3.3集群,部署在三台Ubuntu16.04机器上一台同样环境的Ubuntu16.04机器用来编译ApacheImpala3.4CDH6.3.3对应的Impala基础版本是ApacheImpala3.2,当然还打了不少补丁。从Impala网页上能看到版本号是3.2.0-cdh6.3.32.编译ApacheImpala3.4ApacheImpala是以源码的形式releas
Impala-shell卡顿分析——记一次曲折的Debug经历
stiga-huang
Impala 大数据 impala debug
Impala-shell卡顿分析——记一次曲折的Debug经历问题发现最近准备在Impala中增加对UTF-8的支持,以修正跟Hive、Spark等基于Java的系统在UTF-8字符串上的不兼容表现(如IMPALA-2019、IMPALA-5675、IMPALA-9662等)。结果在impala-shell里简单跑了个substring查询就挂住了:[localhost:21050]default
如何在Apache JIRA中搜索issue
stiga-huang
Impala apache impala jira 开发工具
经常会遇到这样的问题:某个功能在哪个Impala版本开始有?具体细节是什么?某个bug在哪个Impala版本开始出现/修复?遇到某个报错,是否是已知问题?这些当然可以直接google,但也可以在ApacheJIRA中搜索,结果会更精准。操作步骤打开网址:https://issues.apache.org/jira或者任何一个已有issue的链接。点击左上角的Issues->Searchforiss
Apache Impala 4.0概览
stiga-huang
Impala 大数据 分布式 数据库
ApacheImpala4.0概览历经15个月,ApacheImpala4.0终于发布了!本次发布一共包含700多个JIRA,本文将带大家快速了解4.0的主要改动,参考自社区ReleaseNotes:http://impala.apache.org/docs/release-notes-4.0.html非兼容性改动大版本一般会有非兼容性的改动,主要是抛弃掉一些历史负担,让整个代码库更简洁更易于维护
动态调整Impala日志级别
stiga-huang
Impala cloudera 大数据
Impala日志级别诊断线上事故时,动态调整日志级别非常有用,Impala的各个server也提供这样的能力。每个server都有一个/log_level页面,如图:Impala的FE代码中主要用了FATAL、INFO、TRACE三种日志级别,很少用DEBUG。因此实战时一般是把日志级别调成TRACE,另外由于不确定是哪个类出问题,最好把整个org.apache.impala包的日志级别都调成TR
Impala 3.4的新功能和社区进展
stiga-huang
Impala 大数据 impala
Impala3.4的新功能和社区进展Impala社区在四月底发布了3.4版本。这是时隔半年后的又一个新版本,也是最后一个3.x版本。之后将进入4.x时代,为的是接受一系列breakingchanges,如删除对过时操作系统(Centos6、Ubuntu14等)的支持、删除对Sentry的支持、删除对lzo的支持等。具体的breakingchanges还在讨论之中,感兴趣的同学可以订阅邮件列表参与讨
Impala编译:一个maven编译错误的解决
stiga-huang
Impala maven 大数据 cloudera
编译Impala时遇到了一个maven错误,准确地说是编译testdata模块时报的错。我用的指令是“./buildall.sh-skiptests-format-testdata”,遇到的错误如下:========================================================================Runningmvn-UpackageDirectory
Impala查询卡顿分析案例
stiga-huang
Impala Impala
Impala查询卡顿分析案例最近在开发时遇到查询卡顿(stuck)的情况,感觉比较有代表性,因此记录一下排查过程。在生产环境中也可以用类似的方法找到卡顿的源头。注:本文所用的Impala版本为3.4.0-SNAPSHOT。Impala由C++和Java写成,分别对应BE(Backend)和FE(Frontend)两部分。案例描述使用AlterTable语句新建一个partition时,查询一直不返
java封装继承多态等
麦田的设计者
java eclipse jvm c encapsulatopn
最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。
1、final关键字
译为:最终的
&
F5与集群的区别
bijian1013
weblogic 集群 F5
http请求配置不是通过集群,而是F5;集群是weblogic容器的,如果是ejb接口是通过集群。
F5同集群的差别,主要还是会话复制的问题,F5一把是分发http请求用的,因为http都是无状态的服务,无需关注会话问题,类似
LeetCode[Math] - #7 Reverse Integer
Cwind
java 题解 Math LeetCode Algorithm
原题链接:#7 Reverse Integer
要求:
按位反转输入的数字
例1: 输入 x = 123, 返回 321
例2: 输入 x = -123, 返回 -321
难度:简单
分析:
对于一般情况,首先保存输入数字的符号,然后每次取输入的末位(x%10)作为输出的高位(result = result*10 + x%10)即可。但
BufferedOutputStream
周凡杨
首先说一下这个大批量,是指有上千万的数据量。
例子:
有一张短信历史表,其数据有上千万条数据,要进行数据备份到文本文件,就是执行如下SQL然后将结果集写入到文件中!
select t.msisd
linux下模拟按键输入和鼠标
被触发
linux
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键 模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。
linux/in
ContentProvider初体验
肆无忌惮_
ContentProvider
ContentProvider在安卓开发中非常重要。与Activity,Service,BroadcastReceiver并称安卓组件四大天王。
在android中的作用是用来对外共享数据。因为安卓程序的数据库文件存放在data/data/packagename里面,这里面的文件默认都是私有的,别的程序无法访问。
如果QQ游戏想访问手机QQ的帐号信息一键登录,那么就需要使用内容提供者COnte
关于Spring MVC项目(maven)中通过fileupload上传文件
843977358
mybatis spring mvc 修改头像 上传文件 upload
Spring MVC 中通过fileupload上传文件,其中项目使用maven管理。
1.上传文件首先需要的是导入相关支持jar包:commons-fileupload.jar,commons-io.jar
因为我是用的maven管理项目,所以要在pom文件中配置(每个人的jar包位置根据实际情况定)
<!-- 文件上传 start by zhangyd-c --&g
使用svnkit api,纯java操作svn,实现svn提交,更新等操作
aigo
svnkit
原文:http://blog.csdn.net/hardwin/article/details/7963318
import java.io.File;
import org.apache.log4j.Logger;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmateso
对比浏览器,casperjs,httpclient的Header信息
alleni123
爬虫 crawler header
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
String type=req.getParameter("type");
Enumeration es=re
java.io操作 DataInputStream和DataOutputStream基本数据流
百合不是茶
java 流
1,java中如果不保存整个对象,只保存类中的属性,那么我们可以使用本篇文章中的方法,如果要保存整个对象 先将类实例化 后面的文章将详细写到
2,DataInputStream 是java.io包中一个数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
车辆保险理赔案例
bijian1013
车险
理赔案例:
一货运车,运输公司为车辆购买了机动车商业险和交强险,也买了安全生产责任险,运输一车烟花爆竹,在行驶途中发生爆炸,出现车毁、货损、司机亡、炸死一路人、炸毁一间民宅等惨剧,针对这几种情况,该如何赔付。
赔付建议和方案:
客户所买交强险在这里不起作用,因为交强险的赔付前提是:“机动车发生道路交通意外事故”;
如果是交通意外事故引发的爆炸,则优先适用交强险条款进行赔付,不足的部分由商业
学习Spring必学的Java基础知识(5)—注解
bijian1013
java spring
文章来源:http://www.iteye.com/topic/1123823,整理在我的博客有两个目的:一个是原文确实很不错,通俗易懂,督促自已将博主的这一系列关于Spring文章都学完;另一个原因是为免原文被博主删除,在此记录,方便以后查找阅读。
有必要对
【Struts2一】Struts2 Hello World
bit1129
Hello world
Struts2 Hello World应用的基本步骤
创建Struts2的Hello World应用,包括如下几步:
1.配置web.xml
2.创建Action
3.创建struts.xml,配置Action
4.启动web server,通过浏览器访问
配置web.xml
<?xml version="1.0" encoding="
【Avro二】Avro RPC框架
bit1129
rpc
1. Avro RPC简介 1.1. RPC
RPC逻辑上分为二层,一是传输层,负责网络通信;二是协议层,将数据按照一定协议格式打包和解包
从序列化方式来看,Apache Thrift 和Google的Protocol Buffers和Avro应该是属于同一个级别的框架,都能跨语言,性能优秀,数据精简,但是Avro的动态模式(不用生成代码,而且性能很好)这个特点让人非常喜欢,比较适合R
lua set get cookie
ronin47
lua cookie
lua:
local access_token = ngx.var.cookie_SGAccessToken
if access_token then
ngx.header["Set-Cookie"] = "SGAccessToken="..access_token.."; path=/;Max-Age=3000"
end
java-打印不大于N的质数
bylijinnan
java
public class PrimeNumber {
/**
* 寻找不大于N的质数
*/
public static void main(String[] args) {
int n=100;
PrimeNumber pn=new PrimeNumber();
pn.printPrimeNumber(n);
System.out.print
Spring源码学习-PropertyPlaceholderHelper
bylijinnan
java spring
今天在看Spring 3.0.0.RELEASE的源码,发现PropertyPlaceholderHelper的一个bug
当时觉得奇怪,上网一搜,果然是个bug,不过早就有人发现了,且已经修复:
详见:
http://forum.spring.io/forum/spring-projects/container/88107-propertyplaceholderhelper-bug
[逻辑与拓扑]布尔逻辑与拓扑结构的结合会产生什么?
comsci
拓扑
如果我们已经在一个工作流的节点中嵌入了可以进行逻辑推理的代码,那么成百上千个这样的节点如果组成一个拓扑网络,而这个网络是可以自动遍历的,非线性的拓扑计算模型和节点内部的布尔逻辑处理的结合,会产生什么样的结果呢?
是否可以形成一种新的模糊语言识别和处理模型呢? 大家有兴趣可以试试,用软件搞这些有个好处,就是花钱比较少,就算不成
ITEYE 都换百度推广了
cuisuqiang
Google AdSense 百度推广 广告 外快
以前ITEYE的广告都是谷歌的Google AdSense,现在都换成百度推广了。
为什么个人博客设置里面还是Google AdSense呢?
都知道Google AdSense不好申请,这在ITEYE上也不是讨论了一两天了,强烈建议ITEYE换掉Google AdSense。至少,用一个好申请的吧。
什么时候能从ITEYE上来点外快,哪怕少点
新浪微博技术架构分析
dalan_123
新浪微博 架构
新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版的架构实际上就是这两行字。第
玩转ARP攻击
dcj3sjt126com
r
我写这片文章只是想让你明白深刻理解某一协议的好处。高手免看。如果有人利用这片文章所做的一切事情,盖不负责。 网上关于ARP的资料已经很多了,就不用我都说了。 用某一位高手的话来说,“我们能做的事情很多,唯一受限制的是我们的创造力和想象力”。 ARP也是如此。 以下讨论的机子有 一个要攻击的机子:10.5.4.178 硬件地址:52:54:4C:98
PHP编码规范
dcj3sjt126com
编码规范
一、文件格式
1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。例如:<?php$foo = 'foo';2. 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。例
linux 脱机管理(nohup)
eksliang
linux nohup nohup
脱机管理 nohup
转载请出自出处:http://eksliang.iteye.com/blog/2166699
nohup可以让你在脱机或者注销系统后,还能够让工作继续进行。他的语法如下
nohup [命令与参数] --在终端机前台工作
nohup [命令与参数] & --在终端机后台工作
但是这个命令需要注意的是,nohup并不支持bash的内置命令,所
BusinessObjects Enterprise Java SDK
greemranqq
java BO SAP Crystal Reports
最近项目用到oracle_ADF 从SAP/BO 上调用 水晶报表,资料比较少,我做一个简单的分享,给和我一样的新手 提供更多的便利。
首先,我是尝试用JAVA JSP 去访问的。
官方API:http://devlibrary.businessobjects.com/BusinessObjectsxi/en/en/BOE_SDK/boesdk_ja
系统负载剧变下的管控策略
iamzhongyong
高并发
假如目前的系统有100台机器,能够支撑每天1亿的点击量(这个就简单比喻一下),然后系统流量剧变了要,我如何应对,系统有那些策略可以处理,这里总结了一下之前的一些做法。
1、水平扩展
这个最容易理解,加机器,这样的话对于系统刚刚开始的伸缩性设计要求比较高,能够非常灵活的添加机器,来应对流量的变化。
2、系统分组
假如系统服务的业务不同,有优先级高的,有优先级低的,那就让不同的业务调用提前分组
BitTorrent DHT 协议中文翻译
justjavac
bit
前言
做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍。
BEP: 5Title: DHT ProtocolVersion: 3dec52cb3ae103ce22358e3894b31cad47a6f22bLast-Modified: Tue Apr 2 16:51:45 2013 -070
Ubuntu下Java环境的搭建
macroli
java 工作 ubuntu
配置命令:
$sudo apt-get install ubuntu-restricted-extras
再运行如下命令:
$sudo apt-get install sun-java6-jdk
待安装完毕后选择默认Java.
$sudo update- alternatives --config java
安装过程提示选择,输入“2”即可,然后按回车键确定。
js字符串转日期(兼容IE所有版本)
qiaolevip
TO Date String IE
/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)
* result (分钟)
*/
stringToDate : function(fDate){
var fullDate = fDate.split(" ")[0].split("-");
var fullTime = fDate.split("
【数据挖掘学习】关联规则算法Apriori的学习与SQL简单实现购物篮分析
superlxw1234
sql 数据挖掘 关联规则
关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。
关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。
例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%] 支持度3%:意味3%顾客同时购买牛奶和面包。 置信度40%:意味购买牛奶的顾客40%也购买面包。 规则的支持度和置信度是两个规则兴
Spring 5.0 的系统需求,期待你的反馈
wiselyman
spring
Spring 5.0将在2016年发布。Spring5.0将支持JDK 9。
Spring 5.0的特性计划还在工作中,请保持关注,所以作者希望从使用者得到关于Spring 5.0系统需求方面的反馈。