当前位置: 首页 > news >正文

华为开源carbondata中的使用问题处理

carbondata中的使用问题处理
Q:什么是不良记录?

A:由于数据类型不兼容而无法加载到CarbonData中的记录或为空或具有不兼容格式的记录被归类为不良记录。
Q:CarbonData中的不良记录存储在哪里?

A:不良记录存储在carbon.properties文件的carbon.badRecords.location中设置的位置。
Q:如何启用不良记录日志?

A:在加载数据时,我们可以指定处理不良记录的方法。 为了分析错误记录的原因,必须将参数BAD_RECORDS_LOGGER_ENABLE设置为TRUE。可以通过参数BAD_RECORDS_ACTION指定多种处理错误记录的方法。
• 使用NULL值填充不正确的CSV行值并加载 在CarbonData中的数据中,在查询中设置以下内容:‘BAD_RECORDS_ACTION’=‘FORCE’
• 要在原始CSV中写入错误记录而不用NULL填充不正确的值(在参数carbon.badRecords.location中设置),请设置以下内容 在查询中:‘BAD_RECORDS_ACTION’=‘REDIRECT’
Q:如何忽略不良记录?

A:若要忽略不良记录以免它们存储在原始csv中,我们需要在查询中设置以下内容:‘BAD_RECORDS_ACTION’=‘IGNORE’。
Q:创建Carbon会话时如何指定存储位置?

A:Carbon数据使用创建Carbon会话时指定的存储位置来存储元数据,如架构,字典文件,字典元数据和排序索引。
尝试使用以下指定的storepath创建carbonsession 方式:val carbon = SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession(<store_path>)
Example: val carbon = SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession(“hdfs://localhost:9000/carbon/store”)
Q:什么是Carbon锁类型?

A:Apache CarbonData获取文件上的锁,以防止并发操作修改相同的文件。 锁的类型取决于存储位置,对于HDFS,我们将其指定为HDFSLOCK类型。 默认情况下,它设置为LOCALLOCK。 属性carbon.lock.type配置指定在表的并发操作期间要获取的锁的类型。 可以使用以下值设置此属性:LOCALLOCK-此锁定在本地文件系统上作为文件创建。 当一台机器上仅运行一个Spark驱动程序(旧式服务器)并且没有同时启动其他CarbonData Spark应用程序时,此锁定很有用。 HDFSLOCK:此锁在HDFS文件系统上作为文件创建。 当启动多个CarbonData Spark应用程序并且集群上没有任何ZooKeeper运行且HDFS支持基于文件的锁定时,此锁定很有用。
Q:如何解决抽象方法错误?

A:为了构建CarbonData项目,必须指定Spark版本。使用Maven生成项目时,需要指定Spark版本。
Q:在异常情况下执行插入操作时,Carbon的行为如何?

A:Carbon支持插入操作,可以参考DML Operations on CarbonData中提到的语法。首先,在spark-sql中创建一个源表,并将数据加载到该创建的表中。

CREATE TABLE source_table(id String,name String,city String)ROW FORMAT DELIMITED FIELDS TERMINATED BY “,”

SELECT * FROM source_table;
id name city
1 jack beijing
2 erlu hangzhou
3 davi shenzhen

场景 1:
假设carbon表中的列顺序与源表中的列顺序不同,使用脚本“ SELECT * FROM碳表”进行查询,将获得与源表类似的列顺序,而不是像期望中那样在carbon表中列顺序。

CREATE TABLE IF NOT EXISTS carbon_table(id String,city String,name String)STORED BY ‘carbondata’;

INSERT INTO TABLE carbon_table SELECT * FROM source_table;

SELECT * FROM carbon_table;
id city name
1 jack beijing
2 erlu hangzhou
3 davi shenzhen

结果显示,第二列是carbon表中的城市,但里面是名称,例如jack。此现象与将数据插入到hive表中相同。如果要将数据插入到carbon表中的相应列中,则必须在插入语句中指定相同的列顺序。

场景 2:

当Carbon表中的列数与select语句中指定的列数不同时,插入操作将失败。以下插入操作将失败。

INSERT INTO TABLE carbon_table SELECT id, city FROM source_table;

场景 3:
carbon表中的列类型与select语句中指定的列不同时。插入操作仍然会成功,但是您可能会得到NULL,因为在转换类型失败时NULL将是替代值。
Q:为什么聚合查询没有从聚合表中获取数据?

A:以下是无法从汇总表中获取数据的汇总查询:

方案1:当查询中存在SubQuery谓词时。

create table gdp21(cntry smallint, gdp double, y_year date) stored by ‘carbondata’;
create datamap ag1 on table gdp21 using ‘preaggregate’ as select cntry, sum(gdp) from gdp21 group by cntry;
select ctry from pop1 where ctry in (select cntry from gdp21 group by cntry);

方案2:当聚合函数与“ in”过滤器一起使用时。

create table gdp21(cntry smallint, gdp double, y_year date) stored by ‘carbondata’;
create datamap ag1 on table gdp21 using ‘preaggregate’ as select cntry, sum(gdp) from gdp21 group by cntry;
select cntry, sum(gdp) from gdp21 where cntry in (select ctry from pop1) group by c

方案3:当聚合函数具有“ join”且过滤条件相等时。
create table gdp21(cntry smallint, gdp double, y_year date) stored by ‘carbondata’;
create datamap ag1 on table gdp21 using ‘preaggregate’ as select cntry, sum(gdp) from gdp21 group by cntry;
select cntry,sum(gdp) from gdp21,pop1 where cntry=ctry group by cntry;
Q:为什么即使在驱动程序端Dataload Command失败后,所有执行程序仍在Spark UI中显示成功?

A:在最大重试尝试次数后,Spark executor显示任务失败,但是加载具有不良记录的数据并将BAD_RECORDS_ACTION(carbon.bad.records.action)设置为“ FAIL”将仅尝试一次,但会向驱动程序发送信号给失败 而不是抛出异常重试,因为如果发现不良记录并且BAD_RECORDS_ACTION设置为失败,就没有重试的可能性。因此,Spark执行程序将这一尝试显示为成功,但是命令实际上执行失败。 可以检查任务尝试或执行程序日志以观察失败原因。
Q:为什么查询SDK Writer输出时选择查询输出的时区结果不同?

A:SDK Writer是一个独立的实体,因此SDK Writer可以从具有不同时区的非群集计算机生成Carbondata文件。 但是在群集中,当读取这些文件时,它总是占用群集时区。 因此,时间戳记和日期数据类型字段的值不是原始值。 如果要在写入时控制数据的时区,请通过调用以下API在SDK Writer中设置集群的时

相关文章:

  • gma 2.0.3 (2023.11.12) 更新日志
  • 谷歌插件报错 Manifest version 2 is deprecated, and support will be removed in 2023.
  • 手写C++ 实现链表的反转、删除、合并
  • 和数链“分布式存储”技术结合隐私计算让数据更安全
  • 【龙芯固件】ACPI——简介
  • Java必刷入门递归题×5(内附详细递归解析图)
  • 125. 验证回文串(力扣oj)
  • 案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理
  • 消息中间件汇总
  • 【Truffle】四、通过Ganache部署连接
  • 【 云原生 | K8S 】Kubernetes 概述
  • 94. 二叉树的中序遍历 --力扣 --JAVA
  • 链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)
  • 批量导入SQL Server中的建表、建存储过程和建调度作业的文件
  • C++ 图解二叉树非递归后序 + 实战力扣题
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Apache Spark Streaming 使用实例
  • conda常用的命令
  • create-react-app做的留言板
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Octave 入门
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • V4L2视频输入框架概述
  • windows下使用nginx调试简介
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从0实现一个tiny react(三)生命周期
  • 从零搭建Koa2 Server
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 区块链技术特点之去中心化特性
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 学习笔记:对象,原型和继承(1)
  • 用 Swift 编写面向协议的视图
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​Linux·i2c驱动架构​
  • (1)(1.13) SiK无线电高级配置(六)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二)pulsar安装在独立的docker中,python测试
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (区间dp) (经典例题) 石子合并
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)nsfocus-绿盟科技笔试题目
  • (转)visual stdio 书签功能介绍
  • (转)程序员疫苗:代码注入
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .gitignore文件_Git:.gitignore
  • .Net Core与存储过程(一)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution