代码測试环境:Hadoop2.4
应用场景:当须要定制输出数据格式时能够採用此技巧,包含定制输出数据的展现形式。输出路径。输出文件名称称等。
Hadoop内置的输出文件格式有:
1)FileOutputFormat<K,V> 经常使用的父类。
2)TextOutputFormat<K,V> 默认输出字符串输出格式。
3)SequenceFileOutputFormat<K,V> 序列化文件输出;
4)MultipleOutputs<K,V> 能够把输出数据输送到不同的文件夹;
5) NullOutputFormat<K,V> 把输出输出到/dev/null中,即不输出不论什么数据。这个应用场景是在MR中进行了逻辑处理。同一时候输出文件已经在MR中进行了输出,而不须要在输出的情况;
6)LazyOutputFormat<K,V> 仅仅有在调用write方法是才会产生文件,这种话,假设没有调用write就不会产生空文件;
步骤:
相似输入数据格式,自己定义输出数据格式相同能够參考以下的步骤
1) 定义一个继承自OutputFormat的类,只是一般继承FileOutputFormat就可以;
2)实现其getRecordWriter方法,返回一个RecordWriter类型;
3)自己定义一个继承RecordWriter的类。定义其write方法。针对每一个<key,Value>写入文件数据。
实例1(改动文件默认的输出文件名称以及默认的key和value的分隔符):
输入数据:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVcAAAESCAYAAABJpJbHAAAgAElEQVR4Ae2dX4xc1X3HzxJIU0VRUiG7NjatX/pQIBUERbLzxEtIpNaBB4ddp1IVKSkKJG15yIM3SK0qtVlLyYMpSajitor6UO8iIew2JS2RkPvQ7KqB1ArmqQ9dIMiLkQIhiZIS8PT8Zu5v5jdnzv079975cz8jDeeec35/zvncO989c+4ds9LzL8cLAhCAAARqJXBdrdEIBgEIQAACfQKIKxcCBCAAgQYIIK4NQCUkBCAAAcSVawACEIBAAwQQ1wagEhICEIAA4so1AAEIQKABAohrJag/d6dXXncrp39eyXu+nXb83Fb83Hbme5iVRrfMc6sEpIATzApAipogrlEsOY07b7t1t+LOffq9OYYL2L1z0c9t1c/t6AIOPmfIyzy3nKlX7oZZZXST4rpz2q3IyiXrnbKq2dtcS/zW3OZefEwjmyTH2qZLMY0HmHnrL93mmWvObdzg1g7MfDA1D2DPz23dz+2hzs5t57T/RiLfSobvn7jYGn5v843E5o2Ma11tknhrP631Wi8yhukukGLXw87pUC9OpzCbvT6M9Cddo6ZjNvKeFNejp1zvyjm/dpHXhtv2P+CSH3H139sbA8/1i1F4g87s/x7wYtqPNcyRbT93vTv/505ueTJ3LeOq9VvJ3JZx1Zo/NxHWY/5vy+q5X/fX6Lv91S+va+7M5i8rXYYH1j7g4/yG/zxdn3yeKoWZndNOEWYrCbMrfq7bCbN1z6zakmnh9cGeLS90k68r53peXP3PYjd6XlzHX9sb8nPZ3sZEx7hZbk1zrJ7rXck1nheDX/TOrf6451bfXKAxF2V3xc/Nn/MFOB+XH/1K75M3bfYuF52aP1u5c7vypr/m/bl1b0xe84XzpBhq7IW6boowy9CJFBSFmxdSH8Znd70V2szjvU23dvCku31bVrGnMk2XtlNXrdvvc0u3I6CrlO21OZ/bVffKCyWvsDJzW73OHSkZfinNSzE7ArPIRTC5LRAx6jft7jr/bXjOX36PaE33f+L7PtUnkOy1rl7vlu9eT7K3tnpu7ud29cJ593f/XOYsLs7cysyqWVuY1cE3R1zX3TG9sSWbUSmv0SZx/TepJmL78axV3M9JGX6xZl21PhRZte78ZHQDxNy0GN1wiD225cV6zd44GR2vRfb4xmIlN1vG7ZLHw+yNmL2furVh3cc3YxubtK5SHoqtWi+7s4e+6u4bvrfcC1e/6x4e1n3fA991V8cCXnVPP2B9BscPXxi3GrgUs33ha4MYX3jwzSTTy+4vzRjOPjc2gFElc27ODbkefHuweNh62x0cMpu8mTW0V5s0pqMRFD6aiO1zjJ/jQagJu9gYzLlf2/x55FqbnNtwoLnMkhtT/ptsf8G1ddIzS1/UTHyGa7yJPRE7RR8m7GJjkG/nyTzWNnfMQi19bkNmsYPxXYKkpvsdds+1yF6r+hXZt8u1TfZ8/P7u6rnRruyVc6v9PV839aZvdOYpjQX2WlP21a6ce92P1+/lbfzMxE7i+fbRNEZtabar534xjBGPK90mjuSVfb7tNwZjiO4nFthb62d9tffvn5O9zuT9uad7rz67mdTt/ufzvW8mNl86/2oyXuP76PNJmxRlbDXU070v9ePbnCbk2GHRuXmnlPM3Fs5Wytjn2o7OWbFznAwkL6729/eSX+/px2h7Q/aWw2tSJ1eGWbLnWuTzLuFzP/M6hiK2FfUhbwza37/ntGqYyT0o/x59YM1g44c5K1cjx0eOtHvHM/nr6Sfj/4KMdjgPrD00uCO5fib1ERgz6noOs1atU2VYcR5r8nqPX6XoHWpt82WS222823N4z7DjwNoNCYdfpXPwPr1Nv9I++v7BXeve+93RYYTkIGeVEpr36+sfd48/9lG3/85V9/grX/TvVXdrYvjC1/7Nfdcf/843/sj99T37k9b97u7HPu4+KrWN77mnkwVsGdskULmiytzKZajHeppzXGgE1/mnfj4wfLzu6F0ZH/uFYTZ4kqE5fZAnpfxKNpGeo3clT0oV4j0wyqAcRDngnwvzj2Sdmvh0BnY1Vfd2Lw0irR/zX7l1WS7lMf+Qe5uvJvZaVUh77uTBZDug/9Xuve6UPLpzavSY196u/MH0r/W3RlsP/a+kb+Vw8B8oE2cQJPxvlb21m91ffOG2MFBSv+y+l1yDRw6rsKrpbe4j/RP3pvuPbVHXMrYao0xZZW5l4tdnW/0c1zeGQaRFYjYv+pB+Doo/LZAeo5Ge3d3k9plfufbaUvTYTHTVWvsTAiKk/i05ZX/M7/kd3HrdV/wvv66MVhm7Kq6yCs0Vy9gEMtp0lTL3TwhkzCGta4Hm1ug5TuMTa18oZnOiDzGOSVvxlWtGkCa6hsvwS7sTv2rp/yIktiFd+0CaWLX6QSY3G4Y3Kw68z38r8CvW/oPrspod3WwYfoW7dC3CIeMmVS6LJlYpujp1bvdH4c2rcKVaxjZ7MlcvfNPfcLPPsjQxt+wxTNPb3DkuM6pFY5Z8RZqpPmTznVtxdUc/7fyD387JnUjzc1u56ycPLmxE72z7C6TOR7H2fuXO+8/sRuwJgZDrgevc7dK29Y67qD9O8U8RHDyZfK239ont1slfODM1L7rXXP/Ljn3W8uivJRz8ytb8QzFyx3jAIfL0gs2Vdrx3MZlb7AmBNKf89lu/MNhb/Z8H/9GNng6QJwIGe7HO79f+8Z2DOGVsh5n3H0yeqfyJe0X02z+58Ig8QbCuu76+raG5DcdQ90FT57jMOBeOWRV9KAOkBtuJ+1zJUwE+9ODumC/zbpAN7+Abn4H/6G6b5iljKz7+F7fDceiY7NMDGndQju4gRn9dNm6cW+vfVS3xq5rhHfz+3Vm5I/tG75w+LTB2d/ZnvY2hTXLndliP/0JoeId3aPdj/xTF6OmBXi895rjdYNp9roXu8o7u6A+fFJh4GiBEaZ4O0KcLfDl6esDal7FN/IZPKZgnF0zI4nPzTmN31MfPRey6nzzH6jO6G69DKWMrPvnneBC5UNyJeSXX1fDJkWTcyfVdjpn+MmvysxlnljzhM0N9KKQ7Y08KyNySX6iGmljoc9PrrcjpqkGjly9Esg/q/O/M7V36pZho8ms7v7k79iQGc1sKAuUnsczXQ3katXkgriko5V9FWtaX/GMiRV/y44FFesmjYUVfy3yOizIQuzLXQ5m4XbdFXLt+BTB/CECgEQLze0OrkekSFAIQgEA7BBDXdjiTBQIQ6BgBxLVjJ5zpQgAC7RBAXNvhTBYIQKBjBBDXjp1wpgsBCLRDAHFthzNZIACBjhFAXDt2wpkuBCDQDgHEtR3OZIEABDpGAHHt2AlnuhCAQDsEENd2OJMFAhDoGAHEtWMnnOlCAALtEEBc2+FMFghAoGMEENeOnXCmCwEItEMAcW2HM1kgAIGOEUBcO3bCmS4EINAOAcS1Hc5kgQAEOkYAce3YCWe6EIBAOwQQ13Y4kwUCEOgYAcS1Yyec6UIAAu0QQFzb4UwWCECgYwSuD+d79uzZsIk6BCAAAQiUJDAhruJ/4sSJkmEwhwAEIAABS4D/tbalwTEEIACBmgiw51oTSMJAAAIQsAQQV0uDYwhAAAI1EUBcawJJGAhAAAKWAOJqaXAMAQhAoCYCiGtNIAkDAQhAwBJAXC0NjiEAAQjURABxrQkkYSAAAQhYAoirpcExBCAAgZoIRH+hVVPsuQ7z/I967vkfzfUQGdwCE/jgYec+eHhlgWfA0Kcl0MlfaImwPvIvV93+G65Oyw9/CEQJXP3Vfvdnx/ePCeze3p575plnXK/Xi/rU3Sh5Pvaxj7l9+/bVHZp4BQh0cuUqK1YR1i9/9oMFEGECgfIEHv77y+6HL+8bE9ennnrKnTx5snywKTyefPJJ96lPfWqKCLhWJdBJca0KCz8ITEPghhtuaG3VquN855139JCyZQKIa8vASddtAteuXXMrKyt9kW2r7Dbx2c2epwVmx57MHSMgwiqvtsuOYZ6b6aauXOWvqn21tQlvc3IMgWUjIF/T5bOlK9g2ymVjuCjzia5c9euKCGpnRHVv062tbbq9Ns9cWzlNnp3TK/0P98o9f+ruXTntdmS+0q/HWfMvapcVo8N9ba9YNV+Hkc906qkr1zpGpSJdR6ymY+xdPO/cvWfcgaYTmfi15xTxO7jrHuqdckejeXbct9ZX3bkr3q7KRA+suc12niIyo1+uQxU8XbS0VS4XxcWYzcTKNSaIegHM25RkrPKe/rXn+tp6VxXFqZq9rZwmz96uu+Rud0fanGZVPEvoJ5+jWbyXEOVCTGlCXIuOWoVNS+tn2+xxzCat39o2f7zrdt29rq+t4VffsL5zevC1ui/sfiU3to+w404ngr9iv2ZLjLXT7vSa/DFIvor7jGM5w/5+3uQr/EqQJ9rncx886bbcujs2Zp/kcbKq1f4Vd/pffX04lpBwxjzUJ+Gyubk25LE2DiMM2vm6CKusXDPLK0+4z954o7tR3meecE985kZ35vuJ394T7jPad+Nn3BN7+fEkF6/ZEKgkriKI4V9gadOX9kndHmt/nr/a5ZWx2Hk+0f6di2799iMFtgS86By75L9WJyuQ7dvdyYd0n3bPba4dc2570Hfl3CV3zO7hbq07/33d80i+soc5x/oHQnl7EqsneQ6qKKf1HXWnrpxzq27DD8F87dc88pV+2N9zp+6MkvCNOfMYc1t3592ZwTne3nBbJ7812MMds6GiBOR6lZduDUyW/+Ueue1+d+tTV91rr73mLh9+yt3vd6t6/acMnnVnbr3f3fad19zVq77/O7e5+289457NjDd4OqGflP+0TiBXXHVlacWz9VE2nHDn4rrbuMvuUmYl3HK7u0n/0VOu51du/W/Zexfd+a0Np2EOrD3kNrbOu4vDle2qO3JkFHcyp+nvf30fxXJH7/KSecntSqysvlH44dFknmFX/CB3HtZt1d3bX+77Nj+5VdvF8QQBEdfMleuz/+n+6t6/dat3Duz23Xu/e9hH8X+S3bW9F91lX/vIh5KV74c+4muX3Yt7OSvh5PGvicHQ0DiBXHHVv7ZaNj6i1hPsuIvrRsgy8/vVYW/b+e/dw6/Cp/u329VJvpJr3zH/Bd2+7F5nLKfp9+q9tXrEHRm6++PVRNSz+ob2ehDLo31ZZdY8rJ8Zs23mOJWAfI7S3q++dFmU1PQfdjff40OJz0svu/P33OwOD/2l77x7+aX0eMv7mU3FO1cdE+IqJ2SZV6kT9OVr88ZdY3fXJ2zGGkRgkwvafxVeP6Zf18VIvpLbi918Pbcx8nLKKnBL9kr15Y+3kpVtVp+aa5mXR+0myoLzmPCjIYuAfLayVq77Dt/q3e1K9CX30oWB2F47dMjdc+El9+Jwz/ZF33ePO3TI2sfjZ42JvuYITIhrc6nqj6xbFtNE3tu9NL4lcOCIv5++7i4mK1J5XGpLE/Rv4gQ3l7TvwF3u3tWRX9azoxM5NYaWwRiciKTe5c/q6/sn2wf+ODeP5rNliXlYN47zCehKcnKvNfnl1h1H3ZcuPOg2vz+o7z35TfdlH7a/57r/ZneLr20/l+zZPrfta7e4m/dn7eGy55p/VpqziIqrrl5VvPSi0GGE/WIX2oittVPfsD0th7Vv8lgewfKLQfM66j59btWvSAdf7x/yTxFsaK/cFOrfXEq++vdvbukzpQfc2ub2aMvg4Hl37xXt0wBS7vUf+xrPafvleHBz6pJuP4zlyejrC+OWv/nlnwbYKZInzCv1ovOI+dKWRUA+D1kr117vQ+7BH3zdvfCJQ+6mm25yd7x8q/+j+gl3+LD43eE+7/suH7/Jr1Z9//HL7us/+Ly7Y7iSja9gY5/LrDHSVx+BTv57rv+003OXL1/mnxys7zoiUkBA/snBW265xf3hsdH65bHHHnPHjx8fLjp08ZFePue+8Vv/4A4/+zV3z29W+8devv3tb7sHHnggGB3VNgiMznwb2cgBgQ4TyF25vnrBPXjzg+7Cq8kK13/1P+1+1x3al7fiTe9n5Tq7C67Rn7/OblpkhsD8ERChyxS7fcfdnz/6tPvwh3/b/Ul/+Mfdo99/1N0hfhWnk5mvYkzcihFAXItxwgoCtRCQPVe9RxErb/z9R9z//sHfmK0D2UuttiWg8WsZOEFKE2BboDQyHCBQjcBbb73Vd0x9WiB54L/O/rfffrvaYPGamkAnV67yf+Z85r/3O7npwAsCTRB49a19bu3mlbHQd999t7tw4YJ717veNdbeVEX+7Vj5HxTymg2BTj4tIKjl/wD7w5er7mTN5mSRdXEI/J4XVv7X2otzvpoYaWfFtQmYxIQABCCgBNhzVRKUEIAABGokgLjWCJNQEIAABJQA4qokKCEAAQjUSABxrREmoSAAAQgoAcRVSVBCAAIQqJEA4lojTEJBAAIQUAKIq5KghAAEIFAjAcS1RpiEggAEIKAEJn7+evbsWe2jhAAEIACBigQmxFXinDhxomI43CAAAQhAQAjw81euAwhAAAINEGDPtQGohIQABCCAuHINQAACEGiAAOLaAFRCQgACEEBcuQYgAAEINEAAcW0AKiEhAAEIIK5cAxCAAAQaIIC4NgCVkBCAAAQQV64BCEAAAg0QQFwbgEpICEAAAogr1wAEIACBBgh0QlzvO/TVBtAREgIQgEA6gcLiKgKl7/Rw5XuaiGlHsYjCGmPS5Dw0X1aOrD7Lu+px0/Grjgs/CFQlkCuu+sF7/JUvOnk38Woqro616fiap87Sjrlp4dFcWobzaDp/0/HD+VCHQBsEov/koCaWiz7tA6c2XSlnyWLW56CO/Fn86ojfleuQeS4OgdyVaziVLn4QWFmFV0G5OvzK8cJ6OQik/nuuWSsNO/Xwg1NGfDWHjRH62z7Nm2ej/Rpf/Gwc7dd4aaX1UZvQN7QJ+9Uvq0yLYdvDuLE+bQtts3JLn/jFfDSe2MT61VdK+1Jb66/92id122/bbZ+0Wzvps7ZhX9gvdV4QmAmBXsrrkzd9JaVn1BzahPWRZfxI7K2PPRaPsB62hf6xfmmTVyzWoCf/v2m+YXtYz488Oa5YjFibxpY+fUtblq36hGWeT1p/rL1omx1DzEf6pT3ss3V7rPY2LscQmCWBzD1Xq/Z2hWBXDtamynFWLO2zucMcaqPtYV3axT/Wrj6zKusal52bPZ7FvOrOXzReXSxnwYycS0ogpuzhikBswrawHrOJxda2Iv5iY+3SjjWmLdVXS9tX5tjmtH6x9lib9bHHMduibRonZq99Rcu8GEX6xSbNLq1dx5fWH2sP26Sub41HCYF5IVB45dr235Y6ViK66pFYvJohYBnXcc6KjrLNXEXHhB0ELIHo0wLygbGCZI+tsz2e9mLP888bQ16/HWvZ4yKx88afl7NIjrwYs+5XoQ3H0dTcJK59h3mpQ2CWBDJXrvqhKPKhSbOJTU7ihgIe89f8sRhp/mk+mjMWq2qbzRUbf1bccPzW1saVdjv2rD4bI+s4L0bZfslVZv5Z8cM+iR22ST3MF9qIHy8IzJJA6qNYsxwUuSGQRSBNXEPBzYpBHwSaJjAhrqwAmkZO/CYJILBN0iV2GQIT4lrGGVsIQAACEIgTiN7QipvSCgEIQAACRQkgrkVJYQcBCECgBAHEtQQsTCEAAQgUJYC4FiW1AHYrK68vwCgZIgS6QSBTXIt+WMWuqO08Ym1i/E3EzGIn+Xq934iazGIsbeZsM1cUcKRxHscUGSZNDRLIFNeiedM+1EX9Z2236OPP49f2/CRfmznbzJXHmn4IKIFccZW/wLzKE2hTYOQcITDlz9G0HlmfjTbP/7TzwL8ZAqniyge2GeBEhQAEukEg898WyEMQ+8tt23Q1ldcmeUJbqcf87Jiy+m2fjZ/mb9uzjm3ccMyaJ2YTxrQ26ieltuv8tVR/zal1sQ/bbJ8eh6Xm0XaNoe2aV0u10zJsV3/tzys1j9qF/nn94hfaaKwiZeir+bXdzk/7NK7aSF2PrY22Sb9tl7q+rI20qZ22S12PbX+af8xGbSlnQyBXXPUk68nXYcqJt216IcTsw7bQV2Jqm9pqPStfmF/roa+NnxVP+7JKHZ/mEtuwTftkHLFX3vjUX33D+NqeVYY57FjCPolj2/Lyi621D/2zxpVma+PZY40VtsXqaptXhr52TMra2thjsVU+Ybvmtf3aZsuYn7bF8ouv9ofHGlf6ec0XgUxxTTth9kTHpqMXiL3I9Fjs9TgtvrWJxY/l15hqnxU75q9+RUrJZWPY4yL+YpM1vjIxwnlr7Fh70bhF7JqMr7HTGFXhXWRO1kbHIG1y3EbOtPy2Pe3YjjfNhvZ2CUTFNbyQ0i7yaYbadI55v9jyxqd8tJyGdRVfzatllRjT+IR5pc5rQEDF3vLIu56sLcftEIiKa5haT2aVExh+SCR2rC3MuSj1Wc1lVnnbOC/LPLe6+IWfRZjVRba+OKlPC2SlULFVGzmx4UttwosgtKtS19jWNzaGtP7QP8/XxtFjjVHX/HQMYdywrvmzSvVRG42t9axSfaWUV1jP8m2rT8ek+crMT33KlBJfeZTxa8q26fk2Ne6uxZ34JwftidMLKtYmoLTdXuzqo/22buGqr20Lj9XX2mqbxlcf2x72ST3stzbSpzlidmIbe4lPzF5jWZ/QLrSx/WHcvLrNY481h8S2x2KjdbUvmt/6qU/YZuux+Hn5Y/2xOJonNj+1TyvVV/t1LlLP6lN7LdU2y19sbb/U1U+O5aX9tj2tzdoMvEf+WqecPYEJcZ39kBhBHgH5cOkHL8+W/vIE4FueGR6TBCbENfZXcdKNFghAYB4J8Ed3fs7KhLjOz9AYCQQgAIHFJVDphtbiTpeRQwACEGiHAOLaDmeyQAACHSOAuHbshDNdCECgHQKIazucyQIBCHSMAOLasRPOdCEAgXYIIK7tcCYLBCDQMQKIa8dOONOFAATaIYC4tsOZLBCAQMcITPyrWGfPnu0YAqYLAQhAoH4CE+IqKU6cOFF/JiJCAAIQ6BABfv7aoZPNVCEAgfYIsOfaHmsyQQACHSKAuHboZDNVCECgPQKIa3usyQQBCHSIAOLaoZPNVCEAgfYIIK7tsSYTBCDQIQKIa4dONlOFAATaI4C4tseaTBCAQIcITPyIgF9odejsM1UIQKAxAhPiKpn4hVZjvAkMAQh0hAC/0OrIiWaaEIBAuwTYc22XN9kgAIGOEEBcO3KimSYEINAuAcS1Xd5kgwAEOkIAce3IiWaaEIBAuwQQ13Z5kw0CEOgIAcS1IyeaaUIAAu0SQFzb5U02CECgIwQQ146caKYJAQi0SwBxbZc32SAAgY4QmPj56+OPP96RqTNNCEAAAs0RmBBXSXXfffc1l5HIEIAABDpAgG2BDpxkpggBCLRPAHFtnzkZIQCBDhBAXDtwkpkiBCDQPgHEtX3mZIQABDpAoLC4rqysjOGQetg2ZrBAFZ3LssxngdAzVAgsLYHC4trr9cYghPWxzgWqiKDKXPSNwC7QyWOoEJhjAoXFdY7nwNAgAAEIzB2B6HOudpR2JRdbrWb12z6JKf7aFh4XyZnnq/2ay8ZMO47NKc2WdghAAAJFCeSKq4qPFS4bXPulTWy0nnYs/dKX1m/bw5gxXx1Llp/a5JVhjDx7+iEAAQikEcgV1zTHadtVhKvESfMVcaz6QlirksMPAhCIEWhMXHWVKUnTxDA2oGnaquZBWKehji8EIBAj0NgNLRWsqoIXG2yZNruKlWNbt3F0nLaNYwhAAALTEshduVpR0mMrmNomA7HtUo/1aZuU1l7r0qY2YUxt19L6Z/lJnKyXxlMbG1fbKCEAAQiUIZArrllCk9Ung7D9ImBSt2060LAtrKfZabuWWX6hgOb5aD8lBCAAgSoEcsW1SlDxEaGzgpYmfFXjF/XTMcwqf9FxYgcBCCwXgcbEVTDNg6DNwxiW65JhNhCAQBECjd3QKpIcGwhAAALLSgBxXdYzy7wgAIGZEkBcZ4qf5BCAwLISqLznOu2NIvUXsOyLLuvlxbwg0F0ClVeu0wiiCKv469sKbXdPBTOHAASWiUBlcZ0GwjTCPE1efCEAAQi0RaDQtoBdWYbCmNWXNwn1DWPm+dEPAQhAYN4J5IqrCKAVv7Ce1Zc3efUNY+b50Q8BCEBg3gnkiqsVwHmfDOODAAQgMC8ECu256spShXZeBs84IAABCMwrgVxxVWEtOwHxk3fsldYes6UNAhCAwCISKLQtEIqh1HUVa/u0LQ+E2FXxy4tLPwQgAIF5IZArrjLQNNFMa1cfK6DhhLN8Q1vqEIAABBaNQCFxLTspFVUEtCw57CEAgWUh0Ii4IqrLcnkwDwhAoCqB3BtaVQPjBwEIQKDLBBDXLp995g4BCDRGAHFtDC2BIQCBLhMoLK56k0phST1s075FLZdtPot6Hhg3BJaBQGFxDW9ShfVFh4GwLvoZZPwQmC8ChcV1voZd72hEWJftj0W9hIgGAQiUJZD7KJZd0cUEKKvf9snAxF/bwmM7cLVRH+3T9jRf7Q/91D9Wik9sXjFb2iAAAQgUJZArrio8VrhscO2XNitUaccqjGn9tj2MGfPVsWT5qQ0lBCAAgbYI5IprUwOxolw2R5qvCGyZVyjIZXyxhQAEIJBFoDFx1VWmJE8Tw6yBVekrm8eOsUo+fCAAAQikEWhMXGe9KrT5dUUbE1/bpnZpsGiHAAQgUJRArrhawdHjNEGy7TIAtZdj7dM2KbVNbaUub7WxfmpjS+uf5Sc+eS/NGY4rz49+CEAAAjECueJqBSwMkNUntrZfRcu2abywLayn2Wm7lll+Kp5qG5ZpvqEddQhAAAJFCOSKa5EgMRsRKytosxIvHcOs8sfY0AYBCCw/gcbEVdDNg6DNwxiW/zJihhCAQEiAX2iFRKhDAAIQqIEA4loDREJAAAIQCAkgriER6hCAAARqIFBZXOVGkd4sqjqOaf2r5sUPAhCAQNMEKovrtPGuIscAAAWdSURBVDeKENamTy3xIQCBWRKoLK7TDnpacZ42P/4QgAAEmiRQ6FGscJVphdH22fYmB01sCEAAAvNOIFdcRTytaFoxlcmFfbY+75NnfBCAAASaIlB6WwDxbOpUEBcCEFgmAqXFdZkmz1wgAAEINEWgtLiG2wJpAxO7orZpMWiHAAQgsKgEcvdcZRvAimS4LZDVlwVF/aQMY2b50QcBCEBgEQjkiqtMIk380trVRwU0BiLLN2ZPGwQgAIFFIlBIXMtOSEUVAS1LDnsIQGBZCDQirojqslwezAMCEKhKoPQNraqJ8IMABCDQJQKIa5fONnOFAARaI4C4toaaRBCAQJcIVN5znfamlfoL7DJ7tG37deliYK4QgEB9BCqLqwiiFboyQxI/K6hhPS1WaBfW6/ZLi0c7BCAAgTwCC7UtYAU5b2L0QwACEJglgUIrV1kh2pcVOdtn2619eFzULvTTuuYsGqeoncanhAAEIDAtgVxxDb96q7BpYitcoa3aZJVVfDRnFd8qPlnjpw8CEIBAjEDpbQEVtliwsm1tC13b+crywB4CEFgeAqXFta6pty10beerixNxIACBxSRQWlxFpIq8xC7NNkvo8vzScuf51bniThsD7RCAAASUQO6eq4iSFclQpLL6NEmstH7SH8aN+eSNJeajbVXyqS8lBCAAgbIEcsVVAqYJX1q7+oSCpoOr6qdxNY4tQ+EN+2ydYwhAAAJNEygkrmUHoaKaJaKxmG37xcZAGwQgAIE6CDQirmVFVSfStp/mpYQABCBQN4HSN7TqHgDxIAABCCwjAcR1Gc8qc4IABGZOAHGd+SlgABCAwDISKLXnKjecdF+06s0nhaj+UteY2pdVVvXLikkfBCAAgboJFBZXK2oyCBHEsK3o4MTPCmpYT4sT2oX1ND/aIQABCLRNoNC2QN0iZoW17QmTDwIQgEAbBHJXrnnCKv36Kiua6lvUr6idjocSAhCAwKwI5Ipr3sCs4OUJcRhLfcv6SZwqPmF+6hCAAASaIpC5LTCvAjav42rqJBEXAhBYPAKZK1dZWYqQzdMLYZ2ns8FYIACBNAKZK1dxEoHVd1qQWLuIYJowp7VLnDw/3UqI5aQNAhCAwLwQyFy52kGqIEppBU7bxda2W9/wWOyq+Ekc6yf1ojnFlhcEIACBtggUFteYiMXadOChgGq7lmm+WX5pPhqTEgIQgMC8ECgsrmUGrKvLsmJY1a/M2LCFAAQg0AaBRsS1rKjqRKv6qT8lBCAAgXkhkHtDa14GyjggAAEILBIBxHWRzhZjhQAEFoYA4rowp4qBQgACi0SgsLjqzaZFmpwdq4xf37bdHpedo8Yr62dzcgwBCCwngcI3tBb5ZpOInx1/WJdTW1YgwxhhfTkvF2YFAQgUJVB45Vo04DzaWWGNjQ9hjFGhDQIQmIZA7srVruhiImX7ZSBio23hsR2o2qiP9ml7mq/2h37qn1Wqr52HtNl6lr/tq+Jj/TmGAASWm0CuuKqIqDBZHFaY7LH4SN22pR1LPNsX89Wc1i70U5us0s5Fj7Psi/aF4yrqhx0EILC8BHLFdZqpTyNgab4iZHW96hDFOmLUNR/iQAAC80NgKnEVAVSxSxPDuqdaZx47/irjRFirUMMHAt0gMNUNLRWXOgWvDHYVdvGRY1u3cdLaxUbGrm/rI8d5MWc173Cc1CEAgfkjkLtytcKkx1ZUtE2mpu3aJqW2Sb/WpU1trJ/a2NL6Z/mJT9qriJ+OR8eYFsu2q4+22bFqGyUEINBNArnimicYtl+FybYp1rAtrKfZabuWWX6h2KmPlGl+ahPrl7a0mDF7jUUJAQhAIFdcsxCF4jMrwVEBrDN/EzGzWNIHAQgsF4GpxFVQ1CloVdE2MYYmYladH34QgMDiEZjqhtbiTZcRQwACEGiHwP8D7V7+3hChyroAAAAASUVORK5CYII=" alt="" />
自己定义CustomFileOutputFormat(把默认文件名称前缀替换掉):
package fz.outputformat; import java.io.IOException; import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class CustomOutputFormat extends FileOutputFormat<LongWritable, Text> { private String prefix = "custom_";
@Override
public RecordWriter<LongWritable, Text> getRecordWriter(TaskAttemptContext job)
throws IOException, InterruptedException {
// 新建一个可写入的文件
Path outputDir = FileOutputFormat.getOutputPath(job);
// System.out.println("outputDir.getName():"+outputDir.getName()+",otuputDir.toString():"+outputDir.toString());
String subfix = job.getTaskAttemptID().getTaskID().toString();
Path path = new Path(outputDir.toString()+"/"+prefix+subfix.substring(subfix.length()-5, subfix.length()));
FSDataOutputStream fileOut = path.getFileSystem(job.getConfiguration()).create(path);
return new CustomRecordWriter(fileOut);
} }
自己定义CustomWriter(指定key,value分隔符):
package fz.outputformat; import java.io.IOException;
import java.io.PrintWriter; import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.RecordWriter;
import org.apache.hadoop.mapreduce.TaskAttemptContext; public class CustomRecordWriter extends RecordWriter<LongWritable, Text> { private PrintWriter out;
private String separator =",";
public CustomRecordWriter(FSDataOutputStream fileOut) {
out = new PrintWriter(fileOut);
} @Override
public void write(LongWritable key, Text value) throws IOException,
InterruptedException {
out.println(key.get()+separator+value.toString());
} @Override
public void close(TaskAttemptContext context) throws IOException,
InterruptedException {
out.close();
} }
调用主类:
package fz.outputformat; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class FileOutputFormatDriver extends Configured implements Tool{ /**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ToolRunner.run(new Configuration(), new FileOutputFormatDriver(),args);
} @Override
public int run(String[] arg0) throws Exception {
if(arg0.length!=3){
System.err.println("Usage:\nfz.outputformat.FileOutputFormatDriver <in> <out> <numReducer>");
return -1;
}
Configuration conf = getConf(); Path in = new Path(arg0[0]);
Path out= new Path(arg0[1]);
boolean delete=out.getFileSystem(conf).delete(out, true);
System.out.println("deleted "+out+"?"+delete);
Job job = Job.getInstance(conf,"fileouttputformat test job");
job.setJarByClass(getClass()); job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(CustomOutputFormat.class); job.setMapperClass(Mapper.class);
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setNumReduceTasks(Integer.parseInt(arg0[2]));
job.setReducerClass(Reducer.class);
FileInputFormat.setInputPaths(job, in);
FileOutputFormat.setOutputPath(job, out); return job.waitForCompletion(true)?0:-1;
} }
查看输出:
aaarticlea/png;base64,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XZa2DuVHH/v6kpu8Q1/yA5HL9JKfHQh9LVtuoXnFysUwi7VNeRIAAW6QQIIlCZAACZAACZAACSQE0pu0SYQESIAESIAESIAESGBCgBskrgQSIAESIAESIAEScAhwg+QAYZMESIAESIAESIAEuEHiGiABEiABEiABEiABhwA3SA4QNkmABEiABEiABEiAGySuARIgARIgARIgARJwCHCD5ABhkwRIgARIgARIgAS4QeIaIAESIAESIAESIAGHADdIDhA2SYAESIAESIAESIAbJK4BEiABEiABEiABEnAIcIPkAGGTBEiABEiABEiABLhB4hogARIgARIgARIgAYcAN0gOEDZJgARIgARIgARIgBskrgESIAESIAESIAEScAhwg+QAYZMESIAESIAESIAEuEHiGiABEiABEiABEiABhwA3SA4QNkmABEiABEiABEiAGySuARIgARIgARIgARJwCHCD5ABhkwRIgARIgARIgAS4QeIaIAESIAESIAESIAGHwGuk/dhjjzndbJIACZAACZAACZDAcAmMN0iS/gMPPDBcCsycBEiABEiABEiABBSBlZF9qTarJEACJEACJEACJDB4ArwHafBLgABIgARIgARIgARcAtwguUTYJgESIAESIAESGDwBbpAGvwQIgARIgARIgARIwCXADZJLhG0SIAESIAESIIHBE+AGafBLgABIgARIgARIgARcAtwguUTYJgESIAESIAESGDwBbpAGvwQIgARIgARIgARIwCXADZJLhG0SIAESIAESIIHBE0h/SXsIJK5/e2Suf3sImTLHRRA4ftSY40dXFuGaPkmABEiABGomMJhf0pbN0Sf/6y1z6LZbNSOkORKYELj100PmX7/rUGaTdHBwYJ5++mnT1g/Wi597773X3H777ZwWEiABEiCBOQgM5gySnDmSzdEnPnh8DlxUJYF8Ah///RvmL56/PbNB+vKXv2xOnz6dr9TAyBe/+EXz3ve+twHLNEkCJEACwyEwmA3ScKaUmXaJwG233dba2SPk/fLLL6PKkgRIgARIoCKBQW6QVlZWWv/Sqjg/VOsBgVdeecVgzbVV9gAbUyABEiCBhRLgU2wLxU/nfScgmyN5tV32nSvzIwESIIGmCWTOIMlft/rV1o2l2ifrJNA3AnLJS44tnElqo+wbQ+ZDAiRAAm0TSM8g4dS/bIoGszE62Dbr69vmoE3qbflsy09Vdiq+vQsr4w3Eyn3/yty/csHsiU0ZR73Ux4HZXk9szOgUjSWGo3yVBpMRaPvMEfxlgmCDBEiABEggmkC6QYrWzFFwz0LliHWi++DqZWPuP2VWW4ymdp85X+5z+8mxG40qx840vj1zdWPNbN20G/Mr/8FcHp01JyKd7F04bE7fvTve2O9ubpiTF8ZbrLGVorGJmz1z4fBpsxPpM0ZcNi3yR0db5WD+wImZBMqSAAmQQCSB8QYJZ4+0blc/ZCXWejZhB2ayP2p1e9SSz0XkpldPWV3Fd7Bvrpm7zbHK05BssB6cbKtOPLhl1jauTs5C2X/Hmy/vmJykWrdr6aS5trlp1spCrjgux9Ei3hXDpRoJkAAJkEBCIOoMEjYnKDVF3afrPpm8cS3bfH3f7Jv7zSn5YnbPcrjtvQuTS0Djzdm62c5ck7NnIJJN24q+vCM21i+YC+NLP8llI+sx49MdH/vFpSLHj3cMZz/sWZMVLa/8CEivLvoRm2777MqlKutjW7HAmZqx/VA7ElASn7GMxmdvJP4Vc+FPii6r5XF2Nlirx+x265rZlzlyN196TMI4dsbctBuY7QePSauRl2yOSs8c3bxkPvj615vXy/viJXPpA683F7+e6B1cMh/A2Os/YC4dlNvr6h83jQCmURIgARJoiEDwBkk2Ne5fwtKHF8akresYL9OHXFnps12m4x3fu2o27j4WcHnNfjGfvDa5BCRnA3bvNqfP4L4l2TScNGZ3cpbg5tY1c1Lf07SzYcwZGUsuG7k+M+OTTcndia2xn8PYdOSNnTBnb9ozJmbThmA3FzgLk/GTp+ulknTm2LUXouQ3D3fHZ0V2zebGSbOe3S06RnPsIL5Vu+FK4x+Zs2911NNmCedULq6yeuJEwPzH2XSlZb3KC/cGzZZfM59804fMXV++Zb73ve+ZG0e/bD5kr/yOxk+/fcNcvOtD5k1/+j1z65Yd/9M3mQ/dddF8o9De5Km5sVP+QwIkQAIkUJmAd4OEMzx6A1TZQ0cV965umM1Tk8sy5SHumP39ROrEWTOyl2bGe5GDq+byzqaBmdX1M2Zz57K5mp5hWjPHjk2tz/pU4+OzHVNb5sQpu+3RZ0Jyxqbm01rGT5HdVCO8srmLe4ROmAe31sxOCibcRia+ELVSziFGFiMjG6TCM0jf+O/m393/H83aWydyt9//IfNxG6rdVptXDr5lbtjW296S3MP0lrfZ1g3zrYPye5oWky29kgAJkEB/CHg3SPirF2V/0p1mcnVDbTim3Z6aPQsy2jX2GlB6mQ1XlibCk8tDk03lSWPPGamXvrdG7odxfapxu9HYWTtmjqXatr6WbMyKxlJ5VBw/UbqwEVauHrvbmGv7kU8BOvGFubJSRZyDjSxEUI6jvPcLz92Q3ZAaP2ruvM+GKTrPPW8u33enOZrqy9hl8/xz+fb6fMwuZPLolARIYLAExhsk+VDt89ki3+xubJ4yoeePjJU8iy+p3U2zcRKXvsSyXN7SX1jqUpd2LJeVinzaU01rO3JvDl62vpOcYSoagzhK10+MLmwElgf714wJukypDLrxqaHiag7nVXXPkRjQ9x0VjRU7q21Ujq2iM0i3H73L+tJnhJ4zz12ZbJheOXLE3HflOfOt9Cm4b9mx+8yRI1reb7+2BGiIBEiABAZKwHsGqcsscPlv3hgzl9fGX6Qb5mrydLg8gp4+9j2+AVnfAK08r54y969N9WZu9laispnI+FRj46oTg5GNBJ7uKhobKyeX4mx9xk+RrjOWyduxO27afzYu4v6rPfP46Z1JThF2ZuKD4aKykPMJc2rT3hv1+GTy9h63j+ynG9GisSKH9Y3hjM7svUfJL2y/+YT52JWHzfbXJ+2DLz5qPmHdj+9BOnSneaNt7T6b3MP07K5tvdHceajonibeg1Tf7NESCZDAkAmkv6TtnkXCBzvguOPS78qgD2ej9HioPvw1XdoTK+o1uZ/msL2MtmF717a27Hmh/cm43Ei8u29WDq+Y0+Me+c2e7eTs06q9SXl38hTbzNhEffLvwfjx/mMXdZ9bn9zQvG79rIyHtJ+CsfHm4bQ5fdhejtu9aY7ZG3yzfgp0bRZyH5E/b9n8wa69gTo53bZ59745nNycv7Z102yP+0Pt+OJzOfjaxZxPnLU3jNvH9Vdk8sZn9KbnBovGfJ7q7pN1j80Rjods+Rbz8J9/xjz8liPmDnG+sTFeg0ePit6bzW+Ox+4wR8aBvdt85s8/a94sZ5RsO2tntj1W4T8kQAIkQAKVCKzYD9nJYzaV1JdH6b/sjcyNGzfMJz54fHw5cSBp1zhB8iTZYbNvn8rDZqlG470w9fHfv2He+MY3mvednJ6Y/dznPmfe9a53jTcz8oeDrLvi8lnz2b//n83Rb3za3PcLIfKz9r70pS+Zhx56qBdMmQQJkAAJLIrA9JN8URHQ77AJyNmoxx+fMJCyC+0aZ0Q2REX3II1euGIevvNhc+WFRM5eRrtg/pE5cnuJXoFdbv5rnECaIgESGCwBbpAGO/UdSRwnMJPLdvYUyySwRbdrwiOblcL37e8yv/0pY/7lP32DecMb7Puf/y/zqa8/ZN5cplcyXlP4NEMCJEACgyUwyEtsg51tJt4oAd8lts985jPmne98Z8lltdnLZMWX4Yrl5RLbI4880miuNE4CJEACfSfAM0h9n2Hmt1ACL7744tg/btRuo3zppZcWmjOdkwAJkEAfCKRPsfUhmaIcjh815un/ccjIX/l8kUATBF548XazfufkGUTYf/vb326uXLliXv3qV6Or0fLll1829957b6M+aJwESIAEhkBgMJfYZDKvf3tk/uL5QTy0N4S127kc/7HdHB0/mt0gdS5IBkQCJEACJBBEYFAbpCAiFCIBEiABEiABEhg8Ad6DNPglQAAkQAIkQAIkQAIuAW6QXCJskwAJkAAJkAAJDJ4AN0iDXwIEQAIkQAIkQAIk4BLgBsklwjYJkAAJkAAJkMDgCXCDNPglQAAkQAIkQAIkQAIuAW6QXCJskwAJkAAJkAAJDJ4AN0iDXwIEQAIkQAIkQAIk4BLgBsklwjYJkAAJkAAJkMDgCYz/q5HHHnts8CAIgARIgARIgARIgARAIP2/2B544AH0sSQBEiABEiABEiCBQRPgfzUy6Oln8iRAAiRAAiRAAj4CvAfJR4V9JEACJEACJEACgybADdKgp5/JkwAJkAAJkAAJ+Ahwg+Sjwj4SIAESIAESIIFBE+AGadDTz+RJgARIgARIgAR8BLhB8lFhHwmQAAmQAAmQwKAJcIM06Oln8iRAAiRAAiRAAj4C3CD5qLCPBEiABEiABEhg0AS4QRr09DN5EiABEiABEiABHwFukHxU2EcCJEACJEACJDBoAtwgDXr6mTwJkAAJkAAJkICPADdIPirsIwESIAESIAESGDSB9D+rFQq/fuR3MzC+8J3fyrTZ6A4BzJWeI19fdyJmJCRAAiRAAiSwPATSM0jy5SpftngvTwrDjFRvjIZJgFmTAAmQAAmQQHME0g1Scy6ylnGWI9s7nFaT+Xdhc9tkfsNZJcyUBEiABEhg0QTGGyScPdLB8AyFpsE6CZAACZAACZDAkAhk7kEqS9w9OxCzidK6qLv66Ecc7jj63RJ6Iq/reXLoh33oSL+2gTbktZweQ3+orpaH7dASuq687kdekHHH3LZPTvpcO9IXogsZVx/9YkdeGNf90lfWFl1XRvr4IgESIAESIIHaCIzs69fu+B0pCl8+GV9foRE7mKfj6/f15dkXWS2v66Ljtn19RTbK9F1dn/28PukPebkxuG2x4euDbTdGLavrWh51KV0Zt+2TgX6IrMhoubx6kU2MsSQBEiABEiCBeQh4zyAt61/nOCMhu0eciUAfSp2bb5cJOdjQMjG6Wq+OuvjWsVW1qW3outgrys/n39WvGpPW0zbduo5B17U+6yRAAiRAAiRQBwHvBkm+mPr4BeTmJO2Yl/7CjtFbFtm+57cs88A4SYAESIAEFk9gfJM2NkSLD6e5CNzNUXOeaLlpApzLpgnTPgmQAAmQQOuP+beFvI0v0dgzUPPk7m5i2/Ctfbj+JRc9Pk9uobq+GEJ1KUcCJEACJEACMQRW5AYmKOgvPPkycl96XMZ8Mq6Orw07rj76oeOOo99Xhui6Mj476PP5dvUho/uL+mAb8pBFf0ipdX11bQP2Iecb032uHPTzZHzjIgs77jj6YQ/jbr+MYwyyKEU2bwwyLEmABEiABEhgXgKZDdK8xhapzy/ORdJvzzfnuT3W9EQCJEACQyYw3iD5/oIfMhTmvlwEeEZpueaL0ZIACZDAMhDozRmkZYDNGEmABEiABEiABJaDwPgx//Pnzy9HtIySBEiABEiABEiABFogkP4O0rlz51pwRxckQAIkQAIkQAIk0H0CvX3Mv/voGSEJkAAJkAAJkEBXCaRnkBDg8ePHUWW5xASuX78+jn5Z5nPZ4g1ZGn3MKSTvZZThXHVj1jgP3ZiHIUeh1+DMBknAbG1tDZnP0ud+6dKlTA5dn89lizcDN6fRx5xyUl36bs5VN6aQ89CNeRhyFO4a5CW2Ia8G5k4CJEACJEACJOAlwA2SFws7SYAESIAESIAEhkyAG6Qhzz5zJwESIAESIAES8BLgBsmLhZ0kQAIkQAIkQAJDJsAN0pBnn7mTAAmQAAmQAAl4CXifYoOkfkRcP/qGcSnRr/tY7yYBPZ++CLs6l3lx63i1jO735bnIPh2nG0cTcbv+8nxouTwZN94m212IR8egc3X5uHLuuNadp6791OFD29NxadtaRvdr+abrOoZ77rnHPPPMMxmX88SlbWs7ef0Zx0lDy2IctvQY+iCziLIr8eg4fBw0Ky2r+316dfcVnkHSwSBI3afrdQdGe80R0POm6815rG5ZrzuJtevxlmWq40c+6EOuZTZixuEjRoeyEwKYF2lpju486bEm2el45vWDHNOddokAAByESURBVBB7nbbnjc3VL4qtaMy142vPq+9y9PlgXz4BzV/X8zXaHSk8g9RuKPTWNIG8BZjX33Q8ddrvQw518oi11TY//cXii7XteHwxsG+4Vwiqrj9Xz203vaaW5bjK4+Lr9/U1zRH2ozZIAn+RwSJolsMmwDU47Pln9s0Q4HHVDFdaXV4CURukojSxc9UyOOB8Yz456fPJwo7WYb0ZAi5/Ye/2wfMdd9xhvvvd76Lp3Tz7dGPmE/7FTp6e68Mn58qkQduKlvfJ6XGtN2/d9eX6ccfFH2QwFjIHZXHCFuTgA21dlsm646Kr7bnjaBfJ6LGiWLQv2HX5aBltq6wOe1X1RU/bgD9fbq6cT8ZnL08OvnQpsuJH3nl6IXG4Mq4PtH1yeX6hU6UM9eOTgz93zBenK6PbkNd9Yhv98KPLMll33LXnjqOtfaIPfvUY+qR05aQPshir67gS20Uv+IMM4kDbHUc/Si3vk9Xj0NFl4T1IWhCGPvKRj+jucR2ORQZvGdD9UIIdaaMOOZSw4Y7DBsvmCIC5eEAdJfrQxuYIbcwfokNbxvGWMfRDrqzU9n262naILdgTWV2HbdjDGPrLbMeOw74bh7ThMy8W6JbNQUhM8FEm68ak49R12EOM0BMZjEldXm47r28srP6BTei7vtDWfNAHXWWutAo/IlhFHzqwkxeLKxfiDzZLk3AEdAzwq0Vi7LqysK3jhwzGfD61f7eOG7Sl9L1gr8yPK+fagr7br9uuDNpS4oU+tPNKXzzoEx3UYQ8+0C8yGJO6vNx2Xt9YWP0Dm9B3faFd13GlXHuriMM7aDsRj4z76sgHJexBFv159ms5gxTqLC8It78saFee7XoJyHzKHMgbdfGAeYY3+SviySefHDchBx3ISFnHfMK3jkv7KKtDX8ej+7R+HfFqe/PUy2IJnYN5YhBdxKGZ6brIoA1Z6Vv0S/OpIxbJUfKTN/Ktw67YADdtV9e1H5+sHg+tw37VnKAv/spiwnhobE3IIQYddxN+Qm364nFjQxuyobablKv7uGoyVm07lmEtGyQJAI7rmEzY0ImxvrwE6pxPsSVrTd5V7Lrr1Ee1il2fnZC+snzajCUk3jIZly/aZXocr0ag6nHgeitbh66828Y8F63XojHXHttZAi5ftLNSbJURiF2DwZfYxLEYf+KJJ2ZiwGTFOp8xxI7OEVj03Ip/xNA5OAwoQwDzxM+BDJZGGvMy5nHVyLQ0YpTHVSNYg4xGbZCCLNYsxAO5ZqCB5mI/gEMP4kXOpxtjSCwhMoFIc8XAGvHlCZbFAn3Yy7NTpR824UNslMVTxU/XdZA/eNQZL2zCh9guYuyTrzOeUFuIV8eDvjwbRXnl6dTRr2MUe2Vx1uGzyIYbD2JadFxFMfdlLGQNrozs6/z58+bcuXPjvEVpa2srrWsY7mSiLTKhE4ob7URH12HLZwdjosNXOYFLly555xOaLuM8vpDzjWMMNqWsKlcUr8+P62semRBbvrxEr+iVl5MbK2zrfl8ffGFM2lrHN54nI/1ldlwZacvL9ant+MbHSsk/RbJ6zPUBG1omzxdkXBvS7+sTO6FzFROHyCIW6Ln+fTLS58rBju7Xn52wDzm0i0ptS8tpG/PIiM0yW3pc5MvmATmjFB15aTu+mPX4RGPK+P3vf7/5/Oc/j+6xLZ+NED9VZODY9enG7I5Dz/UpbS2r7ej+UH3IwY5rQ/p9fdArK8t03XHY88Wj14Wu+2RdO2i7a7DwHiQYhjJKX7+vD/IxZV12YnwOTbYuxiE36s3rK0S/LhlZByG25lkvefZ9/b4+13fZHITYCJGB3zLZsnHYkTJPNq9f6xbp542F2oWfUPm25EL9IP6iMsRWXTJ581EUnx4LiQPyobJa7qMf/SjUx6UeywyoRl0yMFlmr2wcdqTMk83r17pF+nljoXZdP3n2tFyZ7bLxGFtaFvXOX2JDoCzbISA7drzFo28BYlcvj3qi3k509AIC4M45ABGWJEACJFAvgcIzSPW6orVlIODbELlxh8i4OmzXS4BzUC9PWiMBEiABlwDPILlE2CYBEiABEiABEhg8AW6QBr8ECIAESIAESIAESMAl4L3EJndy89UfAss2n8sWb8hK6WNOIXkvowznqhuzxnnoxjwMOYqZx/yHDIO5kwAJkAAJkAAJkIAQ4CU2rgMSIAESIAESIAEScAjMXGLD48OOHJtLRgBPOS3LfC5bvCHLoY85heS9jDKcq27MGuehG/Mw5Cj0GpzZIAmY83/01JD5LH3u17cfzeTQ9flctngzcHMafcwpJ9Wl7+ZcdWMKOQ/dmIchR+GuQV5iG/JqYO4kQAIkQAIkQAJeAtwgebGwkwRIgARIgARIYMgEuEEa8uwzdxIgARIgARIgAS8BbpC8WNhJAiRAAiRAAiQwZALcIA159pk7CZAACZAACZCAl4D3KTavZEnn9i//oVdi/en3GXcsr08MuLIwKjp4FcnkjYmutiHtPFktFyIjtpbx9Z5fvGMm7Et/+d1xnx5DnxbW49Lvk9Hy89a1v1hfWlfHEWtH69ZRR1yLjqOOXPpuo2yuMK45uPMaIqP13brW/6Vfudd87c+ezIiIPy2jB91Y9Niy1H25+fLScr5xyRcyeeOaSYys1kMd+tJ2/ekxyKN0ZdFfVGp7ZfqQLZPL81emj3GtX8VXrB3IV/GlY5V6LWeQsImQjQXe2pHecKCOUuRQL7MjsmUysAW70kYfdEPshMqI3DK+9CKqspBEp4peFVY6VtFHO9SWjlPHHWsn1F+ZnPhdlO+y2DieJRAyV5hLrC2sN/SLRdSLZLKeZ1uwOzsy/eLVMvAl8vDv012GPsSPnJAn+pED2kXjkIFOURkj67MD/bx4oIO8dBv10DLUl9iDbKhtLSe6ZfoYR15l+Wv7uh5rB/Laxjz1WjZI8wTQtK5siuStN0pN+1xG+1jIiB1tLGz0t11iwSMOlOhvO546/IFtHbZoo1kCnKtm+dZpHZ8J+IxAiX7xFTOfWq9KnNBHHCjRX8Vmng5swgdK9Gs9X58eL6uLbdgvk21zfN68fLHWdonNNY6zNm5/Xhtnd1w93Q6RybMf0q995cmHyOTpsp8ESIAESKD7BPBlKxsB1JuIWm804Ef31e1T+0C9bh9iz80Bvtx+kcWYT0/6Ql6wIfZRD9Erk6llgySbBn2mpsxpW+PYUPn8hcQcIuOz3eU+d/HoNhav7pNc0F8lL9fWvPaqxKB1dDzz5KVtsj5sAu46whrT/VKXfnmjLtS0TN0UEUfTfuqO22fP5YTc3H6fLvsWRwDzJBFUmStXB/bc/qYyrGWDJMHpzQTaTQUdahcx5cljHBspabuvEBlXp8ttLKyihebKVM3H50P65A0fVW1X1YPfRcdRNX7qLS8BWXtYd5IF1mJsRrhBG2WePuzDJ9p58uyfEBBe8iriBZmJxuy/Rbqz0tOzKD69unzBjs+HL6Y6+uBLfMsbbW3b16fHy+pN5lXbBkmSwAaji2eT8iCHxBwik2ef/dODv0ss5KAsOmi7FCtjWR4CRR/WeqzNtde3ta45LmplzPulHhN3m75i4oqRrWMNLmLeG7lJW28oYiA2ISuxIJ4i+5DB2SSfbIiMT2/ofXJwuO+hM2H+/SNQ9AHujuFLD/39o9FMRuAFfs14mVgVX/AnPbrepN+mbS9jXmBfNO9N5FXLBglnjOaZ2LzNh7YdIpMXg7YjMm7bpxci49NjHwmQwLAIhHyAD4tI/dm2xTjvj7miL+f6s63fYpt5uZuVebIpm/cm86plgzRP8kW6skGRFzZGPtkQGZ8e+xZDIPbAwYcSDhKU6K+aRV12qvqnXn8I+NaS9KF/0ZkijnmPmUXm4cvBZYz8IIsS/W3HD7+IAyX664wHNuEDJfrr9FXFVlE8Moa3a9unlyfr6tbRrvUeJGxWEJje2Ejdd0amTEaPi12fHS2jY9B16CI2lHXJwF7XSyw4xIm2PpDQN6+M2PQtZu0LPopK106svs5H12PtFMUYM6ZjED20FxVPTOxDk8XcIG+0fXOFMcjqUuRl3JXx2dF6uu7qumPwgX4tH+MH+l0sdU6++MAAcm7e6Icu2q6cjGNMy/rkMO4ry+Lx6VTtC/U1b14+fYlZs3Fjccdjc3R9+vRdGWnrmHw6ZX21bJD0BqXIYYjcvDIh+hJjiFyITFG+XRwLWTB1yUj+IbZCOM1jZx7dkNhiZboWT2z8Q5IPmasQGWEWKpfHN0Q/RCbPfpf7Y/Iqki0ac/OPkXV1dTvEToiMtplXD7ETIpNnX/pD9euQC7URE1dRbu5Y4QbJPbviKg+93ccN1NDnlPmTAAmQAAmQgBAo3CBxA8BFQgIkQAIkQAIkMEQCnb5Je4gTwpxJgARIgARIgAQWT4AbpMXPASMgARIgARIgARLoGAHvJbbr2492LEyGMw+BZZvPZYs3ZG76mFNI3ssow7nqxqxxHroxD0OOYmVkX+fPnzfnzp0bMgfmTgIkQAIkQAIkQAIpAV5iS1GwQgIkQAIkQAIkQAITAjOX2I4fP042PSBw/fr1cRbLMp/LFm/IEuljTiF5L6MM56obs8Z56MY8DDkKvQZnNkgCZmtra8h8lj73S5cuZXLo+nwuW7wZuDmNPuaUk+rSd3OuujGFnIduzMOQo3DXIC+xDXk1MHcSIAESIAESIAEvAW6QvFjYSQIkQAIkQAIkMGQC3CANefaZOwmQAAmQAAmQgJcAN0heLOwkARIgARIgARIYMgFukIY8+8ydBEiABEiABEjAS8D7FJtXcsCd//beJ9Lsf/vJd6R1XemajI4tr+77CQD9iCP00Ie2lK6uT0bLz1uHvyI/kBFfeXIhMnmxal0tk+dLy/jqsFdV32eTfc0QKJsrjGvv7ryGyGh9t67177nnHvPMM89kRMSfltGDbix6bFnqvtx8eWk537jkC5m8cc0kRlbroQ59abv+9BjkUbqy6C8qtb0yfciWyeX5K9PHuNav4ivWDuSr+NKxSp1nkFwiThsbH2yM0NZi6OuKjI4tr64XUZWFJDpV9PLiyeuXOBFrnoz0QwYxoa110Fcko+XdOvSkX+pow64rn9cW+VidPFvsb5ZAyFxhLrEmfOsiRKYsE9j1yWEMpchIHW349+kuQx/iR055eWk5yQtt5Chttw9jvjJGtkg/L17oIC/dRj20RKxlvsQeZENtaznRLdPHOPIKiUn7QD3WDuShP2/ZyQ2SbDiw6Zg3wXn0EQM2PijRL7ZRxxhK9LctUzVfLGToo42Fjf62S8RR5BcHBWJFiX7RRR1jKNFfZL/uMfEN/3Xbpr16CXCu6uXZpDUcyzi2UKJffMfMp9arEjf0EQdK9FexmacDm/CBEv1az9enx8vqYhv2y2TbHJ83L1+sndwg+QJlHwmQAAmQAAm0QQBftk1vBPRmow2fbfiQ+dF5SbvIr4zhLbJVXkX2q9iDTvA9SPqMiCj7zpQU9YmOa0P65OXTk37IY1z65IX+SWvyL2R8Yz453TekOhYSctZtfBjoPpFDP3RiStfWvPZifDcpq/Oah0+TMdJ2OwTc+cfa0P1Sl355oy7RaZm6o0UcTfupO26fPZcTcnP7fbrsWxwBzJNEUGWuXB3Yc/ubyjBog4RNh96ESJ+05Y1xBOnrgwxsiCz6tJ7u17KQgY4ekz55S5+8tYxbhxzsDa3EwipaaK5MVUY+H9Inb/ioanvReoi/L/ksmucQ/MuawXqRfLGGYnPHDdoo8/RhHz7RzpNn/4SA8JJXES/ITDRm/y3SnZUuP8Pi00FfqC/EHCoP+/OU8FW0BiFT1U+TeZVukPQGAwnozQn6qpR12animzrtEcACbs9je57k4C46+NuLhJ66QABr3fehr8faXDN9W6Oa46Lm3De/TcXSpq8mc5h3zS9i3ks3SHUBw5kdbLhgl5skkOhv2YcDvL+zw8zqIlD0Ae6O9W3TUhfDMjsuxzL5ecbhCzak3YfPsmXMCzEX8YdMnfPV2gZJgnY3Q7JZGvolL0wmSxIggeUlgA/nog/w5c2uG5G3xdidw7b8Nk25zbzqZFZmq8m8Sp9iw6ZGn/nBxiZvQrUsZMp0INel0s0deaFfYkUdYyjR37ZMl/j5YpHFjgXvG6/ShwMEdlGiX2yijjGU6K/iV3TqslPVP/UWT8C3BqQP/YuOEHHMu9YXmYcvB5cx8oMsSvS3HT/8Ig6U6K8zHtiED5Tor9NXFVtF8cgY3q5tn16erKtbR3tlZF/nz583586dG9sT51tbWzO28cWPAb0BkD49/g/vf53535d/DNHMjdNpZ1Jx7WBc23Nl9BjkIaPHfuHka80Luy+ORXQdstAtK7XNPN0uyVy6dCl3PrHg3Jz1gVSXjPjw2dK+RGbeeMWGvLQv18dEIkwGsm6p7esxn6+6ctJ+WG+GwLxzlbcuJFq9NnxyerwsO+jj5myU0BNbkEEfyhg/0Gm7rDIPEqObm2ZQNKbzc+VkTNuBrE8OY3mltpOnD5m88Tzbbj/sSH+eLS0D/TxZjOvSpy/jrg1Xzh2HTS3nyugxyKMMkXVloJtXumsw+BJb3sYAjmbGH8LIpJwZzw7PtIrkq47NOAnsKPIHE12TQVxuGbJg6pIR3yG23Bh1O0Y/RDZERvvX9Xl0m7CjbbLeDIGQOQ+RkehC5fIyCdEPkcmz3+X+mLyKZIvG3PxjZF1d3Q6xEyKjbebVQ+yEyOTZl/5Q/TrkQm3ExFWUmztWuEHSZ0VcRba7RyBkk9a9qBkRCZAACZAACXSPQOEGiV+43ZswRkQCJEACJEACJNA8gdKbtJsPgR5IgARIgARIgARIoFsEuEHq1nwwGhIgARIgARIggQ4Q8F5ikzu5+eoPgWWbz2WLN2Sl9DGnkLyXUYZz1Y1Z4zx0Yx6GHMXMY/5DhsHcSYAESIAESIAESEAI8BIb1wEJkAAJkAAJkAAJOARmLrEV/TCTo8tmhwng9yOWZT6XLd6Qqe9jTiF5L6MM56obs8Z56MY8DDkKvQZnNkgC5vwfPTVkPkuf+/XtRzM5dH0+ly3eDNycRh9zykl16bs5V92YQs5DN+ZhyFG4a5CX2Ia8Gpg7CZAACZAACZCAlwA3SF4s7CQBEiABEiABEhgyAW6Qhjz7zJ0ESIAESIAESMBLgBskLxZ2kgAJkAAJkAAJDJkAN0hDnn3mTgIkQAIkQAIk4CXgfYrNKzngzu1f/sM0+/Wn35fWdWURMnmx6LiK6u/5xTtmhi/95XfHfXoMfVpYj0u/T0bL11WHX58/jFWJR+vqWH1+9Pg8dfhs0sc88VF3SqBsrjA+1Zg9JkJktL5b1/q/9Cv3mq/92ZMZEVlHWkYP9mGN+XLz5aXlfOPCBTJ545pdjKzWQx360nb96THIo3Rl0V9Uantl+pAtk8vzV6aPca1fxVesHchX8aVjlTrPILlEnDY2PtiMoK3F0Ne0jPiBL+2/Sl0voioLSXSq6FWJFTqIGW1dYgwxoa1liurQExmdW6ydIh8YE5tN2IV9lvURCJkrzCXWDdYS+iUa1ItkyqKGXZ8cxlCKDHxJHf6lvowvxI+ckCf6kRPaReOQgU5RGSPrswP9vHigg7x0G/XQMtSX2INsqG0tJ7pl+hhHXmX5a/u6HmsH8trGPPVObpDq3AjMAwebEWx8UKJfbKOOMZTor1NGbMP+PHn5dLGQMYY2Fjb6F1UWLXyMIVaU6F9UzHl+wTZvnP3dIcC56s5clEWC4x3HP0r0i37MfGq9Mt++cegjDpTo9+lU7YNN+ECJfm3X16fHy+piG/bLZNscnzcvX6yd3CD5AmXfcAlg4XfxoBzurDBzEugvgbY+c/Rmow2fbfiQVaHzknaRXxnDW2SrvIrsV7EHneB7kPQZEVHGmQzdX9QnOlpW2nj59GQM8hiHPPrRlhIyvjGfnO4bUh0LCTnrNjYguk/k0A+dmNK1Na+9GN9VZXXM8+Re1T/1louAu0awfnS/1KVf3qhLllqm7qwRR9N+6o7bZ8/lhNzcfp8u+xZHAPMkEVSZK1cH9tz+pjIM2iBh06E3IdInbXljHEH6+iADGyKLPq2n+7UsZKCjx6RP3tInby3j1iEHe0MrsbCKFporU5WRz4f0yRs+ymz7bLg6YkvbhY4rF9pGbNpmqC7lSCCPgF6nIoN1lief148btFHmycE+13EeIX8/Pj/AzycFGd+Y9BXp+nRgz6eHMZ9ejC/Y8fnIsz1vP3yJb3mjre36+vR4Wb3JvEo3SHqDgUD15gR9Vcq67FTxTZ32CGABN+lRDjIchP/sNz5o/uQPfm9ud9rmvAfx3MHQwFIQwFr3rRc9hrXqk6s70b6tY82xblah9tqYN8TSpi/4rLusYw0uYt5LN0h1gcKZHWy4YJebJJDob1nHAY6DA5Sk7drV7To2SPDFkgRCCGCN6nUIPXdMZKTPt46hw3KWgMtxVqK+HviCxb7M1TLmhZh9x5aeH9SlrGO+WtsgScDuZkg2S0O/5CVc+Mon4B4QIQdKvjWOkEAzBLgum+GqrbbFuK+fOW3mVedcldlqMq/Sp9iwqdFnfrCx0YtX17Us+st0INel0s0deaFfYkUdYyjRX6dMl9hUjUUWOxZ8VRs+PW0X9t0Dx6dX1FeXnSIfHFt+Ar51otfjojP0xbfomGL9+3JwGeN4hyxK9Mf6nFcefhEHSvTPa1/rwyZ8oES/ll1EvSgeGcPbjc2nlyfr6tbRDjqDJF/27gbH3QDo8SPv+XnznUvfH8cn/VoWGwgEr8d0n7anZaSux7SO1LX9J/7NJQwbXU87AyquPx0L1NuS0bmJb7R9MSE2t8SCQz/a+kBC37wyYtO3mLUv+CgrfTH57EDON1bkA3oio+uxdop8YEzb1/6a8AWfLKsRiJkrV1Z7lLmVcVcmZs5dXW1fxuAD/Vo+xg/0u1jqnHzxgQHk3LzRD120XTkZx5iW9clh3FeWxePTqdoX6mvevHz6ErNm48bijsfm6Pr06bsy0tYx+XTK+oI2SGKk7Et4Zvw3s65nxrPDM60i+apjM04CO4r8wUQbMiE+EE9eGbJg6pKRGEJs5cWq+8vslI1rW776vPo+m3l9bfrKi4H9YQRC5ipERryFyuVFFqIfIpNnv8v9MXkVyRaNufnHyLq6uh1iJ0RG28yrh9gJkcmzL/2h+nXIhdqIiasoN3escIOEMxSuEtvdJFDHBqqbmTEqEiABEiABEmiXQOEGiV+47U4GvZEACZAACZAACXSDQOlN2t0Ik1GQAAmQAAmQAAmQQHsEuEFqjzU9kQAJkAAJkAAJLAkB7yW269uPLkn4DDOEwLLN57LF28c5CMmprzJ9XH/LOFech2WctX7FvDKyr/Pnz5tz5871KzNmQwIkQAIkQAIkQAIVCfASW0VwVCMBEiABEiABEugvgfQS2/Hjx/ubJTMjARIgARIgARIggQgC40tsEfIUJQESIAESIAESIIHeE+Altt5PMRMkARIgARIgARKIJcANUiwxypMACZAACZAACfSeADdIvZ9iJkgCJEACJEACJBBLgBukWGKUJwESIAESIAES6D0BbpB6P8VMkARIgARIgARIIJYAN0ixxChPAiRAAiRAAiTQewLcIPV+ipkgCZAACZAACZBALAFukGKJUZ4ESIAESIAESKD3BLhB6v0UM0ESIAESIAESIIFYAtwgxRKjPAmQAAmQAAmQQO8JcIPU+ylmgiRAAiRAAiRAArEEuEGKJUZ5EiABEiABEiCB3hP4/3CpmQiAQh6bAAAAAElFTkSuQmCC" alt="" />aaarticlea/png;base64,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" alt="" />
从输出结果能够看到输出格式以及文件名称确实依照预想输出了。
实例2(依据key和value值输出数据到不同文件夹):
自己定义主类(主类事实上就是改动了输出的方式而已):
package fz.multipleoutputformat; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner; public class FileOutputFormatDriver extends Configured implements Tool{ /**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ToolRunner.run(new Configuration(), new FileOutputFormatDriver(),args);
} @Override
public int run(String[] arg0) throws Exception {
if(arg0.length!=3){
System.err.println("Usage:\nfz.multipleoutputformat.FileOutputFormatDriver <in> <out> <numReducer>");
return -1;
}
Configuration conf = getConf(); Path in = new Path(arg0[0]);
Path out= new Path(arg0[1]);
boolean delete=out.getFileSystem(conf).delete(out, true);
System.out.println("deleted "+out+"?"+delete);
Job job = Job.getInstance(conf,"fileouttputformat test job");
job.setJarByClass(getClass()); job.setInputFormatClass(TextInputFormat.class);
// job.setOutputFormatClass(CustomOutputFormat.class);
MultipleOutputs.addNamedOutput(job, "ignore", TextOutputFormat.class,
LongWritable.class, Text.class);
MultipleOutputs.addNamedOutput(job, "other", TextOutputFormat.class,
LongWritable.class, Text.class); job.setMapperClass(Mapper.class);
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
job.setNumReduceTasks(Integer.parseInt(arg0[2]));
job.setReducerClass(MultipleReducer.class);
FileInputFormat.setInputPaths(job, in);
FileOutputFormat.setOutputPath(job, out); return job.waitForCompletion(true)?0:-1;
} }
自己定义reducer(由于要依据key和value的值输出数据到不同文件夹,所以须要自己定义逻辑)
package fz.multipleoutputformat; import java.io.IOException; import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs; public class MultipleReducer extends
Reducer<LongWritable, Text, LongWritable, Text> {
private MultipleOutputs<LongWritable,Text> out;
@Override
public void setup(Context cxt){
out = new MultipleOutputs<LongWritable,Text>(cxt);
}
@Override
public void reduce(LongWritable key ,Iterable<Text> value,Context cxt)throws IOException,InterruptedException{
for(Text v:value){
if(v.toString().startsWith("ignore")){
// System.out.println("ignore--------------------value:"+v);
out.write("ignore", key, v, "ign");
}else{
// System.out.println("other---------------------value:"+v);
out.write("other", key, v, "oth");
}
}
} @Override
public void cleanup(Context cxt)throws IOException,InterruptedException{
out.close();
}
}
查看输出:
aaarticlea/png;base64,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z5ZzkWMrHunfZ+op5fp7Nfx9tp1HwNZ+59XY+rsa62ya7YGUVR2E+CIDZGBPDMgvuftuP97yZniVtFyOuu97zh39xxtPUymL8XblkmV19s5tPEk63nI2Mh9jbfJ3kT70fzu38STcRlXdDsbIWbeMED2DAW58MsiiKRkoxYDch6b/g8Dq72zsdnm4Skz+GOFUX3JzdOpL/nDhmF7yeH3qa2y1pdaVa5fDWS427afPADc+059jVkgGyAAZIANkgAysGKhvbiYjZIAMkAEyQAbIABmYOgPc+Ex9hlkfGSADZIAMkAEyUDPAjU9NBTtkgAyQATJABsjA1BngxmfqM8z6yAAZIANkgAyQgZoBbnxqKtghA2SADJABMkAGps4ANz5Tn2HWRwbIABkgA2SADNQMcONTU8EOGSADZIAMkAEyMHUGuPGZ+gyzPjJABsgAGSADZKBmgBufmgp2yAAZIANkgAyQgakzwI3P1GeY9ZEBMkAGyAAZIAM1A9z41FSwQwbIABkgA2SADEydAW58pj7DrI8MkAEyQAbIABmoGeDGp6aCHTJABsgAGSADZGDqDHDjM/UZZn1kgAyQATJABshAzQA3PjUV7JABMkAGyAAZIANTZ4Abn6nPMOsjA2SADJABMkAGaga48ampYIcMkAEyQAbIABmYOgPc+Ex9hlkfGSADZIAMkAEyUDPAjU9NBTtkgAyQATJABsjA1BngxmfqM8z6yAAZIANkgAyQgZqBH5DeM888UwvYIQNkgAyQATJABsjAVBlYbHykuI9//ONTrZF1kQEyQAbIABkgA2RgwcDBSfUiF2SADJABMkAGyAAZmAMDvMdnDrPMGskAGSADZIAMkIEFA9z4cCGQATJABsgAGSADs2GAG5/ZTDULJQNkgAyQATJABrjx4RogA2SADJABMkAGZsMANz6zmWoWSgbIABkgA2SADHDjwzVABsgAGSADZIAMzIYBbnxmM9UslAyQATJABsgAGeDGh2uADJABMkAGyAAZmA0D9V9unkPFt7594m59ew6VssZ9MHDufufO3X+wj9CMSQbIABkgA4kMzOYvN8um59f/+Zvu3ne9mUgNzchAHgNv/vW97r//6L0bm5+7d++6r3zlK66vP5AucR555BF3zz335CVPazJABsjATBiYzRkfOdMjm55f+4VzM5laltk3A5/9p6+6f/WtezY2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" alt="" />
能够看到输出的数据确实依据value的不同值被写入了不同的文件文件夹中,可是这里相同能够看到有默认的文件生成,同一时候注意到这个文件的大小是0,这个临时还没解决。
总结:自己定义输出格式,能够定制一些特殊需求,只是一般使用Hadoop内置的输出格式就可以。这点来说其应用意义不是非常大。
只是使用Hadoop内置的MultipleOutputs能够依据数据的不同特性输出到不同的文件夹。还是非常有实际意义的。
分享。成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990