Как да инсталирате и конфигурирате HIVE Metastore с MYSQL

⚡ Умно обобщение

Метахранилището на Hive съхранява всяка дефиниция на таблица, име на колона и тип данни зад Apache Hive и премества това хранилище от базата данни по подразбиране на Derby към MySQL това позволява на няколко потребители да се свързват едновременно.

  • 🗄️ Какво съдържа: Метахранилището съхранява метаданните на схемата в релационни таблици, докато самите данни от таблицата остават в HDFS.
  • 🚫 Защо Дерби се проваля: В пакета е включен Derby metastore, който приема една активна сесия, което го изключва за всеки споделен или производствен клъстер.
  • 🔧 Четири имота: ВръзкаURL, ConnectionDriverName, ConnectionUserName и ConnectionPassword в hive-site.xml сочат към Hive на MySQL.
  • 🔗 Разположение на водача: - MySQL JDBC конекторът трябва да бъде свързан към директорията на Hive lib, преди опитът за свързване да е успешен.
  • 🧱 Схемата първа: Помощната програма schematool създава таблиците на metastore и Hive отказва да стартира срещу неинициализирана схема.
  • ???? Потвърдете в MySQL: Таблица, създадена в Hive, се появява веднага като ред в таблицата TBLS на базата данни на метастора.

Как да инсталирате и конфигурирате Hive metastore с MySQL

Какво е HIVE Metastore?

Hive metastore е хранилище, което съхранява метаданни (имена на колони, типове данни, коментари и др.), свързани с Apache Hive използвайки MySQL or PostgreSQL. Това метахранилище на Hive се реализира с помощта на таблици в релационна база данни.

Нищо в метахранилището не съдържа самите редове. Записите остават в HDFS, а метахранилището записва само къде се намира всяка таблица и как се наричат ​​нейните колони, поради което загубата му струва на схемата, а не на данните.

Защо да използвате MySQL в Hive като Metastore

Бекендът на метастора е избор, а не фиксирана част от Hive, а фабрично зададената конфигурация е умишлено минимална. Три ограничения отблъскват почти всяка инсталация от него.

  • По подразбиране Hive се предлага с базата данни Derby като метахранилище.
  • Дерби може да поддържа само един активен потребител в даден момент.
  • Derby не се препоръчва в производствена среда.

Така че решението тук е

  • употреба MySQL като мета хранилище в backend-а за свързване на множество потребители с Hive едновременно
  • MySQL е най-добрият избор за самостоятелния метахранилище

Как да инсталирате и конфигурирате Hive Metastore за MySQL База данни

Деветте стъпки по-долу се изпълняват последователно на машина, на която вече са инсталирани Hadoop и Hive. Всяка стъпка завършва със екранна снимка на действителния изход на терминала или обвивката.

Стъпка 1) Инсталирайте MySQL Сървър
В тази стъпка ще изпълним две задачи

  1. Инсталиране на mysql сървър
  2. Проверка на mysql сървъра и неговия процес

Използване на sudo apt-get инсталирате mysql-сървър команда, можем да изтеглим MySQL сървър. Инсталиране MySQL както е показано на екранната снимка по-долу.

Терминал, изпълняващ sudo apt-get install mysql-server на Ubuntu

След успешна инсталация, MySQL ще се изпълни както е показано на екранната снимка по-долу, където проверката на процеса потвърждава, че услугата е активна.

Терминал, потвърждаващ, че процесът mysql-server работи след инсталирането

Стъпка 2) Инсталирайте MySQL Java Съединител
Инсталиране на MySQL Java конектор. Това е за Java зависимости и цели на свързване, защото Hive достига MySQL през JDBC. Следващата екранна снимка показва инсталирането на пакета.

Терминал, инсталиращ libmysql-java MySQL Java пакет конектори

Стъпка 3) Създайте мека връзка за конектор
Създаване на мека връзка за конектора в директорията на Hive lib. Това е меката връзка между Java намлява MySQL, и това е, което поставя JAR файла на драйвера в пътя на класовете на Hive. Командата и нейният резултат са показани по-долу.

Терминал, създаващ мека връзка за MySQL JAR файл на конектора в директорията на Hive lib

Стъпка 4) Конфигуриране MySQL съхранение в Hive
- MySQL Shell трябва да бъде отворен като root акаунт, преди да може да бъде създаден потребител на Hive, както е показано по-долу.

Отваряне на терминала MySQL shell с командата mysql -u root -p

  • Въведете mysql –u root –p, последвано от паролата
  • Тук –u представлява root потребителското име, а –p означава паролата.
  • След въвеждане на горната команда, потребителят трябва да въведе валидна парола и след това да натисне Enter.
  • След това ще влезе в MySQL режим на черупка

Стъпка 5) Създайте потребителско име и парола
Създаване на потребителско име и парола за MySQLи предоставяне на привилегии. Снимката на екрана по-долу показва трите оператора, изпълнявани вътре в MySQL черупка.

