こんにちは
Hadoop初心者です。
Hadoop分散環境を構築しました。
ApacheのログをHiveでcreateしたテーブルにloadしました。
件数が2万件までの場合は、select count(*) from apachelog; は普通に帰ってきたのですが、
件数が20万の場合はほとんど帰ってきません。
hive> select count(*) from apachelog; を実行すると、
2012-08-10 15:41:25,456 Stage-1 map = 0%, reduce = 0%, Cumulative CPU 11.71 sec
が永遠と表示され続けます。
以前以下のようなログも出たのですが、
2012-08-09 16:20:12,581 INFO org.apache.hadoop.mapred.TaskTracker: attempt_201208021116_0028_m_000000_3: Task attempt_201208021116_0028_m_000000_3 failed to report status for 600 seconds. Killing!
mapred.task.timeoutを、1800000 に増やしました。
根本的な解決ではないと思いますが、とりあえず、これ以外の対策は今は探っている感じです。
設定が間違っていると疑ったのですが、設定が間違ってる場合はそもそも動かないと思います。
もしくは、ログのLoadの仕方が間違っているのでしょうか。
ネットにある例題に沿って、Apacheのログを整形せずにそのままHiveへloadしました。
ログをみても、特にエラーが見つからず、処理中という風にみえます。
やったことは以下です。
(1) テーブル作成
CREATE TABLE apachelog (
ipaddress STRING,
identd STRING,
user STRING,
time STRING,
request string,
returncode INT,
size INT)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe'
WITH SERDEPROPERTIES (
'serialization.format'='org.apache.hadoop.hive.serde2.thrift.TCTLSeparatedProtocol',
'quote.delim'='("|\\[|\\])',
'field.delim'=' ',
'serialization.null.format'='-')
STORED AS TEXTFILE;
(2) データロード
hive> load data local inpath
'/home/hoge/localhost_access_log.2012-07-25.txt.gz' into table apachelog;
(3) カウントする。
hive> select count(*) from apachelog;
ヒントやアドバイスをいただけたらと思います。
よろしくお願いします。