apachekylin(apache kylin权威指南)

本篇文章给大家谈谈apachekylin,以及apache kylin权威指南对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

大数据分析界的“神兽”Apache Kylin有多牛

1.Apache Kylin是什么?

在现在的大数据时代,越来越多的企业开始使用Hadoop管理数据,但是现有的业务分析工具(如Tableau,Microstrategy等)

往往存在很大的局限,如难以水平扩展、无法处理超大规模数据、缺少对Hadoop的支持;而利用Hadoop做数据分析依然存在诸多障碍,例如大多数分析

师只习惯使用SQL,Hadoop难以实现快速交互式查询等等。神兽Apache Kylin就是为了解决这些问题而设计的。

Apache Kylin,中文名麒(shen)麟(shou) 是Hadoop动物园的重要成员。Apache

Kylin是一个开源的分布式分析引擎掘前神,最初由eBay开发贡献至开源社区。它提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持大

规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。

Apache

Kylin于2014年10月在github开源,并很快在2014年11月加入Apache孵化器,于2015年11月正式毕业成为Apache顶级项

目,也成为首个完全由中国团队设计开发的Apache顶级项目。于2016年3月,Apache

Kylin核心开发成员创建了Kyligence公司,力求更好地推动项目和社区的快速发展。

Kyligence是一家专注于大数据分析领域创新的数据科技公司,提供基于Apache

Kylin的企业级智能分析平台及产品,以及可靠、专业、源码级的商业化支持;并推出Apache Kylin开发者培训,颁发全球唯一的Apache

Kylin开发者认证证书。

2.Kylin的基本原理和架构

下面开始聊一聊Kylin的基本原理和架构判亏。简单来说,Kylin的核心思想是预计算,即对多维分析可能用到的度量进行预计算,将计算好的结果保

存成Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能

力。

上图所示就是一个Cube的例子,假设我们有4个dimension,这个Cube中每个节点(称作Cuboid)都是这4个dimension

的不同组合,每个组合定义了一组分析的dimension(如group

by),measure的聚合结果就保存在这每个Cuboid上。查询时根据SQL找到对应的Cuboid,读取measure的值,即可返回。

为了更好的适应大数据环境,Kylin从数据仓库中最常用的Hive中读取源数据,使用

MapReduce作为Cube构建的引擎,并把预计算结果保存在HBase中,对外暴露Rest

API/JDBC/ODBC的查询接口。因为Kylin支持标准的ANSI

SQL,所以可以和常用分析工具(如Tableau、Excel等)进行无缝对接。下面是Kylin的架构图。

说到Cube的构建,Kylin提供了一个称作Layer Cubing的算法。简单来说,就是按照dimension数量从大到小的顺序,从Base

Cuboid开始,依次基于上一层Cuboid的结果进行再聚合。每一层的计算都是一个单独的Map Reduce任务。如下图所示。

MapReduce的计算结果最终保存到HBase中,HBase中每行记录的Rowkey由dimension组成,measure会保存在

column

family中。为了减小存储代价,这里会对dimension和measure进行编码。查询阶段,利用HBase列存储的特性就可以保证Kylin有

良好的快速响应和高并发。

有了这些预计算的结果,当收到用户的SQL请求,Kylin会对SQL做查询计划,并把本该进行的Join、Sum、Count Distinct等操作改写成Cube的查询操作。

Kylin提供了一个原生的Web界面,在这里,用户可以方便的创建和设置Cube、管控Cube构建进度,并提供SQL查询和基本的结果可视化。

根据公开数据显示,Kylin的查询性能不只是针对个别SQL,而是对上万种SQL 的平悔咐均表现,生产环境下90%ile查询能够在在3s内返回。在上个月举办的Apache Kylin

Meetup中,来自美团、京东、百度等互联网公司分享了他们的使用情况。例如,在京东云海的案例中,单个Cube最大有8个维度,最大数据条数4亿,最

大存储空间800G,30个Cube共占存储空间4T左右。查询性能上,当QPS在50左右,所有查询平均在200ms以内,当QPS在200左右,平均

响应时间在1s以内。

北京移动也在meetup上展示了Kylin在电信运营商的应用案例,从数据上看,Kylin能够在比Hive/SparkSQL在更弱的硬件配置下获得更好的查询性能。 目前,有越来越多的国内外公司将Kylin作为大数据生产环境中的重要组件,如ebay、银联、百度、中国移动等。大家如果想了解更多社区的案例和动态,可以登录Apache Kylin官网或Kyligence博客进行查看。

