创建Hive Metastore数据库表错误

时间:2013-05-09 12:16:00

标签: database hadoop hive hdfs cloudera

我正在浏览Cloudera Manager(免费版),并且我已经达到向导创建Hive Metastore数据库的程度。 显示此错误并暂停配置过程。

使用/ var / run / cloudera-scm-agent / process / 40-hive-metastore-create-tables / hadoop-conf作为HADOOP_CONF_DIR

我似乎无法找到任何可能导致此问题的信息?

到目前为止,每件事情都已正确配置,所有安装的内容以及用户名和密码都是正确的。

之前有人见过这个错误吗?想法?

错误日志:

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:688)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1094)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2337)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at com.cloudera.enterprise.dbutil.SqlRunner.open(SqlRunner.java:109)
at com.cloudera.enterprise.dbutil.SqlRunner.runSingleQuery(SqlRunner.java:80)
at com.cloudera.cmf.service.hive.HiveMetastoreDbUtil.countTables(HiveMetastoreDbUtil.java:191)
... 2 more

Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2540)
at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:612)
... 20 more

2 个答案:

答案 0 :(得分:2)

ok cloudera正在使用版本HIVE 0.10,它不支持远程登录

但你需要绕过那个bug,登录到服务器,这个错误会让cloudera经理告诉你ip

1)创建登录到无法安装HIVE的服务器 2)创建$ HADDOP_HOME

$HADOOP_HOME="/usr/lib/hadoop/"

3)在失败的服务器中安装postgres

`$ sudo apt-get install postgresql`

$ cat /etc/postgresql/9.1/main/postgresql.conf | grep -e listen -e standard_conforming_strings

将其修改为文件中的行

listen_addresses = '*'
standard_conforming_strings = off

您还需要在pg_hba.conf中为您的网络配置身份验证。您需要确保将在下一步中创建的PostgreSQL用户可以从远程主机访问服务器。为此,请在pg_hba.con中添加一个新行,其中包含以下信息:

host    <database>         <user>         <network address>         <mask>               password

启动PostgreSQL服务器

$ sudo service postgresql start

使用chkconfig实用程序确保PostgreSQL服务器在启动时启动:

chkconfig postgresql on

您可以使用chkconfig实用程序验证PostgreSQL服务器是否会在启动时启动,例如:

chkconfig --list postgresql

第2步:安装Postgres JDBC驱动程序

在使用远程PostgreSQL数据库运行Hive Metastore之前,必须为远程PostgreSQL数据库配置JDBC驱动程序,设置初始数据库模式,并为Hive用户配置PostgreSQL用户帐户。

在Debian / Ubuntu系统上安装PostgreSQL JDBC驱动程序:

安装libpostgresql-jdbc-java并将该文件符号链接到/ usr / lib / hive / lib /目录。

$ sudo apt-get install libpostgresql-jdbc-java
$ ln -s /usr/share/java/postgresql-jdbc4.jar /usr/lib/hive/lib/postgresql-jdbc4.jar

步骤3:创建Metastore数据库和用户帐户

bash# sudo –u postgres psql
bash$ psql
postgres=# CREATE USER hiveuser WITH PASSWORD 'mypassword';
postgres=# CREATE DATABASE metastore;
postgres=# \c metastore;
You are now connected to database 'metastore'.
postgres=# \i /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-0.10.0.postgres.sql
SET
SET
...

现在您需要将所有Metastore表的权限授予用户hiveuser。 PostgreSQL没有语句一次授予所有表的权限;您需要一次授予一个表的权限。您可以使用以下SQL脚本自动执行该任务:

bash# sudo –u postgres psql
metastore=#         \o /tmp/grant-privs
metastore=#         SELECT 'GRANT SELECT,INSERT,UPDATE,DELETE ON "'  || schemaname || '"."' || tablename || '" TO hiveuser ;'
metastore-#           FROM pg_tables
metastore-#           WHERE tableowner = CURRENT_USER and schemaname = 'public';
metastore=#         \o
metastore=#         \i /tmp/grant-privs

您可以从运行Metastore服务的计算机验证连接,如下所示:

psql –h myhost –U hiveuser –d metastore
metastore=#

步骤4:配置Metastore服务以与PostgreSQL数据库通信

更改AWS amazon主服务器或您的主服务器的IP,不要使用DNS名称

$find / -name hive-site.xml
$nano /run/cloudera-scm-agent/process/27-hive-metastore-create-tables/hive-site.xml

在文件搜索中:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:postgresql://myhost/metastore</value>
</property>

并更改为正在运行Cloudera Manager的主Hadoop服务器的正确IP 此文件中的每个链接都没有正确写入hadoop主Cloudera管理器连接器,您将不得不更改为正确的IP

毕竟这只是回到cloudera经理的自动安装并再次运行,这将是好事:)

你必须解决我们的合同cloudera支持(这是他们的业务)的所有安装:)

当我在de cloudera CDH 4.X中使用sorl时出现此问题时,所有这一切都适合我。

此致

答案 1 :(得分:0)

转到此链接: http://www.cloudera.com/documentation/enterprise/5-7-x/topics/cm_ig_mysql.html

转到此主题:安装MySQL JDBC驱动程序

按照说明操作。最后重启你的配置单元服务

Thx Kumar