【问题标题】:Creating Hive Metastore Database Tables Error创建 Hive Metastore 数据库表错误
【发布时间】:2016-12-07 02:36:40
【问题描述】:

我正在运行 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

【问题讨论】:

  • 这看起来不像是错误,还有什么问题吗?
  • 未能创建 Hive Metastore 数据库表。
  • 这是一个真正的错误!您是否检查了数据库的用户名和密码,并确保可以正确连接?
  • 抱歉刚刚用完整的错误更新了主要问题,没有让我把它全部粘贴到这个评论中
  • 用户名和密码正确,我可以在 centos cli 中正常连接数据库

标签: database hadoop hive hdfs cloudera


【解决方案1】:

ok cloudera 使用的是 HIVE 0.10 版本,不支持远程登录

但您需要绕过该错误,登录到出现错误的服务器,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 元存储之前,您必须为远程 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 manager 的自动安装并再次运行,一切都会好起来的 :)

您必须围绕我们的合同 cloudera 支持进行所有安装(这是他们的业务):)

当我在带有 sorl 的 de cloudera CDH 4.X 中遇到这个问题时,这一切对我来说都很好

问候

【讨论】:

    【解决方案2】:

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

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

    按照说明进行操作。最后重启你的 hive 服务

    感谢库马尔

    【讨论】:

      猜你喜欢
      • 2013-05-20
      • 2022-06-14
      • 2021-08-19
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      • 2016-04-17
      • 2023-01-23
      • 1970-01-01
      相关资源
      最近更新 更多