自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

攻城狮Kevin

爱学习,爱工作,爱生活

  • 博客(289)
  • 资源 (2)
  • 收藏
  • 关注

原创 Spark优化——推测执行机制

Spark job中,一个stage什么时候完成,取决于stage下最后一个task的完成时间。task的完成时间也被很多因素影响,比如partition的分配,executor的资源使用情况,host的运行状态,集群网络等等。很多情况下因为运行环境导致的task跑的过慢,或者直接卡死,让task可以重新跑起来是可以缓解这个问题的,也就是Spark中的推测执行机制(speculation)。--conf spark.speculation=true--conf spark.speculation

2020-06-03 17:14:16 1119

原创 HiveSql性能优化

一、解决数据倾斜1. 过滤掉null部分key值存在大量空字段,会hash到同一reduce,造成reduce长尾,将null 值过滤掉举例: select user_id from logs where statdate = '20170815' where user_id is not null;2. hive join倾斜:设置join skew参数解决set hive.optimize.skewjoin = true;set hive.skewjoin.key = sk

2020-06-03 16:00:03 585

原创 Druid查询标签的各标签值uv及合并uv

一、Druid查询某一标签,各标签值的uv{ "queryType":"groupBy", "dataSource":"XXXX_enum_metric", "granularity":"DAY", "filter":{ "type":"and", "fields":[ { "type":"selector", "dimension":"tag_name", "value": "...

2020-06-03 15:46:25 290

原创 HiveSql中limit10的坑——对大数据量的表查询加group by

一般查询hive表中某个字段是否存在某个值,会使用如下查询语句select * from 表名 where dt=XXXX and 字段 like '%某个值%' limit 10;这种比较适合hive表数据量较小的情况,出现limit10,hive会默认判断此表数据量不大,只开启一个map进行查询,如果对于大表,比如好几百G上T的数据量,这么大的数据量只开一个map一方面查询慢,另一方面,因为数据量太大容易把机器跑崩。采用以下方式即可,加上group by,然后就会依据hive表的文件

2020-06-03 15:16:16 7148

原创 SparkSubmit提交参数(日常版)

--master yarn--deploy-mode cluster--queue XXXX--name ${spark_job_name}--executor-memory 8G--num-executors 32--executor-cores 4--conf spark.yarn.executor.memoryOverhead=4G--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console".

2020-06-03 15:09:10 468

原创 Spark常用提交脚本

#!/usr/bin/env bashinput="XXXX" output="XXXX"sday="XXXX"id_type="XXXX"tag_origin_short_name="XXXX"name=dataToES_testif [ ! -d "/opt/log/wangxuan/norman/${sday}/${id_type}/${tag_origin_short_name}/sparkESLog" ]; then mkdir -p /opt/log/wangxuan/.

2020-06-03 15:08:51 610

原创 Druid支持枚举型和连续数值型标签分析——直方图/分位数

依据Druid对标签数据做分析时,将标签数据依据数据类型拆分成两个大类:枚举型和连续数值型,枚举值指标签值都为字符串,连续数值型指标签值都为数值型。Druid数据源表的结构如下CREATE TABLE `XXXX.XXXX_druid_enum/number_input`( `tag_name` string COMMENT '标签名', `tag_value` string COMMENT '标签值', `id_str` string COMMENT '用户id', `dt

2020-06-01 18:32:41 458

原创 log.info

import org.slf4j.Logger;import org.slf4j.LoggerFactory;logger.info("get records list:{}", JSONHelper.toJSON(userPackageList));

2020-05-22 17:12:02 3116

原创 每隔半点清理一次ES缓存脚本

ES清空所有索引的缓存POST _cache/_clearES清空指定索引的缓存POST /{_index}/_cache/_clear通过脚本来清理缓存如下#!/bin/bash# 为防止ES查询缓存过大,每半点清除一次缓存curl -uES访问账号:ES访问密码 -s -XPOST "http://ES访问域名:ES访问密码/_cache/clear"exit 0然后利用crontab控制每隔半点执行一次清理缓存脚本即可*/30 * * * * /全..

2020-05-22 15:48:24 1028 1

原创 运行jar包指定java的主类名,运行其main方法

在jar包中,META-INF目录下,修改MANIFEST.MF文件Manifest-Version: 1.0Main-Class: 主类名全路径

2020-05-21 14:40:23 6095 1

原创 ES删除别名、删除索引、添加副本、修改interval时间等操作的脚本

#!/bin/bashif [ $# -eq 1 ]; then day=$1else day=`date +"%Y%m%d" -d"-1 days"`fiesType="_doc"esIndex="ES索引名前缀"esIndexName=${esIndex}_${day}/${esType}name=dataToES_${day}userandkey=ES访问账号:ES访问密码ipAndPort=ES访问域名:ES访问端口#添加当天日期的索引别名使查询有效#保.

2020-05-21 14:26:39 1675

原创 ES通过脚本自动化删除、创建索引,及mapping基础配置

利用java代码删除ES索引、创建ES索引public class smartNormanCreateOnlineIndex { public static void main(String[] args) throws Exception { String user_id_types = args[0]; String tag_origin_short_name = args[1]; String dt = args[2];

2020-05-21 14:16:04 597

原创 Druid压测和数据摄入优化

Druid压测结论: 1.“枚举型”和“连续数值型”在当前业务数据量级(500G左右)下摄入和查询功能可轻松支撑,摄入时长可保证30分钟以内,查询用时可保证200ms以内。 2.10倍于当前业务数据量级下,枚举型摄入时长可优化至2小时,连续数值型可优化至40分钟,查询用时可保证200ms以内。Druid数据摄入优化经验1.对HDFS文件开启gz压缩,测试gz格式比lzo格式入库要省30%的时间,因为数据压缩率变大。2.对tuningConfig里的"targetParti...

2020-05-20 15:25:55 435

原创 ES自动负载均衡、分片迁移的表现

当发现某个索引并没有数据写入,但其indexing Rate的数值并不为0 /s的时候,一般是集群在做负载均衡,或者正在给索引添加副本,把该索引的数据,将数据从多数据量的节点,迁移一部分至低数据量的节点。...

2020-05-19 17:42:51 2039

原创 ES踩坑——提高写入性能之集群负载均衡

还是往ES集群写入耗时太长,速率太慢的问题,当文档id,即_id自定义指定的情况下,由于每条文档往ES写入时,会对_id进行hash分配其写到哪个节点的主分片上,这样有可能出现写偏了的情况,即集群某台节点的负载特别高,所以一般建议_id让ES自动设置。当集群某台节点负载特别高时,集群会自动进行负载均衡,将某个数据量异常大的主分片数据迁移至其他分片,这个负载均衡过程是很耗集群写入性能的,当多份数据往集群写入时,有可能因为集群的负载均衡占用太多资源,导致写入速率过慢。这种情况可以设置某.

2020-05-18 20:48:47 2540

原创 ES踩坑——提高写入性能之合理安排加副本和删索引的时机

问题表现是:ES集群的cpu和负载都非常低,几乎与无数据写入时一致,indexing rate也很低,基本在2000-5000左右;但是此时有6个大数据量的任务在并行往ES集群各自的索引写入,但是耗时都严重变长,比如正常1h运行完毕的写入任务可以变成14h才运行完毕。问题解决如下:正常在ES写入时,会把索引副本关闭,写完后再加副本。但是当多个数据源,同时并行往一个ES集群的多个索引写入数据时,如果流程设计为:数据源写入ES -> 写入完毕 -> 加副本、删除过期索引.

2020-05-18 20:43:36 1760

原创 Arrays.asList()将数组转list

if (splitList.contains(tagKey)) { val tmpList = String.valueOf(tagValue).split("\\|").filter(!_.equals("")) tagValueArr.addAll(util.Arrays.asList(tmpList))} else { tagValueArr.add(tagValue)}split拆分出数组,然后ava.util.Arrays.asList(Array),将数组转换成list集合.

2020-05-15 10:51:25 763

原创 Spark flatMap算子扁平化数据

/*4. hive表数据扁平化(画像id,faid)*/val id2ffaid = rawData.flatMap(x => {val arr = x.split(splitType, -1)val mergeId = arr(0)val faid = arr(2)val strs = mergeId.split("\\|", -1)val ids = strsval listBuffer = new ListBuffer[(String, String)]for (i &l.

2020-05-14 16:25:29 675

原创 【Hive】解析json(get_json_object)

get_json_object(string json_string, string path)说明:第一个参数填写json对象变量,第二个参数使用$表示json变量标识,然后用 . 或 [] 读取对象或数组;如果输入的json字符串无效,那么返回NULL。每次只能返回一个数据项。举例:data 为 test表中的字段,数据结构如下:data ={"store": { "fruit":[{"weight":8,"type":"apple"},...

2020-05-11 17:55:45 1970

原创 针对ES对于upsert和nested嵌套类型数据支持不友好的一种解决方案

index模式入库ES索引:新写入的文档,会在ES索引中查找_id是否存在,不管存在不存在,都会直接覆盖;upsert模式入库ES索引:新写入的文档,会在ES索引中查询_id是否存在,如果不存在则覆盖,如果存在则取出原始文档里的数据(版本1),补上新增文档的数据,合并后生成的数据(版本2)重新写入_id文档,并同时删掉版本1的文档原始数据。所以ES对于upsert模式更新入库的支持性能并不是很好,数据量小,且索引里没有数据的时候影响不大,但是数据量大,且索引里已经存在数据的时候影响较

2020-05-09 20:52:40 1701

原创 Spark调优sc通过textFile读取文件后repartition

在spark中,读取hdfs文件sc.textFile("hdfs路径"),其底层调用的是hadoopFile来获取hdfs路径的数据,1. 对于textFile文件,会做切分,128M一个block,作为一个分区读取过来,形成一个task,2. 对于常见的lzo文件,lzo文件是不支持切分的,所以当一个lzo文件交给一个task去处理时,可能某个lzo文件过大,会导致所有tasks的整体进度被某个task拖慢亲测读取lzo文件,在spark代码中,就算加上切分参数,也不生效(后面是字节数

2020-05-09 20:31:45 2211

原创 ES的数据写入原理,refresh和flush

数据写入ES集群,主要是经过以下2个主要步骤:1. 读取数据 -> 验证(master节点分发给data节点处理,或直接访问data节点主分片)2. 同时写入buffer缓冲区和translog日志文件 -> 生成segment file -> 合并小segment file生成大segment file -> 将合并的segment file刷写到系统缓存,此时...

2020-05-07 15:16:43 6614

原创 java程序报错Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.ReflectionUtil

异常如下:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/log4j/util/ReflectionUtil......Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.util.Reflec...

2020-05-06 10:27:40 15933 3

原创 Spark程序将Json数据写入ES索引的配置参数详解

1."es.http.timeout" -> "5m""es.http.retries" -> "50"这两个参数是控制http接口层面的超时及重试,覆盖读请求和写请求,默认值比较小,默认超时时间为1分钟,重试次数为3,建议调整为超时时间5分钟,重试次数50次。2."es.nodes.wan.only" -> "true""es.nodes.dis...

2020-04-23 20:00:09 2894 2

原创 Spark程序将Json数据写入ES索引

采用import org.elasticsearch.spark.rdd.EsSpark的相关API,将Json格式的数据写入Es索引中需要引入的依赖在最后面<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-hadoop&lt...

2020-04-23 17:46:49 1569 1

原创 Spark将Json数据写入ES报权限错误:action [cluster:monitor/nodes/info] is unauthorized for user

使用org.elasticsearch.spark.rdd.EsSpark的APIEsSpark.saveJsonToEs(mergeData, esIndexName, esConf)将Json数据写入ES集群,报错信息如下:org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest: org.elasticsearch.hadoo...

2020-04-23 17:35:39 3719

原创 Mysql中数据存在空格的问题

mysql中存入数据时,是允许带空格的,因此录入数据时需要小心,避免行尾存在空格的情况比如对于下面buyway,光标处可以看到其实多了一个空格从mysql查数的时候,查询的结果如下:{"buyway ":"1","cate ":"1","city":"1","end ":"1","start":"1"}可以看到buyway、cate和end后面都有空格,然后如果判断某个js...

2020-04-22 01:47:07 4969

原创 对nested嵌套字段和普通字段,ES数据写入时mapping中未设定也会自动兼容

例如我的mapping中,对于嵌套对象的结构如下:"58sy_activity": { "type": "nested", "properties": { "cooling_score": { "type": "keyword" }, "label_n": { "type": "keyword" }, "tag_valu...

2020-04-21 22:35:19 1840

原创 StringBuilder转Json遇到的坑,创建ES索引报index patterns are missing异常

org.json使用的时候,想把jsonString转jsonObject;可以用new JsonObject(String)但是如果用new JsonObject(StringBuilder),转换成的json为空。测试代码如下:public class Test { public static void main(String[] args) { Stri...

2020-04-21 17:36:55 2117

原创 Set集合在for循环中调用只生效1次的问题

如果Set集合声明在for循环代码之外,则Set集合的元素在for循环里,只会被调用一遍,调用完毕后,Set集合就释放掉了,测试代码如下:object test { def main(args: Array[String]): Unit = { val jsonstr = "{\"tag_value\":\"9.0\",\"pay_type\":\"a\"}" val j...

2020-04-20 22:30:39 1185

原创 Spark和Hive处理数据倾斜的两种解决方案

比如处理80TB的数据,partition数量为15000,理论上平均每个节点是5-6G的数据,但是实际上根据key-value在存储时,很有可能因为某个key的数量特别多,导致数据倾斜。这样就会出现超过物理内存限制的报错。偶尔重试可能会通过,但是会比较不稳定;目前我们这边的两种解决办法是:1. 如果倾斜的key数量比较少,那么过滤出来,对其进行单独处理;2. 如果倾斜的key数量比较多...

2020-04-20 15:02:34 683

原创 IDEA中jar包没有引进来报Cannot resolve symbol解决方案

IDEA莫名其妙的jar包全部识别不了,如下图:对整个项目clean package,然后刷新;或者对当前项目reimport都没用。点击菜单中的 “File” -> “Invalidate Caches / Restart”,然后点击对话框中的 “Invalidate and Restart”,清空 cache 并且重启;也没用。然后对这个链接里的方法全部试了也没用:Int...

2020-04-19 17:13:04 2257

原创 mysql更新子查询的某一列值,sql语句写法

首先我依据子查询语句查询出数据:SELECT a.id, a.tag_en, a.tag_value_analysis_type, a.tag_project_id FROM t_smart_tag_meta a INNER JOIN tags_and_attributes_relations ...

2020-04-09 18:22:54 1526

原创 spark代码中过滤出异常的数据记录

读取hdfs文件,对每一行做处理,有的行处理的时候,解析不成功,需要导出解析不成功的数据行记录用如下代码:val rowData = sc.textFile(inputPath).filter(x => { val arr = x.split(splitType, -1) val faid = arr(0) val tagkv = arr(1)...

2020-04-08 20:31:43 1313 2

原创 net.sf.json包的json使用时,报JSON keys must be Strings的问题

在spring boot的项目中,由于二次序列化,fastjson解析数据落盘至HDFS路径时,会造成反斜杠\换用net.sf.json.json可以解决这个问题但是net.sf.json.json对于两种json解析不成功,一种是key为"null"的情况,另一种是key中存在\“XXX”反斜杠导致解析不成功的情况报错如下:具体解析使用的是val json = JSON...

2020-04-08 19:35:03 968

原创 HiveSql使用max函数失效的问题,返回结果999

表中一共两个字段,tag_name和tag_value,查询出指定tag_name下,tag_value值最大的记录通过以下sql语句,查询出结果为999,不正常select tag_name, max(a.tag_value) from (select tag_name, tag_value_num fromhdp_teu_dpd_feature_db.da_wanxiang_dr...

2020-03-20 19:40:27 4960 4

原创 Shell脚本判断HDFS路径是否存在,且判断其是否为空(hive表是否没数据)

hadoop命令中,-test的用法-test -[defsz] <path> : Answer various questions about <path>, with result via exit status. -d return 0 if <path> is a directory. -e return 0 if <...

2020-03-15 03:42:03 2836 2

原创 限制Spark往HDFS写出数据时,生成_SUCCESS文件

用hive生成数据的时候,是没有_SUCCESS文件的。但是MR和Spark程序落盘后都会有这么个文件,代表程序运行成功。举个例子,比如我们有两个spark任务:A任务和B任务。B任务依赖于A任务,也就是说B任务要根据A任务的结果再判断是否运行。这时我们就可以根据A任务的输出目录下是否有_SUCCESS文件来判断A任务是否运行成功。但是在HDFS数据往Druid里摄入的时候,有_SUC...

2020-03-10 17:55:21 5558

原创 通过Spark任务将数据写入ES报错——ES节点ip错误

报错如下org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error (check network and/or proxy settings)- all nodes failed; tried [[10.162.7.17:9219, 10.162.7.18:9219, 10.162.7.16:921...

2020-02-28 10:53:26 1905

原创 自定义指定hive生成的文件数

在hiveSql中指定生成的文件个数用到的参数如下:SET mapred.reduce.tasks=1001;但是单独加此参数,文件数并不会变成1001,为什么呢?其实是hive默认在mapReduce结束时合并小文件所致,因此需要加入以下两个参数:set hive.merge.mapfiles=false;(默认为true)set hive.merge.mapredfil...

2020-02-24 17:00:38 3450

1ARCGIS工具条-启动窗口及主界面的构成

1ARCGIS工具条-启动窗口及主界面的构成,1ARCGIS工具条-启动窗口及主界面的构成,1ARCGIS工具条-启动窗口及主界面的构成

2020-11-19

win10下编译过的hadoop2.7.2 jar包

win10下编译过的hadoop2.7.2 jar包,配置hadoop客户端环境必备

2018-11-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除