Разница между внутренними таблицами улья и внешними таблицами?



может ли кто-нибудь сказать мне разницу между внешней таблицей улья и внутренними таблицами.
Я знаю, что разница возникает при падении таблицы. Я не понимаю, что вы подразумеваете под тем, что данные и метаданные удаляются во внутренних и только метаданные удаляются во внешних таблицах.
Может кто-нибудь объяснить мне с точки зрения узлов, пожалуйста.

1091   18  

18 ответов:

Hive имеет реляционную базу данных на главном узле, который он использует для отслеживания состояния. Например, когда вы CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';, эта схема таблицы хранится в базе данных.

если у вас есть секционированная таблица, разделы хранятся в базе данных(это позволяет hive использовать списки разделов, не заходя в файловую систему и не находя их и т. д.). Такие вещи являются "метаданными".

когда вы отбрасываете внутреннюю таблицу, она отбрасывает данные, а также отбрасывает метаданные.

когда вы отбрасываете внешнюю таблицу, она отбрасывает только метаданные. Это означает, что hive сейчас не знает об этих данных. Он не касается самих данных.

таблицы Hive могут быть созданы как внешние, так и внутренние. Это выбор, который влияет на то, как данные загружаются, управляются и управляются.

используйте внешние таблицы, когда:

  1. данные также используются за пределами улья. Например, файлы данных считываются и обрабатываются существующей программой, которая не блокирует файлы.
  2. данные должны оставаться в базовом расположении даже после удаления таблицы. Это может применяться, если вы указываете несколько схем (таблицы или представления) в одном наборе данных или при повторении различных возможных схем.
  3. вы хотите использовать пользовательское расположение, такое как ASV.
  4. Улей не должен владеть данными и настройками управления, dirs и т. д., у вас другая программа или процесс, который будет делать эти вещи.
  5. вы не создаете таблицу на основе существующей таблицы (Как выбрать).

используйте внутренние таблицы, когда:

данные являются временными.

вы хотите, чтобы Hive полностью управлял жизненным циклом таблицы и данных.

чтобы ответить на ваш вопрос:

для внешних таблиц Hive не перемещает данные в каталог хранилища. Если внешняя таблица удаляется, то метаданные таблицы удаляются, но не данные.

для внутренних таблиц Hive перемещает данные в каталог хранилища. Если таблица будет удалена, то метаданные таблицы и данные будут удалены.


Для справки:

разницу между внутренними & Внешние таблицы:

Для Внешних Таблиц -

  • внешняя таблица хранит файлы на сервере HDFS, но таблицы не связаны с исходным файлом полностью.

  • при удалении внешней таблицы файл все еще остается на сервере HDFS.

    в качестве примера, если вы создаете внешняя таблица под названием "table_test" в улье с помощью HIVE-QL и связать таблица в файл "файл",тогда удаление " table_test "из HIVE не удалит" файл " из HDFS.

  • внешние табличные файлы доступны всем, кто имеет доступ к файловой структуре HDFS, и поэтому безопасность должна управляться в HDFS уровень файлов / папок.

  • метаданные хранятся на главном узле, и удаление внешней таблицы из HIVE только удаляет метаданные не файл данных.


Для Внутренних Таблиц-

  • хранится в каталоге на основе настроек в hive.metastore.warehouse.dir, по умолчанию хранятся внутренние таблицы в каталоге " / user/hive / warehouse" вы можете изменить его путем обновления местоположения в файле config .
  • удаление таблицы удаляет метаданные и данные из мастер-узел и HDFS соответственно.
  • внутренняя безопасность файлов таблицы контролируется исключительно через улей. Безопасность должна управляться в улье, вероятно, на уровне схемы (зависит по организации.)

Hive может иметь внутренние или внешние таблицы, это выбор, который влияет на то, как данные загружаются, управляются и управляются.

используйте внешние таблицы, когда:

  • The данные тоже используется вне улья. Например, файлы данных считываются и обрабатываются существующей программой, которая не блокирует файлы.
  • данные должны оставаться в базовом расположении даже после удаления таблицы. это может применяться, если вы указываете несколько схем (таблиц или представлений) в одном наборе данных или если вы повторяете различные возможные схемы.
  • Улей не должен владеть данными и управлять настройками, каталогами и т. д., вы может есть другая программа или процесс, который будет делать эти вещи.
  • вы не создаете таблицу на основе существующей таблицы (Как выбрать).

используйте внутренние таблицы, когда:

  • The данные временные.
  • вы хотите улей, чтобы полностью управлять жизненным циклом таблицы и данных.

источник :

HDInsight: Улей Внутренний и внешние таблицы Intro

внутренние и внешние таблицы в Hadoop-HIVE

внутренние табличные данные хранятся в папке хранилища, внешние табличные данные указывают на местоположение, указанное при создании таблицы. поэтому, когда вы удаляете внутреннюю таблицу, она удаляет схему, а также данные в папке хранилища, но во внешней таблице ее единственная схема будет потеряна. Поэтому, когда вы хотите вернуть таблицу, вы можете снова создать таблицу со схемой и указать местоположение . Надеюсь, теперь все ясно.

во внешних таблицах, если вы его удалите, он удаляет только схему таблицы, Данные таблицы существуют в физическом местоположении. Поэтому для удаления данных используйте Hadoop fs - rmr tablename . Управляемый улей таблицы будет иметь полный контроль над таблицами. Во внешних таблицах пользователи будут иметь контроль над ним.

внутренние таблицы полезны, если вы хотите, чтобы Hive управлял полным жизненным циклом ваших данных, включая удаление, тогда как внешние таблицы полезны, когда файлы используются за пределами Hive.

