質問する前に、まずシナリオを説明させてください。3 つのインスタンスでhbase
クラスターをセットアップしました。ec2
i-xxxxxxx-- master, zookeeper1, regionserver1
i-xxxxxxx-- slave1, zookeeper2, regionserver2
i-xxxxxxx-- slave2, zookeeper3, regionserver3.
これは完全に正常に機能していました。ここで、ハイブがインストールされたリモート EMR インスタンスを使用して、このクラスターのマスターに接続しようとしました。そこで、Amazon aws ドキュメントの次のリンクをたどりました。
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hbase-access-hive.html
これは、テーブルを作成する前に言います。ハイブにリモート hbase マスターのパブリック DNS を認識させます。hbase.zookeeper.quorum=パブリック DNS 名を設定します。私は言及されていることを正確に行いました。しかし、マスターに接続できませんでした。次のスクリプトを使用して1つのテーブルを作成しようとしました:
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 ポートに telnet で接続できます。そして、そのグループでは、グループ内のすべてのポートで tcp、udp、および ICMP 接続を許可しました。
マスターの /etc/hosts ファイルは次のようになります。
XXXXXXXXXXX master localhost
XXXXXXXXXXX zkserver1 rgserver1
XXXXXXXXXXX zkserver2 rgserver2
XXXXXXXXXXX zkserver3 rgserver3
hadoop 1.0.1
、 hbase 0.94.11
、hive 0.11.0
およびを使用していzookeeper-3.4.3
ます。そして、飼育係は外部の管理者です。
また、その後、私は別の方法を試しました。今回はEC2 Hbaseクラスターにインストールしたhive CLIからEMR Hbaseに接続してみました。これで、EMR hbase に同じテーブルを作成できました。
更新された質問:
これはAmazon ec2の問題のようです。これらの問題のスナップショットとリンクを提供しています。
http://hbase.apache.org/book.html#trouble.log.gc