본문 바로가기

Study/Bigdata

HDP3 에서 Spark 로 Hive Table 를 조회했는데 빈값이 나온경우

일단, 하는중 일부는 Spark 로 처리한 데이터를 Hive에 테이블을 넣는게 있습니다.


사실 이때는 몰랐는데,


Spark 로 Hive 테이블을 읽으려는데 빈값이 나오더군요 .


사실 Spark 2.3? 인가 바뀌면서 enableHivesupport 인가 이옵션만 활성화 시키면 되서 , 뭐 다른문제인가 했는데,


사실 약간 조건적 상황인것 같은데, 현재 방법에서는 읽을 방법이 없는것 같습니다


HDP 3가 되면서 Hive에 기본적으로 테이블을 생성하면(Spark 로 생성하는게 아닌 Hive에서 직접) ACID가 적용이 되는데, 현재는 Spark 에서 접근할 방법이 없는것 같습니다.


물론, 강제적으로 alter table 해서 해결하면될것 같은 글들이 보이긴 하는데,



https://community.hortonworks.com/questions/170146/spark-not-reading-data-from-a-hive-managed-table-m.html


Spark not reading data from a Hive managed table. Meanwhile, Hive can query the data in the table just fine.

  1. // This query:
  2. sqlContext.sql("select * from retail_invoice").show
  3.  
  4. // gives this output:
  5.  
  6.  
  7. +---------+---------+-----------+--------+-----------+---------+----------+-------+
  8.  
  9.  
  10. |invoiceno|stockcode|description|quantity|invoicedate|unitprice|customerid|country|
  11.  
  12.  
  13. +---------+---------+-----------+--------+-----------+---------+----------+-------+
  14.  
  15.  
  16. +---------+---------+-----------+--------+-----------+---------+----------+-------+
  17.  
  18. // The Hive DDL for the table in HiveView 2.0:
  19. CREATE TABLE `retail_invoice`(
  20. `invoiceno` string,
  21. `stockcode` string,
  22. `description` string,
  23. `quantity` int,
  24. `invoicedate` string,
  25. `unitprice` double,
  26. `customerid` string,
  27. `country` string)
  28. CLUSTERED BY (
  29. stockcode)
  30. INTO 2 BUCKETS
  31. ROW FORMAT SERDE
  32. 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
  33. STORED AS INPUTFORMAT
  34. 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
  35. OUTPUTFORMAT
  36. 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
  37. LOCATION
  38. 'hdfs://hadoopsilon2.zdwinsqlad.local:8020/apps/hive/warehouse/retail_invoice'
  39. TBLPROPERTIES (
  40. 'COLUMN_STATS_ACCURATE'='{\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"country\":\"true\",\"quantity\":\"true\",\"customerid\":\"true\",\"description\":\"true\",\"invoiceno\":\"true\",\"unitprice\":\"true\",\"invoicedate\":\"true\",\"stockcode\":\"true\"}}',
  41. 'numFiles'='2',
  42. 'numRows'='541909',
  43. 'orc.bloom.filter.columns'='StockCode, InvoiceDate, Country',
  44. 'rawDataSize'='333815944',
  45. 'totalSize'='5642889',
  46. 'transactional'='true',
  47. 'transient_lastDdlTime'='1517516006')

I can query the data in Hive just fine. The data is inserted from Nifi using the PutHiveStreaming processor.

We have tried to recreate the table, but the same problem arises. I haven't found any odd looking configurations.

Any Ideas on what could be going on here?

 0
avatar image

Answer by Sivaprasanna 

@Matt Krueger

Your table is ACID i.e. transaction enabled. Spark doesn't support reading Hive ACID table. Take a look at SPARK-15348 and SPARK-16996


물론 방법이 없는것은 아닙니다. 아예 하이브를 이용하지 않고, Spark에서 하이브 테이블을 만들어서 사용하면 될것 같긴한데 아직 여러가지 방법은 시도해보지는 않았습니다.(일단 필요한 기능들은 다 되기 때문에)



확실히 HDP3 올라오면서 falcon 같은건 data plan platform 인가로 분리했고, 잘쓰던 Hive View 같은거는 Superset 이나, Tez View 같은경우는 다른 분슨 분석 플랫폼인가 분리한것 같습니다. 뭐 결론은 ambari extension으로 만든것 같은데,


뭐 일단은 쓰는게 HDP 다보니, .. 하 KUDA 하고 Impala가 그렇게 좋다는데 언제 써볼수 있을려나..