3

インタラクティブなハイブ セッションをセットアップし、Apache ウェブログの日付を s3 バケットから直接テーブルにロードしました。

    DROP TABLE apachelog;
CREATE EXTERNAL TABLE apachelog (
  host STRING,
  identity STRING,
  user STRING,
  time STRING,
  request STRING,
  status STRING,
  size STRING,
  referer STRING,
  agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"
)
STORED AS TEXTFILE
LOCATION 's3n://OperationOverkill/';

その後、次のように正常に選択できます。

SELECT * FROM apachelog LIMIT 5;

しかし、カウント (または実際の map-reduce を必要とするものは何もしません:

SELECT COUNT(host) FROM apachelog;

エラーメッセージ:

Job Submission failed with exception 'java.io.IOException(cannot find dir = s3n: //OperationOverkill/access_clickkiller_12-08-08.log in pathToPartitionInfo: s3n ://OperationOverkill/)'

私はグーグルでAWSサポートフォーラムで同様の質問を見つけました が、SOからのより迅速なポインタ/ヘルプを期待しています.

4

2 に答える 2

0

これはバグのようです。バケット ルートを使用しない場合、S3 では機能する可能性がありますが、HDFS では機能しませんでした (hdfs:///path/to/folder/ のようなもの): https://issues .apache.org/jira/browse/HIVE-7774

Hive 0.14 でバグが修正されたため、それ以上のバージョンを使用する必要があります。

AWS のコンテキストでは、

ここからサンプルコードに従っている場合: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/calling-emr-with-java-sdk.html おそらく Hive 0.13.* を使用しています: これを参照してください: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_SupportedHiveVersions.html

代わりに、新しい AMI バージョンでクラスターを作成する新しい方法を示す次のリンクをたどることができます: http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-4.5.0/emr-release-differences.html #emr-リリース-ラベル

「リリース可能な」4 または 5 の場合、問題を解決する新しい Hive バージョンを入手できます。EMR(AMI) から Hive バージョンへのマッピングについては、http: //docs.aws.amazon.com//ElasticMapReduce/最新/ReleaseGuide/emr-release-components.html

于 2016-10-09T04:35:06.600 に答える