3.Kylin的最新特性

Kylin的最新版本1.5.x引入了不少让人期待的新功能,可扩展架构将Kylin的三大依赖(数据源、Cube引擎、存储引

擎)彻底解耦。Kylin将不再直接依赖于Hadoop/HBase/Hive,而是把Kylin作为一个可扩展的平台暴露抽象接口,具体的实现以插件的

方式指定所用的数据源、引擎和存储。

开发者和用户可以通过定制开发,将Kylin接入除Hadoop/HBase/Hive以外的大数据系统,比如用Kafka代替Hive作数据源,用

Spark代替MapReduce做计算引擎,用Cassandra代替HBase做存储,都将变得更为简单。这也保证了Kylin可以随平台技术一起演

进,紧跟技术潮流。

在Kylin

1.5.x中还对HBase存储结构进行了调整,将大的Cuboid分片存储,将线性扫描改良为并行扫描。基于上万查询进行了测试对比结果显示,分片的存

储结构能够极大提速原本较慢的查询5-10倍,但对原本较快的查询提速不明显,综合起来平均提速为2倍左右。

除此之外,1.5.x还引入了Fast

cubing算法,利用Mapper端计算先完成大部分聚合,再将聚合后的结果交给Reducer,从而降低对网络瓶颈的压力。对500多个Cube任务

的实验显示,引入Fast cubing后,总体的Cube构建任务提速1.5倍。

目前,社区正在着手准备Apache Kylin 1.5.2版本的发布,目前正处于Apache Mailing list投票阶段,预计将会在本周在Kylin官网发布正式下载。

在本次的1.5.2版本中,Kylin带来了总计

36个缺陷修复、33个功能改进、6个新功能。一些主要的功能改进包括对HyperLogLog计算效率的提升、在Cube构建时对Convert

data to hfile步骤的提速、UI上对功能提示的体验优化、支持hive view作为lookup表等等。

另一个新消息是Kylin将支持MapR和CDH的Hadoop发行版,具体信息可见KYLIN-1515和KYLIN-1672。相应的测试版本是MapR5.1和CDH5.7。

UI上提供了一个重要更新,即允许用户在Cube级别进行自定义配置,以覆盖kylin.properties中的全局配置。如在cube中定义kylin.hbase.region.count.max 可以设置该cube在hbase中region切分的最大数量。

一个重要的功能是Diagnosis。用户经常会遇到一些棘手的问题,例如Cube构建任务失败、SQL查询失败,或Cube构建时间过长、SQL查询时

间过长等。但由于运维人员对Kylin系统了解不深,很难快速定位到root cause所在地。我们在mailing

list里也经常看到很多用户求助,由于不能提供足够充分的信息,社区也很难给出一针见血的建议。

当用户遇到查询、Cube/Model管理的问题,单击System页面的Diagnosis按钮,系统会自动抓取当前Project相关的信息并打包成

zip文件下载到用户本地。这个包会包含相关的Metadata、日志、HBase配置等。当用户需要在mailing

list求助,也可以附上这个包。

如何部署Apache Kylin集群实现负载均衡

1、下载Apollo服务器,下载后解压,然后运行apache-apollo-1.6\bin\apollo.cmd,输入createmybroker(名字任意取,这里是根据官网介绍的来取的)创建服务器实例,服务器实例包含了所有的配置,运行时数据等,并且和一个服务器进程关联。2、createmybroker之后会在bin目录下生成mybroker文件夹,里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,后面会介绍,可以修改原始的admin=password,可以接着换行添加新的用户名密码。3、打开cmd,运行…apache-apollo-1.6\bin\mybroker\bin\apollo-broker.cmdrun开启服务器,可以在浏览器中输入查看是否安装成功,该界面展示了topic,连接数等很多信息。经过上面的简单步骤,服务器基本上就已经完成,下一篇将介绍Android客户端的编写和注意事项。客户端使用的API,开始我使用的是mqtt-client,使用过后发现问题百出,不能很好的满足要求,后来使用了官方推荐的EclipsePaho,下面开始客户端代码的编写,为了方便测试这里有android和j2se两个工程:1、新建android工程MQTTClient2、MainActivity代码如下:[java]viewplaincopyprint?packageldw.mqttclient;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;importorg.eclipse.paho.client.mqttv3.IMqttDeliveryToken;importorg.eclipse.paho.client.mqttv3.MqttCallback;importorg.eclipse.paho.client.mqttv3.MqttClient;importorg.eclipse.paho.client.mqttv3.MqttConnectOptions;importorg.eclipse.paho.client.mqttv3.MqttException;importorg.eclipse.paho.client.mqttv3.MqttMessage;importorg.eclipse.paho.client.mqttv3.persist.MemoryPersistence;importandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.KeyEvent;importandroid.widget.TextView;importandroid.widget.Toast;publicclassMainActivityextendsActivity{privateTextViewresultTv;privateStringhost="tcp://127.0.0.1:1883";privateStringuserName="admin";privateStringpassWord="password";privateHandlerhandler;privateMqttClientclient;privateStringmyTopic="test/topic";privateMqttConnectOptionsoptions;privateScheduledExecutorServicescheduler;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);resultTv=(TextView)findViewById(R.id.result);init();handler=newHandler(){@OverridepublicvoidhandleMessage(Messagemsg){super.handleMessage(msg);if(msg.what==1){Toast.makeText(MainActivity.this,(String)msg.obj,Toast.LENGTH_SHORT).show();System.out.println("-----------------------------");}elseif(msg.what==2){Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();try{client.subscribe(myTopic,1);}catch(Exceptione){e.printStackTrace();}}elseif(msg.what==3){Toast.makeText(MainActivity.this,"连接失败,系统正在重连",Toast.LENGTH_SHORT).show();}}};startReconnect();}privatevoidstartReconnect(){scheduler=Executors.newSingleThreadScheduledExecutor();scheduler.scheduleAtFixedRate(newRunnable(){@Overridepublicvoidrun(){if(!client.isConnected()){connect();}}},0*1000,10*1000,TimeUnit.MILLISECONDS);}privatevoidinit(){try{//host为主机名,test为clientid即连接MQTT的客户端ID,一般以客户端唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存client=newMqttClient(host,"test",newMemoryPersistence());//MQTT的连接设置options=newMqttConnectOptions();//设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接options.setCleanSession(true);//设置连接的用户名options.setUserName(userName);//设置连接的密码options.setPassword(passWord.toCharArray());//设置超时时间单位为秒options.setConnectionTimeout(10);//设置会话心跳时间单位为秒服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制options.setKeepAliveInterval(20);//设置回调client.setCallback(newMqttCallback(){@OverridepublicvoidconnectionLost(Throwablecause){//连接丢失后,一般在这里面进行重连System.out.println("connectionLost----------");}@OverridepublicvoiddeliveryComplete(IMqttDeliveryTokentoken){//publish后会执行到这里System.out.println("deliveryComplete---------"+token.isComplete());}@OverridepublicvoidmessageArrived(StringtopicName,MqttMessagemessage)throwsException{//subscribe后得到的消息会执行到这里面System.out.println("messageArrived----------");Messagemsg=newMessage();msg.what=1;msg.obj=topicName+"---"+message.toString();handler.sendMessage(msg);}});//connect();}catch(Exceptione){e.printStackTrace();}}privatevoidconnect(){newThread(newRunnable(){@Overridepublicvoidrun(){try{client.connect(options);Messagemsg=newMessage();msg.what=2;handler.sendMessage(msg);}catch(Exceptione){e.printStackTrace();Messagemsg=newMessage();msg.what=3;handler.sendMessage(msg);}}}).start();}@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){if(client!=nullkeyCode==KeyEvent.KEYCODE_BACK){try{client.disconnect();}catch(Exceptione){e.printStackTrace();}}returnsuper.onKeyDown(keyCode,event);}@OverrideprotectedvoidonDestroy(){super.onDestroy();try{scheduler.shutdown();client.disconnect();}catch(MqttExceptione){e.printStackTrace();}}}由于项目需要,我用到了心跳重连。根据这里的解释设置apollo.xml,主要有设置主机连接的地址。另外,options还有个setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。

如何读apache kylin

Kylin 意思是麒麟,这对英语来说是外来词 80%人会把这个词读成kailin 这样听的话很女性化(我蚂闭知道好逗物源几个女孩叫kylie keelie等等的山态) 弄个相近点的吧,叫Calvin

[img]

关于apachekylin和apache kylin权威指南的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表