2016-08-05 3 views
2

Я новичок в больших данных и связанных с ними технологиях, поэтому я не уверен, можем ли мы добавлять данные в существующий файл ORC. Я пишу файл ORC, используя Java API, и когда я закрываю Writer, я не могу снова открыть файл, чтобы записать в него новый контент, в основном для добавления новых данных., добавляющий к файлу ORC

Есть ли способ добавить данные в существующий файл ORC, используя Java Api или Hive или любые другие средства?

еще одно уточнение, при сохранении Java util.Date объекта в ORC файл, тип ORC хранится как:

struct<timestamp:struct<fasttime:bigint,cdate:struct<cachedyear:int,cachedfixeddatejan1:bigint,cachedfixeddatenextjan1:bigint>>, 

и для Java BigDecimal это:

<margin:struct<intval:struct<signum:int,mag:struct<>,bitcount:int,bitlength:int,lowestsetbit:int,firstnonzerointnum:int> 

ли это правильно, и есть ли информация об этом?

+0

Мы не можем помочь вам, если вы не размещаете код – cheseaux

+0

Спасибо за ответ, но я спрашиваю в целом. файлы ORC поддерживают операцию добавления. я не мог найти соответствующую информацию в любом месте. – rpr

ответ

1

Нет, вы не можете подключаться напрямую к файлу ORC. Не к файлу Паркета. Также ни один столбчатый формат со сложной внутренней структурой с метаданными, чередующимися с данными.

со ссылкой на официальный «Apache Parquet» сайт ...

Метаданные записываются после данных, чтобы позволить однопроходной писать.

Затем со ссылкой на официальный «Apache ORC» сайт ...

Поскольку HDFS не поддерживает изменение данных в файле после того, как он написано, ORC сохраняет индекс верхнего уровня на конец файла (...) Хвост файла состоит из 3 частей; метаданные файла, нижний колонтитул и постскриптум.

Ну, технически, в настоящее время вы можете добавить в файл HDFS; вы можете даже усечь его. Но эти трюки полезны только для некоторых случаев краев (например, сообщения о подаче дыма в файл журнала HDFS «с микро-пакетными», время от времени с fflush).

Для поддержки транзакций улей они используют другой прием: создание нового файла ORC по каждой сделке (то есть микро-пакетный) с периодическими работами прессовых работ в фоновом режиме, а-ля HBase.

2

Да, это возможно через Улей, в котором вы можете в основном «конкатенировать» новые данные. От улья официальная документация https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions#HiveTransactions-WhatisACIDandwhyshouldyouuseit?

+0

Если я правильно понимаю, он объединяет несколько файлов, но я ищу вариант добавления данных в существующий файл без создания нового файла и слияния его. – rpr

+0

эй жаль, что я скопировал неправильный URL. Просто, чтобы вы были счастливы, найдите ссылку, в которой говорится о поддержке Hive ORC ACID. Его доступно только для ORC в настоящее время. – abhiieor

1

Update 2017

Да, теперь вы можете!Hive предоставляет новую поддержку ACID, но вы можете добавить данные в таблицу с помощью Append Mode mode("append") с Spark

Ниже приведен пример

Seq((10, 20)).toDF("a", "b").write.mode("overwrite").saveAsTable("tab1") 
Seq((20, 30)).toDF("a", "b").write.mode("append").saveAsTable("tab1") 
sql("select * from tab1").show 

Или более полное exmple с ORC here; ниже экстракта:

val command = spark.read.format("jdbc").option("url" ....).load() 
command.write.mode("append").format("orc").option("orc.compression","gzip").save("command.orc")