MySQL shell създава акаунта на hiveuser и му предоставя привилегии

Трябва да изпълним командите, както е показано по-долу,

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8 комбинираната форма на втория оператор вече не се анализира, защото IDENTIFIED BY беше премахнато от GRANT. Първо създайте акаунта, след което му дайте разрешение и повторете реда CREATE USER за хоста localhost, както и за хоста със заместващ символ.

Стъпка 6) Конфигуриране на hive-site.xml

  • След стъпка 5 задава потребителско име и парола на MySQL база данни и предоставя привилегии.
  • Тук ще конфигурираме някои свойства в Hive, за да получим връзка с MySQL база данни.

Конфигурационният файл се отваря от директорията Hive conf, както е показано на следващата екранна снимка.

Терминалът отваря hive-site.xml за редактиране в директорията Hive conf

Следващата екранна снимка показва готовия файл с всичките четири свойства.

hive-site.xml, показващ четирите свойства на връзката javax.jdo.option

От горната екранна снимка наблюдаваме следното. Тук дефинираме 4 свойства, които са необходими за установяване MySQL като метахранилище в Hive.

Те са както следва:

  1. Това свойство е за връзката URLТук дефинираме ВръзкаURL в това свойство. Той действа като JDBC низ за свързване и представлява местоположението на метахранилището.
  2. Това свойство е за името на драйвера за връзка. Тук com.mysql.jdbc.Driver е стойността, която трябва да споменем в тага за стойност.
  3. Това свойство се използва за дефиниране на потребителското име за връзка. В този случай ние дефинирахме „hiveuser“ като потребителско име.
  4. Това свойство се използва за споменаване на паролата за връзка. В този случай дефинирахме „hivepassword“ като потребителска парола.

След като свойствата са поставени в hive-site.xml, трябва ръчно да запазим (Ctrl+S) и да затворим файла. След затваряне на този файл, трябва да създадем таблица в Hive и да проверим данните за таблицата в MySQL съхранение.

Поставете този код в hive-site.xml

hive-site.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

Двете стойности по-горе зависят от използваната версия на конектора. MySQL Connector/J 8 преименува класа на драйвера на com.mysql.cj.jdbc.Driver и той също така очаква изрична настройка за порт и SSL, така че един модерен URL обикновено се чете jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false. Тъй като паролата е в чист текст, файлът трябва да може да се чете само от акаунта на услугата Hive.

Стъпка 7) Създайте таблица
Създайте таблица „guru99“ в Hive, както е показано в обвивката на Hive по-долу.

Обвивката на Hive създава таблицата guru99 с цяло число и колона тип низ

От горната екранна снимка можем да наблюдаваме следното

  • Създаване на таблица с име „guru99“ с две имена на колони
  • Имената на колоните са посочени с техните типове данни, едната е цяло число, а другата е низ.

В следващата стъпка ще проверим дали е съхранено в MySQL или не.

Стъпка 8) Влезте в MySQL режим на черупка
Базата данни с метахранилища се избира първо, а таблицата, която следва, е показана по-долу.

MySQL Изпълнение на shell use metastore и show tables за изброяване на таблици в metastore

От горната екранна снимка можем да наблюдаваме следното

  • Първо трябва да изберем базата данни с „използване на metastore“
  • След като метахранилището е избрано, можем да проверим таблиците в него, като използваме командата „show tables“, както е показано на екранната снимка.
  • Каквито и таблици да бъдат създадени в Hive, метаданните, съответстващи на тези таблици, се съхраняват под TBLS в MySQL база данни
  • Таблицата „guru99“ е създадена в Hive, така че съответните метаданни се съхраняват в MySQL под TBLS

Стъпка 9) Въведете select * от TBLS
Проверка дали създадената таблица е налична в MySQL или не. Заявката и нейният резултат се показват на екранната снимка по-долу.

MySQL shell, изпълняващ select * от TBLS и показващ реда от таблицата guru99

Като въведете select * от TBLS, ще се покажат таблиците, които създадохме в режим на Hive shell

От горната екранна снимка можем да наблюдаваме следните неща:

  • Името на таблицата „guru99“, създадено в Hive, може да се покаже в MySQL режим на черупка
  • Освен това, ще предостави и информация като време за създаване на таблица, време за достъп и други свойства, както е показано на екранната снимка по-горе.

Как да инициализирате схемата на Hive Metastore със schematool

Флагът createDatabaseIfNotExist във връзката URL създава празна база данни за метахранилища, но не създава приблизително седемдесетте таблици, които Hive очаква в нея. В Hive 1.x и по-нови версии тази задача принадлежи на помощната програма schematool и се прескачаping Това е най-честата причина, поради която новоконфигуриран метахранилище отказва да стартира.

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

