Druid大数据分析方法之查询
沉沙 2018-09-29 来源 : 阅读 982 评论 0

摘要:本篇教程介绍了Druid大数据分析方法之查询,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据分析的理解更加深入。

本篇教程介绍了Druid大数据分析方法之查询,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据分析的理解更加深入。

<



1、概述
   本节快速安装基于单机服务器,很多配置可以默认不需要修改,数据存储在操作系统级别的磁盘。推出快速安装的目的,便于了解并指导基于Druid进行大数据分析的开发流程。本节主要讲Druid的安装、实例数据加载、查询及使用问题解决。
 
2、安装要求
   1. Java 7 及以上   2. Linux, Mac OS X, or other Unix-like OS (Windows不支持)   3. VMware   4. 2CPU ++; 内存2G ++
 
3、Zookeeper 安装
   本次采单机版安装,如果采用分布式安装,则需要修改Druid相应配置,反之不需要。 Zookeeper默认启用2181端口监听。
 


Linux代码  



curl //www.gtlib.gatech.edu/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -o zookeeper-3.4.6.tar.gz  
tar -xzf zookeeper-3.4.6.tar.gz  
cd zookeeper-3.4.6  
cp conf/zoo_sample.cfg conf/zoo.cfg  
./bin/zkServer.sh start  




     zookeeper 安装验证





Linux和zookeeper命令代码  



cd zookeeper-3.4.6 // 切换至Zookeeper根目录  
bin/zkCli.sh       // 启动Zookeeper客户端  
ls /               // 查看根节点  



 

4、Druid 安装


Java代码  



curl -O //static.druid.io/artifacts/releases/druid-0.9.1.1-bin.tar.gz  
tar -xzf druid-0.9.1.1-bin.tar.gz  
cd druid-0.9.1.1  


 
解压后 Druid 相关目录说明
 

LICENSE - 许可证文件。
bin/ - 快速启动脚本。
conf/* - 集群安装配置(包括Hadoop)。
conf-quickstart/* - 快速启动相关配置。
extensions/* - Druid扩展。
hadoop-dependencies/* - Druid hadoop依赖。
lib/* - Druid核心软件包。
quickstart/* - 快速启动示例文件及数据。




 
5、启动 Druid 准备
   启动Druid相关服务之前,我们需要做两件事:   1. 启动Zookeeper   2. 切换到Druid根目录,执行 bin/init
 
6、启动 Druid 相关服务
   启动5个Druid进程在不同远程终端窗口,因为是单机模式,所有进程在同一服务器上;在大的分布式集群中,很多Druid进程可以在同一服务器,我们需要启动的5个Druid进程:Historical、Broker、coordinator、overlord、middleManager。overlord与middleManager对应Indexer节点,节点相关介绍请查看《//yangyangmyself.iteye.com/blog/2320502》,后续将会详细介绍节点工作机制。
    
    切换至Druid安装目录,在不同远程终端窗口依次执行以命令


Java代码  



java `cat conf-quickstart/druid/historical/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/historical:lib/*" io.druid.cli.Main server historical  
java `cat conf-quickstart/druid/broker/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/broker:lib/*" io.druid.cli.Main server broker  
java `cat conf-quickstart/druid/coordinator/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/coordinator:lib/*" io.druid.cli.Main server coordinator  
java `cat conf-quickstart/druid/overlord/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/overlord:lib/*" io.druid.cli.Main server overlord  
java `cat conf-quickstart/druid/middleManager/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/middleManager:lib/*" io.druid.cli.Main server middleManager  


 
Druid 控制台 
   如果上述服务启动成功,则可以访问如下控制台   1. 访问//localhost:8090/console.html 可以查看数据批量导入Druid的任务执情况,间隔一段时间刷新一下控制台,如果看到SUCCESS任务状态,说明任务执行成功,如下图所示:     2. 访问//localhost:8081/ 查看任完成进度、数据分片情况、索引创建等  
 
7、Druid 加文件数据
   以上Druid相关服务启动后,我们需要加载相关业务数据到Druid,Druid根据数据加载的配置文件,将我们的原始业务数据做相应的预处理后进行存储,以便后续查询统计。数据加载有两种方式:一是实时加载;二、加载批文件,本节讲如何加载Json批数据文件。   Linux环境下加载数据文件,执行方式如下:
 


Pass.json代码  



{"gcxh":"430000002745468976","license":"测AZ6LUL","licenseType":"02","hpys":"5","csys":null,"cllx":"0","clpp":null,"gateId":"430186000347","fxlx":"8","cdbh":"1","passTime":"2016-07-03T20:23:17.000Z","carPassDate":"2016-07-04","carPassTime":"04:23:17","carLoc":"测A","province":"43","city":"4301","region":"430186"}  




Pass-index.json代码  



{  
  "type" : "index_hadoop",  
  "spec" : {  
    "ioConfig" : {  
      "type" : "hadoop",  
      "inputSpec" : {  
        "type" : "static",  
        "paths" : "/opt/data/pass.json" /**指定数据*/  
      }  
    },  
    "dataSchema" : {  
      "dataSource" : "kakou",  /**数据源名,类似表名*/  
      "granularitySpec" : {  
        "type" : "uniform",  
        "segmentGranularity" : "day", /**数据分片粒度,按天*/  
        "queryGranularity" : "none",  
        "intervals" : ["2016-07-04/2016-07-05"] /**时间跨度*/  
      },  
      "parser" : {  
        "type" : "string",  
        "parseSpec" : {  
          "format" : "json",  /**数据文件类型*/  
          "dimensionsSpec" : {  
            "dimensions" : [  /**数据列*/  
              "license",  
              "carLoc",  
              "licenseType",  
              "hpys",  
              "cllx",  
              "clpp",  
              "gateId",  
              "fxlx",  
              "passTime",  
              "carPassDate",  
              "carPassTime",  
              "province",  
              "city",  
              "region"  
            ]  
          },  
          "timestampSpec" : {   
            "format" : "auto",  
            "column" : "passTime"  /**指定时间分段*/  
          }  
        }  
      },  
      "metricsSpec" : [     
        {  
          "name" : "count",  
          "type" : "count"  /**按count聚合*/  
        }  
      ]  
    },  
    "tuningConfig" : {  
      "type" : "hadoop",  
      "partitionsSpec" : {  
        "type" : "hashed",  
        "targetPartitionSize" : 5000000  
      },  
      "maxRowsInMemory":500000,  
      "jobProperties" : {}  
    }  
  }  
}  


 
将上述Json示例数据保存为pass.json的文件,接下来定义一个数据配置文件pass-index.json,在pass-index.json中引用数据pass.json、指定数据源名(类似表名)、数据维度列、聚合粒度、时间间隔等。
 


