hive で select count(*) が返ってこない件

852 views
Skip to first unread message

rin

unread,
Aug 10, 2012, 2:46:54 AM8/10/12
to hado...@googlegroups.com
こんにちは
 
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;

 
ヒントやアドバイスをいただけたらと思います。
 
 
よろしくお願いします。
 

 
 

Sho Shimauchi

unread,
Aug 10, 2012, 2:54:19 AM8/10/12
to hado...@googlegroups.com
rinさん、

嶋内と申します。
Hadoop の環境について教えてください。

- ノード数
- 各ノードの基本スペック(CPUコア数、メモリ、ディスク容量)
- 使用している hadoop のバージョン(ディストリビューションを使っているならそのディストリビューションのバージョン)

現時点では情報がないので何とも言えませんが、
メモリが足りずにswapが発生してタイムアウトまでに処理が終わっていないというのが、そのエラーから考えられるもっともありえそうな原因です。


2012/8/10 rin <yling.met...@gmail.com>



--
Sho Shimauchi
Customer Operations Engineer, Cloudera

Reply all
Reply to author
Forward
0 new messages