Командата чете същите четири свойства от hive-site.xml, свързва се с акаунта на hiveuser и изпълнява включения SQL скрипт, който съответства на версията на Hive. Успешното изпълнение завършва със съобщение за завършване, след което състоянието може да бъде потвърдено по всяко време.

$HIVE_HOME/bin/schematool -dbType mysql -info

Флаговете по-долу обхващат целия жизнен цикъл на схемата на метахранилище.

Опция Какво го прави
-dbType Именува бекенда, например mysql, derby, postgres, oracle или mssql
-initSchema Създава таблиците на метахранилище за текущата версия на Hive
-инфо Докладва версията на схемата, записана в базата данни
-upgradeSchema Мигрира съществуваща схема след надстройка на Hive
-валидирам Проверява схемата за липсващи таблици и несъответствия във версиите

Едно свързано свойство е добре да се знае преди първото стартиране. Когато hive.metastore.schema.verification е true, Hive сравнява версията на схемата в MySQL срещу собствените си и отказва да се изпълни при несъответствие. Тази проверка е предпазна мярка, така че правилният отговор е да се изпълни надстройката, вместо да се изключи. Същото MySQL бекендът се използва от инсталацията на Hive, обхваната в инсталирайте Hive на Ubuntu.

Често срещани грешки в Hive Metastore и как да ги поправим

Повечето неуспехи на този етап водят до едно от малкото съобщения, като всяко от тях сочи към конкретна стъпка по-горе, а не към самия Hive.

симптом Причина и отстраняване
Информация за версията не е намерена в метастора Схемата никога не е била създавана. Стартирайте schematool с -initSchema спрямо същата база данни, посочена във връзката. URL
ClassNotFoundException за JDBC драйвера JAR файлът на конектора липсва в директорията на Hive lib или Connector/J 8 се използва и класът вече е com.mysql.cj.jdbc.Driver. Проверете отново софтуерната връзка от стъпка 3.
Достъпът е отказан за потребителя hiveuser Привилегиите бяха предоставени само на един хост. Създайте акаунта както за localhost, така и за хоста със заместващ символ, след което изпълнете flush привилегиите.
Синтаксична грешка близо до IDENTIFICED BY MySQL 8 премахна IDENTIFIED BY от оператора GRANT. Първо издайте CREATE USER и след това GRANT
Извличането на публичен ключ не е разрешено Connector/J 8 отказва некриптирано ръкостискане по подразбиране. Добавете useSSL=false и allowPublicKeyRetrieval=true към JDBC. URL в надеждна мрежа
Таблиците липсват след надстройка на Hive Схемата все още съответства на старата версия. Стартирайте schematool с -upgradeSchema, вместо да деактивирате проверката на схемата.

След като метахранилището отговори надеждно, дефинициите на таблиците, които то записва, се създават с операторите, описани в Създаване, промяна и премахване на таблица в Hive.

Въпроси и Отговори

Корабите-кошари подкрепят Дерби, MySQL, PostgreSQL, Oracle намлява Microsoft SQL Server, а schematool приема всеки от тях чрез флага -dbType. Derby остава по подразбиране и е ограничен до една сесия.

Embedded изпълнява Derby вътре в процеса Hive. Local изпълнява кода на metastore вътре в Hive, но спрямо външна база данни, като например MySQLДистанционно управлява метамагазина като собствена Thrift услуга, която се споделя от няколко клиента.

Бази данни със записи в DBS, таблици със записи в TBLS, дефиниции на колони със записи в COLUMNS_V2, дескриптори на съхранение на записи в SDS и записи на дялове в PARTITIONS. Тези имена са вътрешни, така че изпратете заявка за проверка, вместо да ги редактирате ръчно.

Съхранявайте го в хранилище за ключове на доставчик на идентификационни данни на Hadoop и насочете hive.metastore.credential.provider.path към този файл, след което премахнете обикновената стойност. Ограничаването на файловите разрешения в hive-site.xml е минималният резервен вариант.

Файловете на HDFS оцеляват, но всяка таблица, дял и дефиниция на колона изчезва и Hive вече не може да ги чете. MySQL Следователно дъмповете на базата данни на метастора са част от нормалното архивиране на клъстера.

Услугата Thrift metastore слуша по подразбиране на порт 9083, зададен чрез hive.metastore.port. Клиентите достигат до него с hive.metastore.uris, а не с директни JDBC идентификационни данни, което предпазва клиентските машини от паролата на базата данни.

Да. Откриването на аномалии в регистрационните файлове на заявки в метахранилище сигнализира за внезапни пикове на повиквания, бавно изброяване на дялове и неконтролируем растеж на таблици, преди да изтече времето за изпълнение на заданията. Моделът подчертава кандидатите, а администраторът все пак потвърждава причината.

Copilot създава блока със свойства javax.jdo.option от кратък коментар, а агентските асистенти могат да скриптират цялата настройка. Проверете класа на драйвера и порта, тъй като данните за обучение все още предпочитат по-старото име на конектор.

Обобщете тази публикация с: