2013-05-09 196 views
1

我正在运行Cloudera Manager(免费版),并且我已经达到了创建Hive Metastore数据库的位置。 显示此错误并暂停配置过程。使用创建Hive Metastore数据库表错误

/var/run中/ Cloudera的-SCM代理/流程/ 40-蜂房metastore创建桌/ 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 
+0

这看起来不像是一个错误,还有什么? – greedybuddha 2013-05-09 14:01:18

+0

无法创建Hive Metastore数据库表。 – RoryM 2013-05-09 14:05:27

+0

这是一个真正的错误!你有没有检查你的用户名和密码到数据库,并确保你可以正确连接? – greedybuddha 2013-05-09 14:08:07

回答

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数据库运行蜂巢metastore,您必须配置一个JDBC驱动程序来远程PostgreSQL数据库,设置初始数据库模式,并为Hive用户配置PostgreSQL用户帐户。

要将于Debian/Ubuntu系统上安装PostgreSQL的JDBC驱动程序:

安装libpostgresql-JDBC-Java和象征性的文件链接到/ usr/lib目录/蜂房/ 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没有语句一次授予所有表的权限;您需要一次授予一个表的权限。

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步:您可以在任务用下面的SQL脚本,自动配置Metastore服务与PostgreSQL数据库

变化AWS亚马逊主服务器的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> 

,并更改为正确的IP是你师父的Hadoop服务器,其中u运行Cloudera的经理 也是在该文件中的每一个环节没有被正确地写入的Hadoop主Cloudera的经理连接器,你将不得不在这之后的所有更改为正确的IP

只是回到了Cloudera管理器的自动安装并重新运行,这将是所有好的:)

,它所有的斯塔你必须解决我们的合同Cloudera的支持llation(那是他们的事):)

这一切的正常工作对我来说,当我在去Cloudera的CDH 4.X这个问题SORL

问候