flink虚拟内存不足

1.现象 flink任务提交任务虚拟内存不足导致的失败 Container [pid=3007,containerID=container_1599018748796_0004_01_000004] is running 342252032B beyond the 'VIRTUAL' memory limit. Current usage: 416.0 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container. 2.原因 因为yarn强制检查虚拟内存是否符合配置导致的,当我们的服务器或者虚拟机的内存达不到配置要求,可能就会报这个错误 。 3.解决 修改检查虚拟内存的属性为false <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>

2024年8月3日 · 1 分钟

flink查看stdout日志

问题: flink的web管理界面在日志过大时无法加载且无法下载 解决: 复制该任务task manager的container编号 container_e01_1675618892497_0264_01_000003 远程登录该task manager所在服务器 使用命令查询进程 ps -ef | grep taskmanager | grep -v "bash -c" |grep container_e01_1675618892497_0264_01_000003 进入该目录 各文件用途 taskmanager.out:业务侧的输出文件,该文件中的内容一般是业务代码中,使用算子的print()方法或者使用java的System.out.print()产生的内容,与前台的taskmanager输出打印内容一致 taskmanager.log就是运行中的taskmanager的日志 taskmanager.err :taskmanager中出错时候的异常信息 gc.log.x.current:taskmanager的gc日志

2024年7月20日 · 1 分钟

ES映射hive数据类型date无法解析

在es中数据类型为date: "addTime": { "format": "yyyy-MM-dd HH:mm:ss", "type": "date" } 在hive建映射表 CREATE EXTERNAL TABLE hive_es.cty_test1( addTime date ) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'cty_test/cty_test', 'es.nodes'='172.16.98.113,172.16.98.149,172.16.98.150,172.16.98.151,172.16.98.152', 'es.port'='9200', 'es.mapping.names'= 'addTime:addTime', 'es.date.format'='yyyy-MM-dd HH:mm:ss', 'es.index.auto.create'='false', ) 查询报错: 更改hive表数据类型为string CREATE EXTERNAL TABLE hive_es.cty_test5( addTime string ) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'cty_test/cty_test', 'es.nodes'='172.16.98.113,172.16.98.149,172.16.98.150,172.16.98.151,172.16.98.152', 'es.port'='9200', 'es.mapping.names'= 'addTime:addTime', 'es.date.format'='yyyy-MM-dd HH:mm:ss', 'es.index.auto.create'='false', ) 查询继续报错: 查阅资料: elasticsearch-hadoop中用于将ES中的日期转换为Hive中的日期格式的类为org.elasticsearch.hadoop.hive.HiveValueReader,通过查看该类的源码,其实现的用户日期转换的方法为: @Override protected Object parseDate(String value, boolean richDate) { return (richDate ? new TimestampWritable(new Timestamp(DatatypeConverter.parseDateTime(value).getTimeInMillis())) : parseString(value)); } 可以看到它是通过javax.xml.bind.DatatypeConverter.parseDateTime(String)方法将对应的日期字符串转换为日期的,该方法不支持的日期字符串格式为“yyyy-MM-dd HH:mm:ss”的字符串,它支持的日期字符串的格式为“yyyy-MM-ddTHH:mm:ss”这样的。 解决方案: 在建表时设置参数’es.mapping.date.rich’=‘false’,然后hive字段类型设为string。 官方解释: Whether to create a rich Date like object for Date fields in Elasticsearch or returned them as primitives (String or long). By default this is true. The actual object type is based on the library used; noteable exception being Map/Reduce which provides no built-in Date object and as such LongWritable and Text are returned regardless of this setting. ...

2024年7月6日 · 1 分钟

dolphin踩坑

一个sql节点只能写一条sql且结尾不能写分号 使用sql节点时由于dolohin写了hive的预编译,某些时候变量不能正确传入,比如 location ‘xxxxx${变量名}’,在预编译过程中会直接变成 location ‘xxxxx?’ **解决方案:**把sql节点替换成shell节点用hive -e ‘………….. location ‘xxxxx${变量名}’来实现变量传参 节点开启非严格模式,从节点偶尔会失效 **解决方案:**每个需要动态分区的sql都加上设置非严格模式的前置sql sql节点无法使用hive永久注册的udf **解决方案:**在dolphin资源中心上传udf并创建(会注册成临时udf) sql节点使用 REPLACE函数会有bug,导致任务流无法保存 **解决方案:**使用REGEXP_REPLACE函数 sql节点添加扩展jar包,无法使用本地路径 **解决方案:**需要先上传jar到hdfs,然后加上hdfs://nameservice1/前缀

2024年6月22日 · 1 分钟

部署CDH踩坑总结

1.zookeeper刚启动时会报错,晾它两分钟会就好了 2.更改或迁移服务时一定要切换到维护模式并停止当前服务!!! 3.cdh01的hadoop组件起不来,原因是一些文件夹的权限问题,更改权限并且更改拥有者及组(参照其他服务器) 4.内存不足主要因为NodeManager内存调的太高,调小即可(个人经验,5台机器可用内存和为30*4+20=160G,可同时对20G的数据做处理,感觉够用了) 5.oozie报错:Failed to install Oozie ShareLib,这个问题是cdh6.2的通病,只要安装oozie就会 出现(无论是升级,还是新装。 解决: cd /opt/cloudera/parcels/CDH/lib/oozie/libtools ln -s ../../../jars/logredactor-2.0.7.jar logredactor-2.0.7.jar 执行完后重启oozie。 6.oozie端口号11000冲突,改为11002 7.从节点不要提前安装agent服务!!!直接在web界面安装! 8.把CM和CDH装好后面就轻松多了 9.==主机名不要出现下划线!==

2024年6月8日 · 1 分钟

sql中!=的陷阱

mysql/SQL server有,clickhouse也有,hive未验证。 null 值的比较这里另外说下 SQL 里 null 值的比较,任何与 null 值的比较结果,最后都会变成 null,以PostgreSQL为例,如下:select null != null; select null = null; select null > 1; select null <> 1; 以上结果都是 null,而不是什么 true 或者 false。另外有些函数是不支持 null 值作为输入参数的,比如count()或者sum()等。 在写 SQL 条件语句时经常用到 不等于 != 的筛选条件。此时要注意此条件会将字段为 Null 的数据也当做满足不等于的条件而将数据筛选掉。(也就是说会忽略过滤掉为 null 的数据,导致数据不准确)。 SELECT * FROM A WHERE B1 != 1 不会查出null值 修改: SELECT * FROM A WHERE B1 != 1 OR B1 is Null SELECT * FROM A WHERE IFNULL(B1,'') != 1 为什么会这样呢?这还得从 mysql 的底层开始说起,因为 NULL 不是一个「值」,而是「没有值」。 「没有值」不满足「值不等于1」这个条件,怎么解决可以使用 ifnull() 方法,将 null 转为空字符串,或者这个字段做出判断 加上OR a is null。当然使用 ifnull 相率会更好 select null = null返回也是null。null只能用is或is not

2023年8月6日 · 1 分钟

Hive 字段中文注释乱码

Hive 字段中文乱码,如执行 show create table xxx 时,表级别注释、字段级别注释发现有乱码现象(都是????), 一般都是由 hive 元数据库的配置不当造成的。 此时可按如下步骤进行配置调整: 登录 hive 的元数据库 mysql 中: 1、设置 hive 元数据库字符集 show create database hive; 查看为 utf8,需变更为 latin1 _alter database hive character set latin1; 2、更改如下表字段为字符集编码为 utf8 ①修改表字段注解和表注解 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8 alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ② 修改分区字段注解: alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ; alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8; ③修改索引注解: alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8; ...

2022年8月7日 · 1 分钟

取消HDP hive默认开启ACID配置

问题描述 原因排查 HDP 的 hive 使用的版本较高为3.1.0 ,默认建表都是使用 ACID 的事务表。而 HDP的spark版本较低为2.3 目前还不支持 hive 的 ACID 功能,因此无法读取 ACID 表的数据,准确来说是内表的数据。 官方资料 spark issues 地址: SPARK-15348 Hive ACID 解决方案 修改hive以下配置,重启hive hive.strict.managed.tables =false hive.create.as.insert.only =false metastore.create.as.acid =false 其他资料 Hive 中支持的表类型和 ACID 特性 表类型 ACID 文件格式 插入 更新 / 删除 托管表:CRUD 事务 是 ORC 是 是 托管表:仅插入式事务 是 任意格式 是 没有 托管表:临时 没有 任意格式 是 没有 外部表 没有 任意格式 是 没有 查看表的属性,指令:desc formatted tb_name ...

2022年3月20日 · 2 分钟