2013-05-09 138 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

問候