1

この方法で同じファイルに2つの「ストア」を持つPigスクリプトを実行しようとすると

store Alert_Message_Count into 'out';
store Warning_Message_Count into 'out';

ハングします。つまり、50% 完了したと表示された後、処理が進まないということです。

これは間違っていますか?両方の結果を同じファイル (フォルダ) に保存することはできませんか?

4

2 に答える 2

1

HDFS には追加モードがありません。そのため、map-reduce プログラムを実行しているほとんどの場合、出力ファイルは一度開かれ、データが書き込まれてから閉じられます。このアプローチを想定すると、同じファイルに同時にデータを書き込むことはできません。

別のファイルに書き込んでみて、map-red プログラムがハングしないかどうかを確認してください。それでも問題が解決しない場合は、他にいくつかの問題があります。

結果と map-reduce ログを取得して、何が問題なのかを分析できます。

[編集:]

同じファイルに書き込んだり、既存のファイルに追加したりすることはできません。HDFS 追加機能は開発中です。

これに取り組むには、次の 2 つのことを行うことができます。

1) Alert_Message_Count と Warning_Message_Count の両方に同じスキーマ コンテンツがある場合は、Chris が提案したようにユニオンを使用できます。

2) スキーマが同じでない場合は、後処理を行います。つまり、2 つの別々の出力を 1 つにマージする map reduce プログラムを作成します。

于 2012-06-05T22:49:31.783 に答える
0

通常、Hadoop MapReduce では、ジョブの出力を既に存在するフォルダーに保存することはできないため、これも不可能だと思います (Pig がコマンドを一連の M/R ステップに変換するのを見て) - しかし、私はただハングするのではなく、なんらかの形式のエラー メッセージが表示されることを期待してください。

クラスター ジョブ トラッカーを開いて、タスクのログを確認すると、ログから、これをさらに診断するのに役立つ何かが得られますか?

豚のメーリングリストもチェックする価値があるかもしれません(まだ行っていない場合)

あるデータセットを別のデータセットに追加する場合は、次のunionキーワードを使用します。

grunt> All_Count = UNION Alert_Message_Count, Warning_Message_Count;
grunt> store All_Count into 'out';
于 2012-06-05T22:48:36.827 に答える