Java代码  



/**执行如下命令进行导入操作*/  
curl -X ‘POST‘ -H ‘Content-Type:application/json‘ -d @/opt/data/pass-index.json 192.168.121.200:8090/druid/indexer/v1/task  



 
8、Druid 数据导入问题及解决办法
1. 中文乱码:Json规范这里不再阐述,讲一下生成Json数据文件注意的情况,目前发现Json中含有中文情况下,将Json数据加载到Druid时出现乱码。生成Json指文件编码为UTF-2. 时间序列值:Druid按时间进序列值进行数据分片,按时间字段进行数据分片的字段值需要标准化(UTC)处理。3. 任务挂起或等待:Druid将任务提交给Hadoop中的Map-Reduce执行,导入时任务可会因为某种原因导致任务挂起或停止。
 
   中文乱码解决办法: 


编码代码  



try{  
    OutputStream out = new FileOutputStream(new File("E:\\study\\druid\\rpass_20150801.json"),true);  
    Writer write = new OutputStreamWriter(out,"utf-8");  
    write.write(json.toString()+"\n");  
    write.flush();  
    write.close();  
    out.close();  
}catch(){  
    e.printStackTrace();  
}     

    时间序列值UTC标准化: 


Java代码  



/**引用Joda类库*/  
DateTimeFormatter dtFormatter=DateTimeFormat.forPattern("yyyy-MM-dd hh:mm:ss");    
/**输出结果 2016-08-29T22:58:20.000Z*/  
String result = dtFormatter.parseDateTime(‘2016-08-29 22:58:20‘).withZone(DateTimeZone.UTC).toString();   

    任务挂起或停止解决办法:可以通过下述命将挂起任务删除,重新执行导入。 


Java代码  



/**taskId可以从控制台获取或在执行Curl导入命令时返回值*/  
//<OVERLORD_IP>:<port>/druid/indexer/v1/task/{taskId}/shutdown   

9、Druid 请求接口
1. 查询请求接口对应Broker,默认8082端口 //<queryable_host>:<port>/druid/v2/?pretty2. 数据导入接口对应Indexing,默认8090端口 //<OVERLORD_IP>:<port>/druid/indexer/v1/task



   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据分析频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程