我正在尝试从db中选择*。abc在蜂箱中,这个蜂箱表是使用spark加载的
它不工作显示错误:
错误:java。伊奥。IOException:java。lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码=0)
当我使用以下属性时,我能够查询配置单元:
set hive.mapred.mode=nonstrict;
set hive.optimize.ppd=true;
set hive.optimize.index.filter=true;
set hive.tez.bucket.pruning=true;
set hive.explain.user=false;
set hive.fetch.task.conversion=none;
现在,当我尝试读取相同的hive表db.abc使用火花,我收到的错误如下:
客户端只有在具有以下功能时才能访问此表:CONNECTORREAD、HIVEFULLACIDREAD、HIVEFULLACIDWRITE、HIVEMANAGESTATS、HIVECACHINVALIDATE、CONNECTORWRITE。此表可能是Hive管理的ACID表,或需要Spark当前未实现的某些其他功能;在org.apache.spark.sql.catalyst.catalog.CatalogUtils$. throwIfNoAccess(ExternalCatalogUtils.scala:280)在org.apache.spark.sql.hive.HiveTranslationLayerCheck$$anonfun$申请$1.applyOrse(HiveTranslationLayerStrategies.scala:105)在org.apache.spark.sql.hive.HiveTranslationLayerCheck$anonfun$申请$1.applyOrElse(HiveTranslationLayerStrategies.scala:85)在org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)在TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:289)在org.apache.spark.sql.catalyst.trees.货币起源$. with Origin(TreeNode.scala:70TreeNode. transformUp(TreeNode. scala: 286)在org. apache. sql.催化剂. tree。TreeNode$anonfun3美元。应用(TreeNode. scala: 286)在org. apache. sql.催化剂. tree。TreeNode$anonfun3美元。在org. apache. sql.催化剂. tree应用(TreeNode. scala: 286)。树节点$anonfun4美元。应用(TreeNode. scala: 306)在org. apache. sql.催化剂. tree。TreeNode. mapProductIterator(TreeNode. scala: 187)在org. apache. sql.催化剂. tree。树节点。地图儿童(TreeNode. scala: 304)在org. apache. sql.催化剂. tree。树节点.变换RuleExecutor.执行(RuleExecutor. scala: 76)在org. apache. spak. sql催化剂分析。Analyzer. org$apache$火花$sql$催化剂$分析$Analyzer$执行SameContext(Analyzer. scala: 124)在org. apache. sql.催化剂分析。分析器执行(Analyzer. scala: 118)在org. apache. sql.催化剂分析。分析器执行和检查(Analyzer. scala: 103)在org. apache. spark. sql.执行。查询执行。在org. apache. sql执行分析了$lzycompute(查询执行. scala: 57)。在org. apache. sql执行查询执行分析(查询执行. scala: 55)
我是否需要添加任何属性在火花提交或shell?或者有什么替代方法来阅读这个hiv e表使用火花
配置单元表示例格式:
CREATE TABLE `hive``( |
| `c_id` decimal(11,0),etc.........
ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' |
| WITH SERDEPROPERTIES (
STORED AS INPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |
LOCATION |
| path= 'hdfs://gjuyada/bbts/scl/raw' |
| TBLPROPERTIES ( |
| 'bucketing_version'='2', |
| 'spark.sql.create.version'='2.3.2.3.1.0.0-78', |
| 'spark.sql.sources.provider'='orc', |
| 'spark.sql.sources.schema.numParts'='1', |
| 'spark.sql.sources.schema.part.0'='{"type":"struct","fields":
[{"name":"Czz_ID","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"DzzzC_CD","type":"string","nullable":true,"metadata":{}},
{"name":"C0000_S_N","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"P_ _NB","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"C_YYYY","type":"string","nullable":true,"metadata":{}},"type":"string","nullable":true,"metadata":{}},{"name":"Cv_ID","type":"string","nullable":true,"metadata":{}},
| 'transactional'='true', |
| 'transient_lastDdlTime'='1574817059')
退房https://github.com/qubole/spark-acid-用于Apache Spark的Hive ACID数据源,它将允许您读取Hive ACID/事务表。
如果您使用的是Cloudera,请查看基于qubole项目的Hive Warehouse Connector(HWC):
您需要使用TBLPROPERTIES('transactional'='false')
创建表
CREATE TABLE your_table(
`col` string,
`col2` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
TBLPROPERTIES (
'transactional'='false'
)
您试图将事务表
(Transactional=true)
读入Spark的问题。
正式的Spark
还不支持Hive ACID table,将ACID table的完全转储/增量转储
获取到常规的Hive orc/parquet
分区表,然后使用Spark读取数据。
有一个开放的Jira SPARK-15348,用于添加对读取蜂巢酸的支持。
>
如本链接所述,使用SPARK-LLAP阅读acid表格有一些变通方法。
我认为从HDP-3开始。X
HiveWareHouse Connector能够支持读取HiveAcid表。
您可以将事务性表的快照
创建为非事务性
,然后从表中读取数据。
**`create table <non_trans> stored as orc as select * from <transactional_table>`**
更新:
1.创建外部配置单元表:
CREATE external TABLE `<ext_tab_name>`(
<col_name> <data_type>....etc
)
stored as orc
location '<path>';
2.然后用现有的事务性表数据覆盖到上面的外部表。
insert overwrite table <ext_tab_name> select * from <transactional_tab_name>;
我试图在配置单元中执行select*from db.abc操作,此配置单元表是使用spark加载的 “它不工作”显示错误: 错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码=0) 我需要在spark-submit或shell中添加任何属性吗?或者使用spark读取此hiv e表的另一种方
我想通过配置单元jdbc连接将整个配置单元表加载到spark内存中。并且已经添加了配置单元站点。xml,hdfs站点。xml在我的项目中。spark已连接配置单元,因为已成功获取列名(例如role_id)。但是spark似乎将列名作为数据加载,并抛出异常。这是我的密码: 和获取错误: JAVAlang.NumberFormatException:对于输入字符串:“t_leave_map_base.
我在apache Spark中读取本地文件时出错。scala>val f=sc.textfile(“/home/cloudera/downloads/sample.txt”)
我试图在RDD中将PostgreSQL 9.6中的一个表读取到Spark 2.1.1中,我在Scala中有以下代码。 但是,它返回以下错误: 组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段1.0中的任务0失败4次,最近的失败:阶段1.0中的任务0.3丢失(TID 7,10.0.0.13,执行者1):组织。postgresql。util。PSQLException:列索引
我们可以使用以下命令轻松地从 Spark 中的 Hive 表中读取记录: 但是当我连接两个表时,例如: 如何从上面的连接查询中检索记录?
> 我运行spark shell,如下所示: spark-shell--jars.\spark-csv2.11-1.4.0.jar;.\commons-csv-1.2.jar(我不能直接下载这些依赖项,这就是我使用--jars的原因) 使用以下命令读取csv文件: 在执行第一个建议的解决方案后: