Изграждането на Spark в кошер MySQL metastore не се използва

Използвам Apache Spark 2.1.1 и съм поставил следния hive-site.xml в папка $SPARK_HOME/conf:

<?xml version="1.0"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://mysql_server:3306/hive_metastore?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>${test.tmp.dir}/hadoop-tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>hdfs://hadoop_namenode:9000/value_iq/hive_warehouse/</value>
  <description>Warehouse Location</description>
</property>
</configuration>

Когато стартирам thrift сървъра, схемата на metastore се създава в моята MySQL DB, но не се използва, вместо това се използва Derby.

Не можах да намеря никаква грешка в регистрационния файл на спестяващия сървър, единственото нещо, което привлича вниманието ми, е, че той се опитва да използва MySQL в началото (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL), но след това без грешка използва Derby вместо това (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is DERBY). Това е регистрационният файл на thrift сървъра https://www.dropbox.com/s/rxfwgjm9bdccaju/spark-root-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-s-master.value-iq.com.out?dl=0

Нямам инсталиран кошер в системата си, просто се преструвам, че използвам вградения кошер на Apache Spark.

Използвам mysql-connector-java-5.1.23-bin.jar, който се намира в папка $SPARK_HOME/jars.


person José    schedule 19.07.2017    source източник
comment
set, стойността на hive.metastore.schema.verification на false в hive-site.xml както в hive, така и в spark conf и рестартирайте услугите и опитайте отново   -  person Noman Khan    schedule 29.07.2017
comment
Зададох го и същото поведение. Когато казвате и в кошер, и в искра, имате предвид в $SPARK_HOME/conf/hive-site.xml и $SPARK_HOME/conf/spark-defaults.conf? Не забравяйте, че нямам инсталиран кошер, използвам Spark, вграден в Hive.   -  person José    schedule 29.07.2017


Отговори (1)


Както се вижда в hive-site.xml, не сте задали услугата metastore, към която да се свържете. Така че spark ще използва услугата по подразбиране, която е локална услуга за метастори с бекенд на derby DB
За да използвам услугата Metastore, която има MySQL DB като бекенд, трябва да:

  1. Стартирайте услугата metastore. можете да погледнете тук как да стартирате услугата hive metastore admin ръководство. Стартирате вашата услуга metastore с бекенда на MySQL DB, като използвате същия файл hive-site.xml и добавяте следните редове, за да стартирате услугата metastore на METASTORESERVER на порт XXXX:

    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://METASTRESERVER:XXXX</value>
    </property>
    
  2. Нека spark знае къде е започнала услугата metastore. Това може да се направи с помощта на същия hive-site.xml, който сте използвали при стартиране на услугата metastore (с редовете по-горе, добавени към него), копирайте този файл в конфигурационния път на Spark, след което рестартирайте вашия spark thrift сървър

person user1314742    schedule 31.07.2017
comment
Но не инсталирах кошер, просто имам Apache Spark. Така че, ако стартирам thrift сървъра, намиращ се в папка $SPARK_HOME/sbin, той ще използва единствения hive-site.xml, наличен в $SPARK_HOME/conf. Или има нещо, което все още не разбирам? - person José; 31.07.2017
comment
За съжаление, не знам друг начин за стартиране на услугата metastore без използване на кошер. вашето разбиране е добро, но идеята е, че spark thrift сървърът е изграден върху hive сървър, използвайки metastore услуга, която играе ролята на посредник между hive/spark сървъра и бекенд базата данни - person user1314742; 31.07.2017
comment
за да стартирате metastore с помощта на hive, трябва просто да изтеглите версия на hive, да я разархивирате и след това да поставите вашия hive-site.xml в конфигурацията на hive, след което да стартирате неговия метаstore сървър. не е необходима допълнителна конфигурация. - person user1314742; 31.07.2017
comment
Благодаря за отговора, възнаградих го. Едно нещо, ако използвам hive, тогава трябва ли да го инсталирам на всеки възел на моя клъстер, или ще бъде достатъчно да го имам в една машина? - person José; 31.07.2017
comment
Ако искате да използвате hive само за стартиране на metastore, тогава го инсталирате на един възел в клъстера. НЯМА нужда да го инсталирате на всички възли.‹br/› благодаря за наградата, моля, когато смятате, че този отговор е решението на проблема, приемете го, за да бъде маркиран като отговорен ;) - person user1314742; 31.07.2017
comment
Проблемът е, че искам да използвам thrift сървъра, този, предоставен от spark, за да го заявя чрез JDBC, но ако стартирам hive thrift сървър, тогава заявките ще се изпълняват през hive, без да се използва spark engine. Какво мога да направя? - person José; 31.07.2017
comment
Нека продължим тази дискусия в чата. - person user1314742; 31.07.2017
comment
Намерих начин да реша проблема, както правилно предполагате, че инсталирах hive, за да използвам услугата metastore, проблемът беше, че инсталирах Hive 2.1 и четях някаква документация за spark и spark се изгражда с Hive 1.2, така че Инсталирах този и след това работи. По някакъв начин, когато стартирам thrift сървъра, той все още регистрира Using direct SQL, underlying DB is DERBY, но се свързва и с URI на metastore на кошера. Добавих във въпроса, че не използвах Hive, така че моля, добавете към отговора си, че трябва да инсталирам Hive версия 1.2 и ще го приема. Благодаря много. - person José; 01.08.2017
comment
Добър улов!!, забравих да го кажа. ако искате да се потопите повече в зависимостите и техните версии, погледнете github.com/apache/spark/blob/v2.1.0/pom.xml#L133 - person user1314742; 01.08.2017
comment
Всъщност открих, че услугата metastore не е необходима. След като първоначално следвах тези указания и го накарах да работи с него, току-що премахнах hive.metastore.uris, затворих услугата metastore на кошера и накарах искра да се свърже директно с MySQL и това изглеждаше, че работи точно по същия начин, но без изобщо изискването за кошер. Има ли някакъв недостатък да го правите по този начин? Изглежда, че OP се опита да направи, но не съм сигурен защо тогава не се получи. - person user1084563; 07.08.2018