внешняя таблица hive имеет преимущества, что она не удаляет файлы при удалении таблиц,мы можем установить форматы строк с различными настройками , такими как serde....с разделителями

также имейте в виду, что Hive-это большое хранилище данных. Когда вы хотите удалить таблицу, вы не хотите потерять гигабайты или терабайты данных. Создание, перемещение и копирование данных в таком масштабе может занять много времени. Когда вы отбрасываете "управляемую" таблицу, улей также будет удалять свои данные. При удалении "внешней" таблицы удаляется только определение схемы из мета-хранилища hive. Данные по hdfs все еще остаются.

рассмотрим такой сценарий, который лучше всего подходит для внешней таблицы:

задание MapReduce (MR) фильтрует огромный файл журнала, чтобы выплюнуть n файлы sub log (например, каждый файл sub log содержит определенный тип сообщения log) и вывод i. e n файлы sub log хранятся в hdfs.

эти файлы журнала должны быть загружены в таблицы Hive для выполнения дальнейшего анализа, в этом сценарии я бы рекомендовал внешнюю таблицу(ы), потому что фактические файлы журнала генерируются и принадлежащий внешнему процессу, т. е. заданию MR, кроме того, вы можете избежать дополнительного шага загрузки каждого сгенерированного файла журнала в соответствующую таблицу Hive.

лучший вариант использования для внешней таблицы в улье - это когда вы хотите создать таблицу из файла CSV или text

единственная разница в поведении (а не в предполагаемом использовании), основанная на моих ограниченных исследованиях и тестировании до сих пор (с использованием Hive 1.1.0-cdh5.12.0), похоже, заключается в том, что когда таблица отбрасывается

  • данные внутренних (управляемых) таблиц удаляются из файловой системы HDFS
  • пока данные внешних таблиц не удаляются из файловой системы HDFS.

(Примечание: см. раздел "управляемые и внешние таблицы" в https://cwiki.apache.org/confluence/display/Hive/LanguageManual + DDL в котором перечислены некоторые другие различия, которые я не совсем понял)

Я считаю, что Hive выбирает место, где ему нужно создать таблицу на основе следующего приоритета сверху вниз

  1. расположение определяется при создании таблицы
  2. расположение, определенное при создании базы данных / схемы, в которой создается таблица.
  3. По Умолчанию Куст Каталог склада (свойство hive.метастор.склад.dir в улей.сайт.xml)

если параметр " Location "не используется во время" создания таблицы hive", используется указанное выше правило приоритета. Это применимо как для внутренних, так и внешних таблиц. Это означает, что внутренняя таблица не обязательно должна находиться в каталоге хранилища и может находиться в любом другом месте.

Примечание: я, возможно, пропустил некоторые сценарии, но на основе моего ограниченного исследования, поведение как внутренней, так и расширенной таблицы кажется одинаковым, за исключением одного различия (удаление данных), описанного выше. Я попробовал следующие сценарии для внутренних и внешних таблиц.

  1. Создание таблицы с опцией Location и без нее
  2. Создание таблицы с параметром раздела и без него
  3. добавление новых данных с помощью инструкций Hive Load и Insert
  4. добавление файлов данных в расположение таблицы за пределами Hive (с помощью HDFS команды) и обновление таблицы с помощью команды " MSCK REPAIR TABLE command
  5. удаления таблиц

внешняя таблица-это таблица, для которой Hive не управляет хранилищем. При удалении внешней таблицы удаляется только определение в Hive. Данные остаются. Внутренняя таблица-это таблица, которой управляет улей. При удалении внутренней таблицы удаляются как определение в Hive, так и данные.

улей хранит только метаданные в метасторе и исходные данные в стороне от улья, когда мы используем внешнюю таблицу, мы можем дать местоположение '' этими нашими исходными данными не будет эффекта, когда мы отбрасываем таблицу

когда данные уже есть в HDFS, можно создать внешнюю таблицу Hive для описания данных. Он называется внешним, поскольку данные во внешней таблице указываются в свойствах расположения, а не в каталоге хранилища по умолчанию.

при хранении данных во внутренних таблицах Hive полностью управляет жизненным циклом таблицы и данных. Это означает, что данные удаляются после внутренней таблицы. Если внешняя таблица удаляется, метаданные таблицы удаляются но данные сохраняются. В большинстве случаев внешняя таблица предпочтительнее, чтобы избежать удаления данных вместе с таблицами по ошибке.

для управляемых таблиц Hive управляет жизненным циклом их данных. Hive хранит данные для управляемых таблиц в подкаталоге под каталогом, определенным hive.метастор.склад.реж по умолчанию.

когда мы удаляем управляемую таблицу, Hive удаляет данные в таблице.Но управляемые столы менее удобны для совместного использования с другими инструментами. Например, допустим, у нас есть данные, которые создаются и используются в основном Pig , но мы хотим запустить некоторые запросы против него, но не дать Hive право собственности на данные.

в это время определяется внешняя таблица, которая указывает на эти данные, но не является ее владельцем.

в Hive мы также можем создать внешнюю таблицу. Он сообщает Hive ссылаться на данные, которые находятся в существующем расположении за пределами каталога хранилища. Удаление внешних таблиц приведет к удалению метаданных, но не данных.

внутренние:таблица создана первый и Data загружается позже

внешний: Data и присутствует и таблица и создана сверху его.

простыми словами, есть две вещи:

улей может управлять вещами на складе, т. е. он не будет удалять данные из хранилища. Когда мы удаляем таблицу:

1) для внутренних таблиц данных осуществляется внутри склада. Поэтому будет удален.

2)для внешних таблиц данные управляются извечно из хранилища. Поэтому его нельзя удалить, и клиенты, кроме hive, также могут его использовать.

Comments

    Ничего не найдено.