Может ли кто-нибудь сказать мне разницу между внешней таблицей Улей и внутренними таблицами. Я знаю, что разница возникает при отбрасывании таблицы. Я не понимаю, что вы подразумеваете под данными, а метаданные удаляются во внутренних и только метаданные удаляются во внешних таблицах. Может кто-нибудь объяснить мне с точки зрения узлов.
Разница между внутренними таблицами Hive и внешними таблицами?
Ответ 1
Hive имеет реляционную базу данных на master node, которая используется для отслеживания состояния.
Например, когда вы CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';
, эта схема таблицы хранится в базе данных.
Если у вас есть секционированная таблица, разделы хранятся в базе данных (это позволяет кустам использовать списки разделов без перехода в файловую систему и их поиска и т.д.). Эти вещи - это "метаданные".
Когда вы удаляете внутреннюю таблицу, она отбрасывает данные, а также метаданные.
Когда вы удаляете внешнюю таблицу, она только снижает метаданные. Это означает, что улей сейчас не знают данных. Он не касается самих данных.
Ответ 2
Таблицы верстки могут быть созданы как EXTERNAL или INTERNAL. Это выбор, который влияет на загрузку, управление и управление данными.
Используйте таблицы EXTERNAL, если:
- Данные также используются за пределами Hive. Например, файлы данных считываются и обрабатываются существующей программой, которая не блокирует файлы.
- Данные должны оставаться в базовом местоположении даже после DROP TABLE. Это может применяться, если вы указываете несколько схем (таблиц или представлений) в одном наборе данных или если вы выполняете итерацию через различные возможные схемы.
- Вы хотите использовать настраиваемое местоположение, такое как ASV.
- Hive не должен владеть настройками данных и управления, dirs и т.д., у вас есть другая программа или процесс, которые будут делать эти вещи.
- Вы не создаете таблицу на основе существующей таблицы (AS SELECT).
Используйте таблицы INTERNAL, когда:
Данные временные.
Вы хотите, чтобы Hive полностью управлял жизненным циклом таблицы и данных.
Ответ 3
Ответить на ваш вопрос:
Для внешних таблиц Hive не перемещает данные в свой каталог хранилища. Если внешняя таблица удаляется, метаданные таблицы удаляются, но не данные.
Для внутренних таблиц Hive перемещает данные в свой каталог хранилища. Если таблица будет удалена, то метаданные таблицы и данные будут удалены.
Для справки,
Разница между внутренней и внешней таблицами:
Для внешних таблиц -
Внешняя таблица хранит файлы на сервере HDFS, но таблицы не связаны полностью с исходным файлом.
Если вы удалите внешнюю таблицу, файл все равно останется на сервере HDFS.
Например, если вы создаете внешнюю таблицу с именем "table_test" в HIVE с помощью HIVE-QL и связываете таблицу с файлом "file", то удаление "table_test" из HIVE не приведет к удалению "file" из HDFS.
Файлы внешних таблиц доступны всем, у кого есть доступ к файловой структуре HDFS, и поэтому необходимо управлять безопасностью на уровне файлов/папок HDFS.
Метаданные хранятся на главном узле, а удаление внешней таблицы из HIVE удаляет только метаданные, а не данные/файл.
Для внутреннего Tables-
- Хранящиеся в каталоге на основе настроек в
hive.metastore.warehouse.dir
, по умолчанию внутренние таблицы хранятся в следующем каталоге "/user/hive/warehouse", вы можете изменить его, обновив расположение в файле конфигурации.- Удаление таблицы удаляет метаданные и данные из главного узла и HDFS соответственно.
- Внутренняя безопасность файла таблицы контролируется исключительно через HIVE. Безопасность должна управляться в рамках HIVE, возможно, на уровне схемы (зависит от организации).
Hive может иметь внутренние или внешние таблицы, это выбор, который влияет на то, как данные загружаются, контролируются и управляются.
Используйте ВНЕШНИЕ таблицы, когда:
- Данные также используются за пределами Hive. Например, файлы данных читаются и обрабатываются существующей программой, которая не блокирует файлы.
- Данные должны оставаться в базовом расположении даже после DROP TABLE. Это может применяться, если вы указываете несколько схем (таблиц или представлений) на один набор данных или если вы перебираете различные возможные схемы.
- Hive не должен владеть данными и настройками управления, каталогами и т. Д., У вас может быть другая программа или процесс, который будет делать эти вещи.
- Вы не создаете таблицу на основе существующей таблицы (AS SELECT).
Используйте ВНУТРЕННИЕ таблицы, когда:
- Данные являются временными.
- Вы хотите, чтобы Hive полностью управлял жизненным циклом таблицы и данных.
Источник:
Ответ 4
Внутренние данные таблицы хранятся в папке хранилища, тогда как внешние данные таблицы хранятся в месте, указанном вами при создании таблицы.
Поэтому, когда вы удаляете внутреннюю таблицу, она удаляет схему, а также данные в папке хранилища, но для внешней таблицы это только схема, которую вы потеряете.
Поэтому, когда вы хотите вернуть внешнюю таблицу, вы снова после ее удаления можете снова создать таблицу с той же схемой и указать ее исходное местоположение данных. Надеюсь, теперь все ясно.
Ответ 5
Во внешних таблицах, если вы его удаляете, он удаляет только схему таблицы, данные таблицы существуют в физическом местоположении. Поэтому для удаления данных используйте hasoop fs - rmr tablename. Управляемый стол куст будет иметь полный контроль над таблицами. Во внешних таблицах пользователи будут иметь контроль над ним.
Ответ 6
Единственная разница в поведении (а не предполагаемое использование), основанная на моих ограниченных исследованиях и тестировании до сих пор (с использованием Hive 1.1.0 -cdh5.12.0), по-видимому, заключается в том, что при отбрасывании таблицы
- данные из внутренних (управляемых) таблиц удаляются из файловой системы HDFS
- в то время как данные внешних таблиц НЕ удаляются из файловой системы HDFS.
(ПРИМЕЧАНИЕ. См. раздел "Управляемые и внешние таблицы" в https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL, в котором перечислены другие отличия, которые я не совсем понял)
Я считаю, что Hive выбирает место, где ему нужно создать таблицу на основе следующего приоритета сверху вниз
- Местоположение, определенное при создании таблицы
- Местоположение, определенное в создании базы данных/схемы, в котором создается таблица.
- Каталог хранилищ уст по умолчанию (свойство hive.metastore.warehouse.dir в hive.site.xml)
Если параметр "Местоположение" не используется во время "создания таблицы улей", используется правило вышеприведенного правила. Это применимо как для внутренних, так и для внешних таблиц. Это означает, что внутренняя таблица не обязательно должна находиться в каталоге Warehouse и может находиться где-то еще.
Примечание. Возможно, я пропустил некоторые сценарии, но, основываясь на моем ограниченном исследовании, поведение таблицы как внутри, так и Extenal, похоже, одинаково, за исключением одной разности (удаления данных), описанной выше. Я попробовал следующие сценарии как для внутренних, так и для внешних таблиц.
- Создание таблицы с параметром местоположения и без него
- Создание таблицы с и без опции раздела
- Добавление новых данных с использованием инструкций по загрузке и вставке
- Добавление файлов данных в местоположение таблицы за пределами Hive (с использованием команд HDFS) и обновление таблицы с помощью команды MSCK REPAIR TABLE
- Удаление таблиц
Ответ 7
Внутренние таблицы полезны, если вы хотите, чтобы Hive управлял полным жизненным циклом ваших данных, включая удаление, тогда как внешние таблицы полезны, когда файлы используются вне Hive.
Ответ 8
Внешняя таблица улов имеет преимущества в том, что она не удаляет файлы, когда мы отбрасываем таблицы, мы можем устанавливать форматы строк с различными настройками, такими как serde.... delimited
Ответ 9
Рассмотрим этот сценарий, который лучше всего подходит для внешней таблицы:
Задание MapReduce (MR) фильтрует огромный файл журнала, чтобы выплескивать файлы суб-журнала n
(например, каждый файл подзаголовка содержит конкретный журнал типа сообщений), а выходные файлы, т.е. n
файлы подлога хранятся в hdfs.
Эти файлы журналов должны быть загружены в таблицы Hive для выполнения дальнейшей аналитики. В этом случае я бы рекомендовал внешнюю таблицу (таблицы), потому что фактические файлы журналов создаются и принадлежат внешнему процессу, т.е. работа MR, кроме вас может избежать дополнительного этапа загрузки каждого сгенерированного файла журнала в соответствующую таблицу Hive.
Ответ 10
Также помните, что Hive - это большой хранилище данных. Когда вы хотите удалить таблицу, вы не хотите потерять гигабайты или терабайты данных. Генерация, перемещение и копирование данных в этом масштабе могут занять много времени. Когда вы уроните столбец "Управляемый", он также уничтожит его данные. Когда вы удаляете таблицу "External", только определение схемы из мета-хранилища улей удаляется. Данные по hdfs все еще остаются.
Ответ 11
Наилучший вариант использования внешней таблицы в кусте - это когда вы хотите создать таблицу из файла CSV или text
Ответ 12
hive хранит только метаданные в метасторе и исходные данные в стороне от улья, когда мы используем внешнюю таблицу, мы можем указать местоположение '', эти наши исходные данные не будут влиять, когда мы отбрасываем таблицу
Ответ 13
Когда в HDFS уже есть данные, для описания данных может быть создана внешняя таблица Hive. Он называется EXTERNAL, потому что данные во внешней таблице указаны в свойствах LOCATION вместо каталога хранилища по умолчанию.
При хранении данных во внутренних таблицах Hive полностью управляет жизненным циклом таблицы и данных. Это означает, что данные удаляются после удаления внутренней таблицы. Если внешняя таблица отбрасывается, метаданные таблицы удаляются, но данные сохраняются. Большую часть времени рекомендуется использовать внешнюю таблицу, чтобы избежать ошибочного удаления данных вместе с таблицами.
Ответ 14
Для управляемых таблиц Hive управляет жизненным циклом своих данных. По умолчанию хранилище хранит данные для управляемых таблиц в подкаталоге по каталогу, определенному hive.metastore.warehouse.dir по умолчанию.
Когда мы удаляем управляемую таблицу, Hive удаляет данные в таблице. Но управляемые таблицы менее удобны для совместного использования с другими инструментами. Например, предположим, что у нас есть данные, которые создаются и используются главным образом Pig, но мы хотим запускать некоторые запросы против него, но не даем владение Hive данными.
В то время определяется внешняя таблица, указывающая на эти данные, но не принимает на себя ответственность.
Ответ 15
В Hive также можно создать внешнюю таблицу. Он говорит Hive ссылаться на данные, которые находятся в существующем местоположении за пределами каталога хранилища. Удаление внешних таблиц приведет к удалению метаданных, но не данных.
Ответ 16
ВНУТРЕННЯЯ: Таблица создана Первая и Данные загружена позже
ВНЕШНИЙ: Данные присутствует и Таблица создана сверху. он.
Ответ 17
Простыми словами, есть две вещи:
Hive может управлять вещами на складе, то есть не удалять данные со склада. Когда мы удаляем таблицу:
1) Для внутренних таблиц данные управляются внутренне на складе. Так будет удалено.
2) Для внешних таблиц данные управляются вечно со склада. Таким образом, нельзя удалить, а клиенты, кроме тех, которые могут использовать куст, также могут использовать его.