1

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

2 回答 2

2

好的 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 管理器的主 Hadoop 服务器的正确 IP,以及该文件中未正确写入 hadoop 主 Cloudera 管理器连接器的每个链接,您将必须更改为正确的 IP

毕竟这只是回到cloudera manager的自动安装并再次运行,一切都会好的:)

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

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

问候

于 2013-09-15T18:34:55.423 回答
0

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

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

按照说明进行操作。最后重新启动您的配置单元服务

谢谢库马尔

于 2016-12-06T18:36:40.853 回答