Могу ли я создать хранилище метаданных Hive с помощью Presto?

Основной вопрос: могу ли я использовать Presto в качестве основы для своего хранилища метаданных Hive?

Я пытаюсь установить presto и hive на amazon aws, и у меня возникают проблемы с созданием хранилища метаданных Hive. Presto, похоже, установлен и работает правильно, за исключением того, что не удается подключиться к метахранилищу. Проблема в том, что когда я запускаю Hive, мне не удается создать хранилище метаданных.

Когда я запускаю Hive, я получаю следующие ошибки:

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:212)

Caused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1449)
    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:63)
    at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:73)
    at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:2661)
    at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:2680)
    at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:425)
    ... 7 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1447)
    ... 12 more
Caused by: MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused
        at org.apache.thrift.transport.TSocket.open(TSocket.java:185)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:358)
        at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:215)
        at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:73)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
        at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1447)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:63)
        at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:73)
        at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:2661)
        at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:2680)
        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:425)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.thrift.transport.TSocket.open(TSocket.java:180)
        ... 20 more
)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:404)
    at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:215)
    at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:73)
    ... 17 more

Мой conf/hive-site.xml выглядит следующим образом:

<property>
<name>hive.metastore.uris</name>
<value>thrift://ec2..........amazonaws.com:8080</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore. </description>

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:presto://ec2...........amazonaws.com:9083/hive;databaseName=metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>presto-jdbc-0.90.jar</value>
<description>Driver class name for a JDBC metastore</description>

Can I use presto to create my metastore or do I have to use mySQL or derby? If I can, I would greatly appreciate any help I can get solving this.

Спасибо!


person Colin McDermott    schedule 17.02.2015    source источник
comment
Просто интересно, а зачем тебе это? Интересный вариант использования.   -  person Pradeep Gollakota    schedule 17.02.2015
comment
Честно говоря, главным образом потому, что я новичок во всем, что связано с presto/hive, поэтому, когда я следил за учебными пособиями по настройке hive, и мне предлагалось использовать mySQL или Derby, я подумал, что могу просто заменить Presto. Только сейчас, после многих неудачных попыток, мне пришло в голову, что это может быть невозможно.   -  person Colin McDermott    schedule 18.02.2015


Ответы (4)


Спасибо за ответы.

@Dain Sundstrom: я попробовал ваше предложение о начальной загрузке, но не получил настоящей радости.

Проведя дополнительные исследования структуры улья, я не думаю, что можно использовать presto, как я пытался. Насколько я понимаю сейчас, presto использует hive в качестве своей базы данных, но самому hive нужна базовая база данных mySQL или derby, в которой я ошибался. Итак, мой план состоит в том, чтобы теперь установить mySQL, связать с ним куст и сделать это таким образом. Шаг 2 этого плана — молиться, чтобы он работал без особых проблем.

Спасибо за вашу помощь.

person Colin McDermott    schedule 19.02.2015
comment
Точнее говоря, Hive — это инструмент, сочетающий в себе возможности складирования и запросов. Он опирается на серверную часть metastore для складирования. Многие технологии, такие как Spark и Presto, развивались с течением времени (независимо от Hive), которые с тех пор добавили тесную интеграцию с Hive. Эти два инструмента, в частности, НЕ имеют каких-либо собственных складских возможностей, они просто геркулесовы механизмы запросов. Они полагаются на Hive для хранения данных и создали свои собственные оптимизированные программы чтения/записи/оптимизаторы для аналитики данных (запросов). - person y2k-shubham; 06.01.2019

Теоретически вы должны быть в состоянии сделать это. Но Presto нуждается в бэкенде; который поддерживает Presto, используя для вашей базы данных метамагазина? Какой бы сервер вы ни использовали, он должен поддерживать вставки.

person Pradeep Gollakota    schedule 17.02.2015

Существует загрузочное действие Presto для EMR, который должен выполнить всю настройку за вас.

person Dain Sundstrom    schedule 17.02.2015

Вы можете использовать следующие шаги при сохранении хранилища метаданных в MySQL:

CREATE DATABASE metastore_db;

CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword';

GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';

flush privileges;

После этого добавьте приведенный ниже файл в свой файл hive-site.xml в $HIVE_HOME/conf/.

<property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://10.0.0.96/metastore_db?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>

        <property>
        <name>hive.metastore.uris</name>
        <value>thrift://10.0.0.96:9083</value>
        <description>Hive metastore Thrift server</description>
        </property>

Затем запустите службу хранилища метаданных:

hive --service хранилище метаданных &

Просто прокомментируйте, если вы хотите узнать больше или вы застряли на чем-то.

С уважением, Деви Прасад.

person Devi Prasad    schedule 23.02.2015
comment
Если я запускаю его на одном компьютере, какой IP-адрес я должен указать в части hive.metastore.uris и javax.jdo.option.ConnectionURL? - person AritzBi; 25.05.2015
comment
Вы можете указать локальный хост или IP-адрес в зависимости от того, что вам больше подходит. Я бы посоветовал вам использовать локальный хост, если hive, metastore db и presto работают на одном компьютере. - person Devi Prasad; 25.05.2015