私はこのようなバグを典型的な「ハムレット」バグと呼んでいます。これは、「エラーメッセージは同じだが、インターネット上にはさまざまな解決策があり、どれが問題の核心なのか疑問に思うようなバグ」を意味します。 まず、インポート コマンドを見てみましょう。 [root@host25 ~]# sqoop エクスポート --connect "jdbc:mysql://172.16.xxx.xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8" --username=root --password=xxxxx --table ルールタグ --update-key ルールコード --update-mode 挿入を許可する --export-dir /user/hive/warehouse/lmj_test.db/rule_tag --input-fields-terminated-by '\t' --input-null-string '\\N' --input-null-non-string '\\N' -m1 このインポート コマンドは構文的に正しいです。 次のエラーは次のとおりです: # 部分を抽出 19/06/11 09:39:57 INFO mapreduce.Job: ジョブを追跡するための URL: http://dthost25:8088/proxy/application_1554176896418_0537/ 19/06/11 09:39:57 INFO mapreduce.Job: 実行中のジョブ: job_1554176896418_0537 19/06/11 09:40:05 INFO mapreduce.Job: ジョブ job_1554176896418_0537 が uber モードで実行中: false 19/06/11 09:40:05 INFO mapreduce.Job: map 0% Reduce 0% 19/06/11 09:40:19 INFO mapreduce.Job: map 100%、reduce 0% 19/06/11 09:45:34 INFO mapreduce.Job: タスク ID: attempt_1554176896418_0537_m_000000_0、ステータス: 失敗 試行ID: 試行_1554176896418_0537_m_000000_0 300秒後にタイムアウトしました 19/06/11 09:45:36 INFO mapreduce.Job: map 0% Reduce 0% 19/06/11 09:45:48 INFO mapreduce.Job: map 100%、reduce 0% 19/06/11 09:51:04 INFO mapreduce.Job: タスク ID: attempt_1554176896418_0537_m_000000_1、ステータス: 失敗 試行ID: 試行_1554176896418_0537_m_000000_1 300秒後にタイムアウトしました 19/06/11 09:51:05 INFO mapreduce.Job: map 0% Reduce 0% 19/06/11 09:51:17 INFO mapreduce.Job: map 100%、reduce 0% 19/06/11 09:56:34 INFO mapreduce.Job: タスク ID: attempt_1554176896418_0537_m_000000_2、ステータス: 失敗 試行ID: 試行_1554176896418_0537_m_000000_2 300秒後にタイムアウトしました 19/06/11 09:56:35 INFO mapreduce.Job: map 0% Reduce 0% 19/06/11 09:56:48 INFO mapreduce.Job: map 100%、reduce 0% 19/06/11 10:02:05 INFO mapreduce.Job: ジョブ job_1554176896418_0537 が失敗しました。原因: タスクが失敗しました task_1554176896418_0537_m_000000 タスクが失敗したためジョブが失敗しました。failedMaps:1 failedReduces:0 19/06/11 10:02:05 INFO mapreduce.Job: カウンター: 9 ジョブカウンター 失敗したマップタスク = 4 開始されたマップタスク = 4 その他のローカルマップタスク=3 データローカルマップタスク=1 すべてのマップが占有スロットに費やした合計時間 (ミリ秒) = 2624852 占有スロットですべての削減に費やされた合計時間 (ミリ秒) = 0 すべてのマップタスクに費やされた合計時間 (ミリ秒) = 1312426 すべてのマップ タスクで使用された合計 vcore 秒数 = 1312426 すべてのマップタスクにかかった合計メガバイト秒数 = 2687848448 19/06/11 10:02:05 警告 mapreduce.Counters: グループ FileSystemCounters は非推奨です。代わりに org.apache.hadoop.mapreduce.FileSystemCounter を使用してください 19/06/11 10:02:05 INFO mapreduce.ExportJobBase: 1,333.3153 秒で 0 バイト転送されました (0 バイト/秒) 19/06/11 10:02:05 警告 mapreduce.Counters: グループ org.apache.hadoop.mapred.Task$Counter は非推奨です。代わりに org.apache.hadoop.mapreduce.TaskCounter を使用してください 19/06/11 10:02:05 INFO mapreduce.ExportJobBase: 0 件のレコードがエクスポートされました。 19/06/11 10:02:05 ERROR tool.ExportTool: エクスポート中にエラーが発生しました: エクスポート ジョブが失敗しました。 所要時間: 1340秒 タスク IDE_TASK_ADE56470-B5A3-4303-EA75-44312FF8AA0C_20190611093945147 が完了しました。 インポート タスクが INFO mapreduce.Job: map 100% Reduce 0% で停止し、5 分間停止していることがわかります。その後、タスクは自動的に再起動され、さらに 5 分間停止しました。最後に、タスクはタイムアウト エラーを報告しました。 タスク失敗の直接的な原因は明らかにタイムアウトですが、タイムアウトの理由はインポート プロセスの MapReduce タスクがスタックしていることです。なぜ MapReduce がスタックするのでしょうか?これはエラーログには記載されておらず、原因を確認する際に最も面倒な部分です。 まず結果をお伝えします。長い間調べた結果、1行のデータ長がMySQLで設定されているフィールド長を超えたことが原因であることがわかりました。つまり、「文字列は非常に長い、非常に長い、非常に長い、非常に長い、非常に長い、非常に長い、非常に長い」という文字列をvarchar(50)フィールドにインポートすると、タスクがブロックされます。 ここではネット上に溢れている様々な理由をまとめてみました。一つずつ確認してみてください。 マップ 100% 削減 0% で停止する考えられる理由: (MySQL エクスポートを例に挙げます)1. 長さのオーバーフロー。インポートされたデータがMySQLテーブルに設定されたフィールド長を超えています 解決策: フィールドの長さをリセットする 2. コーディングエラー。インポートされたデータはMySQLのエンコード文字セットではありません 解決策: 実際、MySQL データベースの UTF-8 文字セットに対応するエンコーディングは utf8 ではなく、utf8mb4 です。したがって、インポートしたデータに絵文字表現や珍しい中国語の文字が含まれている場合、そのデータはインポートされずにブロックされます。したがって、次の 2 つの点に注意する必要があります。 (1)インポート文でUseUnicode=true&characterEncoding=utf-8が指定されており、エクスポートがUTF-8形式であることを示しています。 (2)MySQLテーブル作成文ではENGINE=InnoDB DEFAULT CHARSET=utf8mb4が設定されている。 3. メモリ不足。インポートするデータの量が大きすぎるか、割り当てられたメモリが小さすぎる可能性があります。 解決策: バッチでインポートするか、タスクにさらにメモリを割り当てます 4. ホスト名が間違っています。 解決策: これはホスト名の設定に問題があるようです 5. 主キーが繰り返されます。 解決策: これは、インポートしたデータに重複した主キー値があるためです。それに応じてデータを処理する必要があります。 補足: Sqoop がデータベースから HDFS にデータをエクスポートするときに MapReduce が停止する問題の解決方法 sqoop 中にデータベースからデータをエクスポートすると、mapreduce が停止します Baidu で検索したところ、yarn でメモリと仮想メモリに関する設定項目を設定する必要があるようです。以前はこれらの項目を設定していなかったのですが、問題なく動作しました。しかし今回は規模が大きくなりそうです。この障害は、各 Docker に割り当てられたメモリと CPU リソースが小さすぎて、Hadoop と Hive を実行するためのデフォルトのリソース要件を満たさないために発生する可能性があります。 解決策は次のとおりです。yarn-site.xml に次の構成を追加します。 <プロパティ> <name>yarn.nodemanager.resource.memory-mb</name> <値>20480</値> </プロパティ> <プロパティ> <name>yarn.scheduler.最小割り当て MB</name> <値>2048</値> </プロパティ> <プロパティ> <name>yarn.nodemanager.vmem-pmem-ratio</name> <値>2.1</値> </プロパティ> yarn をシャットダウンして再起動するだけです。 ! ! 上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。 以下もご興味があるかもしれません:
|
<<: Vue3 (パート 2) Ant Design Vue の統合
>>: HTML テーブルタグチュートリアル (35): 列間属性 COLSPAN
<iframe src=”ページのURL” width=”100″ height=”30″ f...
この記事では、主に html + css を使用してサラウンド リフレクション ローディング エフェ...
この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...
フロントエンド開発では、スクロールバーを非表示にしながらスクロールをサポートしなければならないという...
目次1. 問題の説明2. 原因分析3. 解決策4. 処理1. 問題の説明調整センターでは、最後の 2...
HTML、CSS、JS を使用してシンプルな Web 計算機を作成する方法は?コンピュータには次の...
Postfix は、Linux システム上で電子メールをルーティングまたは配信するために使用される無...
目次Docker を使用する理由は何ですか? DockerのインストールROSイメージを取得するRO...
目次1. 公式ドキュメント2. Vue CLIプロジェクトを作成する1. Vue CLIをインストー...
<a href="" onclick=""> を...
事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...
コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、...
操作効果: html <!-- この要素は表示されません。DOM は JavaScript に...
SVN は Subversion の略称で、ブランチ管理システムを使用して効率的に管理するオープンソ...
MySQL のインストールについてはインターネット上に多くの記事がありますが、今日ノート PC にイ...