在我问我的问题之前,让我先解释一下这个场景。我已经使用 3 个实例设置了hbase
集群:ec2
i-xxxxxxx-- master, zookeeper1, regionserver1
i-xxxxxxx-- slave1, zookeeper2, regionserver2
i-xxxxxxx-- slave2, zookeeper3, regionserver3.
这工作得很好。现在,我尝试使用安装了 hive 的远程 EMR 实例连接到该集群的主服务器。所以,我点击了亚马逊 AWS 文档的链接:
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hbase-access-hive.html
在你创建一些表之前说。让 hive 知道远程 hbase master 的 public-DNS。设置 hbase.zookeeper.quorum=public-DNS-name;我确实做了已经提到的。但是,我无法连接到主人。我尝试使用以下脚本创建一个表:
CREATE TABLE hauto(cookie string, timespent string, pageviews string, visit string, logdate string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "m:timespent, m:pageviews, m:visit, m:logdate")
TBLPROPERTIES ("hbase.table.name" = "hauto");
所以,它给出了这个错误:
FAILED: Error in metadata: MetaException(message:org.apache.hadoop.hbase.MasterNotRunningException: Retried 10 times
at org.apache.hadoop.hbase.client.HBaseAdmin.<init>(HBaseAdmin.java:127)
at org.apache.hadoop.hive.hbase.HBaseStorageHandler.getHBaseAdmin(HBaseStorageHandler.java:74)
at org.apache.hadoop.hive.hbase.HBaseStorageHandler.preCreateTable(HBaseStorageHandler.java:148)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:467)
at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.createTable(HiveMetaStoreClient.java:460)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:74)
at com.sun.proxy.$Proxy14.createTable(Unknown Source)
at org.apache.hadoop.hive.ql.metadata.Hive.createTable(Hive.java:600)
at org.apache.hadoop.hive.ql.exec.DDLTask.createTable(DDLTask.java:3791)
at org.apache.hadoop.hive.ql.exec.DDLTask.execute(DDLTask.java:258)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:144)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1355)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1139)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:945)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:310)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:231)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:466)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:819)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:674)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:187)
)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
仅供参考,EMR
hive 安装的实例和 EC2Hbase-cluster
在同一个安全组中。我能够远程登录到从 EMR 到 EC2 以及 EC2 到 EMR 的 2181、60000、60010、60020 端口。在那个组中,我允许组内所有端口上的 tcp、udp 和 ICMP 连接。
我的 master 的 /etc/hosts 文件如下所示:
XXXXXXXXXXX master localhost
XXXXXXXXXXX zkserver1 rgserver1
XXXXXXXXXXX zkserver2 rgserver2
XXXXXXXXXXX zkserver3 rgserver3
我正在使用hadoop 1.0.1
, hbase 0.94.11
和. Zookeeper 是外部的管理者。hive 0.11.0
zookeeper-3.4.3
另外,在那之后我尝试了其他方法。这次我尝试从安装在 EC2 Hbase 集群上的 hive CLI 连接到 EMR Hbase。现在,我能够在 EMR hbase 上创建同一个表。
更新的问题:
这似乎是亚马逊 ec2 的问题。我正在为您提供这些问题的快照以及链接:
http://hbase.apache.org/book.html#trouble.log.gc