分别建立三个文件:

file1txt

file2.txt

file3.txt


文件内容分别是:

MapReduce is simple

MapReduce is powerful is simple

Hello MapReduce bye MapReduce


aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABJkAAAD2CAYAAAB1J1a3AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7snQe4FEXWhg8SDQQFIyqC6LKuGDHnuOaAOWfXnFf9zTmia06YE+acs4A5LyoqgqCgCKKA5DR/v8XW2NO3Z7rn3hmYO/Mdn5HbXdUV3uqurjp1TnWTTCAmEQEREAEREAEREAEREAEREAEREAEREAEREIEGEJinAdfqUhEQAREQAREQAREQAREQAREQAREQAREQARFwBKRk0o0gAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiLQYAJSMjUYoRIQAREQAREQAREQAREQAREQAREQAREQARGQkkn3gAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQIMJSMnUYIRKQAREQAREQAREQAREQAREQAREQAREQAREQEom3QMiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAINJiAlU4MRKgEREAEREAEREAEREAEREAEREAEREAEREAEpmXQPiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAINJiAlEwNRqgEREAEREAEREAEREAEREAEREAEREAEREAEmoFg2rRpNnz4cBs/frzNnDlTVERABERABERABERABERABERABERABERABETAmjZtaq1bt7aOHTtaq1atChJpMnXq1Mw333xjCy20kM0///zuYokIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEDpCWQyGfv+++9t9dVXL33iZUhx+vTpNmbMGBs1apR169bNWrRokTeXZlgwoWDi16xZM2vSpEneyAoQAREQAREQAREQAREQAREQAREQAREQARGoP4HG5kHWvHlzW2yxxVyF0SF16dIlb+WbjRs3zrp27eo0UVgxScmUl5UCREAEREAEREAEREAEREAEREAEREAERKAmCbRv395GjhxZsO7zzJo1y1q2bCkFU0FMChQBERABERABERABERABERABERABERCB2iWARVOSFZb7uhzWS7Jgqt0bRTUXAREQAREQAREQAREQAREQAREQAREQgYYScEomiQiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0hICUTA2hp2tFQAREQAREQAREQAREQAREQAREQAREQAQcASmZdCOIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0mICUTA1GqAREQAREQAREQAREQAREQAREQAREQAREQASkZNI9IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi0GACJVMyTZ061R566KEGF6ihCfhyZDIZ6927t3FcKvniiy/s7bffLlVyRacTZnzffffZ8OHDi06jvhfAUyICIiACIiACIiACIiACIiACIiACIjB3CYwdO9ZuvvlmO+644+y0006zl156qagC3X///XbrrbcWdU3ayCVTMr3yyivWtGnTtPmWLZ4vx6xZs+zVV1+1adOmlSyvH374wb788suSpVdsQmHG06dPN+o4J+Sqq66yN954Y05kpTxEQAREQAREQAREQAREQAREQAREQATyEBg5cqTtvffe9uuvv1rPnj1t1VVXtauvvtquu+66PFfUPf3RRx/ZO++8UzegBGdKomRC4fHaa6/ZNtts44o0ZswYC1u+TJo0yfiFBSBYBo0YMaJONaZMmWLffPONodSJWtD8/vvvLv7QoUPtl19+ybk2Wg4fOGrUKKccmjx5cp28OPftt9+68IkTJ9YJHzdunH311Vf2559/1gnjBNf7ssZFKBT+xx9/uPrBizziyufTjNaNm2mJJZZwwVyPjB492qUTtd5KyqdQe9E+48ePN9L46aef4qqocyIgAiIgAiIgAiIgAiIgAiIgAiIgAnOAwOWXX+4US+edd55tvPHGtueee9qNN95oWCehZ/GCDubzzz93+oqotG3b1tq1axc9XZLjZqVIBSuXNddc0+aff35DGXLkkUfaXXfd5Y6Rxx9/3P273377uX9vv/12GzBggP3tb3+z7777zpZcckk7+eSTrUmTJvbZZ5+58L///e9OsYPi58wzz7R5553XXXvsscfaAQccYI8++qjtsccetvjii7vzSLgcM2fOzJ4jzfnmm88GDx5sNIiHiWLsiSeesJVWWsmIf80119hJJ51kK6ywgrsW1zhcAAlHW9iqVStr06bN7MyC/3/yySd25513Wrdu3eznn3+2Fi1a2BlnnGEtW7Z0cZLCTz31VNthhx2sX79+7lqUZueee64tvfTS2Tz8H+G6ce7ss8+2o48+2pZddlnH+6CDDrIPPvjAMeTGuvjii23BBRd0lxfKJ6m9Hn74YVc3btAhQ4a4tCQiIAIiIAIiIAIiIAIiIAIiIAIiIAJzlgBGN/3793d6iLAst9xy9uCDD9rCCy/sTvft29euvPJKW2WVVWzYsGFOl4GlE/8iYb1GTkIlOGiwkgnlDP5/aNHSCBYxuH2hSKJiM2bMsLvvvttZ46CcQdFz+umnOyUTgkbuqaeesr322ssdY/kzcOBAu+mmm6x58+bZLPOVg0bwZUPxgknYtttu66779NNP7ZxzzrHFFlvMHeNeR11QMmHBhKLsoosuckowlDEokHxjoAC79tpr7f/+7/9cWSkX6VNWlF9J4b7gWAeh+EI5RH733HOPUyCFJV/dwnHC9YQhN9WOO+6YjZImn5xM/3eA0u2yyy6zNdZYwzbbbLO4KDonAiIgAiIgAiIgAiIgAiIgAiIgAiJQZgKDBg1yugcMXaLStWtXdwpdxllnneV0K6uttprbZgdjHfQNGKgg6DXQQZRDGuwuhzIDSx/MrdLIAgss4CycUDJhuoWl0qGHHmodOnRwlj8omnD3Iowf1jic9wKgLbbYIkfBRFi+cmA+5gULIVznvGCVA9j33nvPKZjYSBuXM+Trr7+29u3bOwUTgkILkzQv//3vf511lFeGkc5GG21k77//vouSFO7ToS6+cTfccEPnthfdRypf3bKFCf5Yf/31s4dYd3m3wmLyCaenv0VABERABERABERABERABERABERABCqHALqCeeaZx/0QXOF22WWX7O/11193Hk7oXVAwIcTF0Ca8zzJKpnK5yzVIyYQG7bnnnsuxmInDH95XCWUNlkWYad1xxx122GGHOXc49v3hh8KFfYX8j2vXXXfdnGQXWWSRnONC5UBR5IW8w5tl4wqG1RANwz5QCJZVCEqahRZaKHstf6BU8oJyLKpYoyHRGiJJ4T6dsDUWDU1dwnszFapbtjDBHyjpvHAT+XqkzSecVri9wuf1twiIgAiIgAiIgAiIgAiIgAiIgAiIwNwhsOiiizqdBtv5IJ07dzY+1MUPDyg8qtCrRHUZKJT8Xs5ch+4hqs8oVY0a5C737rvvun2VwhXgC3MoisJKDioTVoKwYfVRRx3l6kBYr1697Pnnn7dOnTq5L9Tts88+2fp5TV24wlGzrrhy+PjRuP78b7/95vZjuuGGG3L8FrFgQqhTuBE4x2cCvVAfXP/CQppeqZUU7q8LbzZO+iidwv6RheqWk3nCQb58UCgltVc+hglZKlgEREAEREAEREAEREAEREAEREAERKBEBHCJw+gGT6wDDzzQeYIts8wyTv/i9RVsB+Q9tHy2KKX8NkGcIx22BCqH1NuSCeXEM888YzvttFNOubCiwcWML8chbBbNHkpe2Hz7xBNPzCpoUOagVeO61Vdf3bnKseE2Qh69e/e2Pn36ZK+P/pGvHNF40WO/Mbg/jwXSiy++mI3GBlkokXB7Q1AgYXbmpXv37q58bNqNUG4a2u9blBTu04EhjUtaL7/8sq2zzjpZ97n61i1byNAf+fJJai+SwEIr7GYYl77OiYAIiIAIiIAIiIAIiIAIiIAIiIAIlI8A8/dDDjnE7WvNB84QLJvYs5qPdSF8lA1dgtdv4Cn12GOP5ehu0NOwv1M5pN6WTB9//LH7ClrUdY1C7rvvvm7nciyF2N18yy23zLqA8TU09iHia3JY/QACpRQ+gmjh2Cfp+uuvd9eijWO/p9133z1v3QuVI+9FQQBmZrvuuqvbZLxjx45OSbTddtu5r8khfM2Or7dRD6ySaKTNN988a5aGxRGbYhOOAmfChAm2cbD/0z//+U93fVK4L9vyyy9vp5xyiqsryjb+9lLfumUTCP1RKJ9C7UUSm2yyiducHLdClIrhvani8tI5ERABERABERABERABERABERABERCB0hNgDyb0KOhU2IYIoxWMVQ444ACXGV+uZ/7O5t/33Xefs3Diq/a77bZbtjB88IzzUaOhUpS2SaDIyKDICe8NlCZh9lHC5Q0FTZygNKHi+T6NhyURlcIPsFmzXF0XCh2siFD08CskSeUodC1hlBO/RRQ8cW5hNBjhbEAeF47W0NcDV7+oFAr3+1HBEO1ilFVD6+bLkpSP51CovSgfijQ4FXuvRJnoWAREQAREQAREQAREQAREQAREQARqlQB6Brym8Oaqr6BTweOqdevWbv9odBvoUvx8HV2E39InTldR33z5MFuhctfLkglXOKx78imYKCyKo6jSJFwJKhnelDschjInulFVHIA05Yi7LnyOcqJAyic0UKGyYK7WkHDyJY+o4qYUdYvWKS4fHyepvdIo/KL56VgEREAEREAEREAEREAEREAEREAERKD0BNCp4KHlJWq8g64izvOs9CXJTbFeezLh1oaL1dyWSilHfTkcccQReRu9lHUrlE99y67rREAEREAEREAEREAEREAEREAEREAERCBMoF6WTN26dasIipVSjvrCKGRiVsq6FcqnvmXXdSIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQJlAvSyYhFAEREAEREAEREAEREAEREAEREAEREAEREIEwASmZdD+IgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0mICUTA1GqAREQAREQAREQAREQAREQAREQAREQAREQASkZNI9IAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi0GACUjI1GKESEAEREAEREAEREAEREAEREAEREAEREAERmCcQmz59ukiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQCwBdEdNmzaNDfMn52nTpo2NHTvWMplMwYgKFAEREAEREAEREAEREAEREAEREAEREAERqE0CY8aMMXRIhWSejh072m+//WYjR460adOmFYqrMBEQAREQAREQAREQAREQAREQAREQAREQgRoigAUTOqNRo0YZOqRC0iSwYMqgXBo+fLiNHz/eZs6cWSi+wkRABERABERABERABERABERABERABERABGqEAC5yWDChYGrZsmXBWjslU8EYChQBERABERABERABERABERABERABERABERCBBAL6ulwCIAWLgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgkE5CSKZmRYoiACIiACIiACIiACIiACIiACIiACIiACCQQkJIpAZCCRUAEREAEREAEREAEREAEREAEREAEREAEkglIyZTMSDFEQAREQAREQAREQAREQAREQAREQAREQAQSCEjJlABIwSIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAskEpGRKZqQYIiACIiACIiACIiACIiACIiACIiACIiACCQSkZEoApGAREAEREAEREAEREAEREAEREAEREAEREIFkAlIyJTNSDBEQAREQAREQAREQAREQAREQAREQAREQgQQCUjIlAFKwCIiACIiACIiACIiACIiACIiACIiACIhAMgEpmZIZKYYIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEACASmZEgApWAREQAREQAREQAREQAREQAREQAREQAREIJmAlEzJjBRDBERABERABERABERABERABERABERABEQggYCUTAmAFCwCIiACIiACIiACIiACIiACIiACIiACIpBMQEqmZEaKIQIiIAIiIAIiIAIiIAIiIAIiIAIiIAIikEBASqYEQAoWAREQAREQAREQAREQAREQAREQAREQARFIJiAlUzIjxRABERABERABERABERABERABERABERABEUggICVTAiAFi4AIiIAIiIAIiIAIiIAIiIAIiIAIiIAIJBOQkimZkWKIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgkEJCSKQGQgkVABERABERABERABERABERABERABERABJIJSMmUzEgxREAEREAEREAEREAEREAEREAEREAEREAEEghIyZQASMEiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIALJBKRkSmakGCIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAgkEpGRKAKRgERABERABERABERABERABERABERABERCBZAJSMiUzUgwREAEREAEREAEREAEREAEREAEREAEREIEEAlIyJQBSsAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQDIBKZmSGSmGCIiACIiACIiACIiACIiACIiACIiACIhAAgEpmRIAKVgEREAEREAEREAEREAEREAEREAEREAERCCZgJRMyYwUQwREQAREQAREQAREQAREQAREQAREQAREIIGAlEwJgBQsAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQTEBKpmRGiiECIiACIiACIiACIiACIiACIiACIiACIpBAoFlCeIOCZ82aZT/++GM2jebNm9vCCy9sLVq0aFC6xV78008/WdOmTW2JJZYo9tLY+KVOLzYTnUwk8Mcff9h3331nrVq1shVWWMG4vySVR2DKlCn29ddf24wZM2y55ZazBRdcsPIKqRJVLIEffvjBfvnlF2vXrp1169bN5pnnr7UR9cWzm+3nn392z9fSSy89V9tx+PDhrhzt27e31q1b55Rl0qRJNmrUKNd+9S3n+PHj7ffff3fvcsYRce1PnC+++MLmn39+6969u40cObJB7/9onnMVsDIXgTlEYMSIETZ9+vRsbvPOO68tssgi1qRJk5KVgDzoDxZffHGXZtzzXLLM5kD6pSxrNaYVvacYuzMnZH7mJXpPNIQD80/y4L4tVjTuKJZY6eMzrpk2bZp17NgxZ37HeBDx/Ubpc1aKpSLQJBNIqRKLpjNmzBj75z//mXOaFwrnzjzzTPfwzwnZbLPN3ATl8ccfL0l2pU6vJIWqsURuu+02u+OOO2zmzJmu5gsttJCdd955tu6669YYicqu7tNPP21XXXWVMcFEmjVrZgcddJD961//quyCq3RznQAKidNOO80GDBiQLQvKicsvv9wpKxH1xbPR7L777k6B89Zbb5Wl3V555RX78ssv7aSTTiqY/vbbb+8Ugvx77rnn5sS98cYb7a677nLKoXfffbdgOvkC7777brvhhhvswQcftOWXX75O+6Pk2n///Q3FEPLMM8/Yfvvt16D3fzTPfGXTeRGoJgI77bST8TyFhXHWcccdZ9ttt11JqkoeKKPvu+8+l14p+/O4PquU6ZcEQI0lEndPtWnTxr1X/D0VvScagmiDDTaw1Vdf3a655prUyWjckRpV2SPusssuNmzYMDviiCPs0EMPzebHOx3FJO9mSWUTKKslk6/63/72N+vZs6dTCLzzzjv24osvGh3Lv//97zlCB6XWfPPNV7K8Sp1eyQpWIwmhLETJxCo1nc3YsWONCQz30wMPPGDLLLNMjZCo7Gq++eabduGFF7r2OPjgg11hmWT27t3bllpqKdtmm20quwIq3VwlcNlllzkFE4OLNddc0yk5brnlFjv++OPdggEr6+qL50wTvfDCC/bJJ58kKpkoDRalr732muuP/XuXtSze+2ErtFKUPNr+lBMF08UXX2ydO3e2Dh066B4pBWilUZMEeH6POeYYV3eeqyeffNLOP/9869q1q7MqLbVEn+eGpB/XZ5Uy/YaUrZavxcL0lFNOcQjGjRtn9957rxsn8o6vj8VRqVlq3FFqog1PD2XSDjvsUBH3R8NrU1spzBElE6ZuaCSR3Xbbza1WvPHGG24QikvdI4884o4nTJjgOhqsHJhAIP/3f/9n6623nr3//vvO5YYJKivZG220kX300Uf2zTff2DrrrGOHH3643XPPPdavXz83qT3xxBPdANML+XjBBI90vvrqK5cPabH6iZUFkhROnHB6/P3www8bk2rqsPbaa7s6tGzZ0rkOnHHGGa4OQ4YMsQ8++CBbvkUXXTRbJv2RjgDm20w0UVJef/31tsACC7gLaWtWQ+6//34766yz3EBoscUWy1rM9OrVy61801EhV155pXPZ4L5Map9i71Huw6irSLraVU8sJpW0DxNOLA9oC6RHjx5uxYpn3iuZos84/BiIJD1TpIUFB/L888/b22+/7dqee+Oiiy6yLl26uJXYzz77zJZcckk7+uijpYBsRLcY/T2DTlaxkNVWW824r/r37++sZWhfxPfFKKT8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n1Ll69fqk1atXlMxSqZabQDVWwREoPQE/ODWf9K+9DkoRREQAREQAREQgXwE9B7OR0bnRUAERKD6CUjJVP1trBqKQM0R4FP3uNfgGikRAREQAREQARGYswT0Hp6zvJWbCIiACFQSASmZKqk1VBYREAEREAEREAEREAEREAEREAEREAERaKQE5mmk5VaxRUAEREAEREAEREAEREAEREAEREAEREAEKoiAlEwV1BgqigiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0VgJSMjXWllO5RUAEREAEREAEREAEREAEREAEREAERKCCCEjJVEGNoaKIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQGMlICVTY205lVsEREAEREAEREAEREAEREAEREAEREAEKoiAlEwV1BgqigiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0VgJSMjXWllO5RUAEREAEREAEREAEREAEREAEREAERKCCCEjJVEGNoaKIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQGMlICVTY205lVsEREAEREAEREAEREAEREAEREAEREAEKoiAlEwV1BgqigiIgAiIgAiIgAiIgAiIgAiIgAiIgAg0VgLNGlLwIUOGNORyXSsCIiACIiACIiACIiACIiACIiACIiACIjCHCXTp0qUsOcqSqSxYlagIiIAIiIAIiIAIiIAIiIAIiIAIiIAI1BaBJplAaqvKqq0IiIAIiIAIiIAIiIAIiIAIiIAIiIAIiECpCciSqdRElZ4IiIAIiIAIiIAIiIAIiIAIiIAIiIAI1CABKZlqsNFVZREQAREQAREQAREQAREQAREQAREQAREoNQEpmUpNVOmJgAiIgAiIgAiIgAiIgAiIgAiIgAiIQA0SkJKpBhtdVRYBERABERABERABERABERABERABERCBUhOQkqnURJWeCIiACIiACIiACIiACIiACIiACIiACNQgASmZarDRVWUREAEREAEREAEREAEREAEREAEREAERKDUBKZlKTVTpiYAIiIAIiIAIiIAIiIAIiIAIiIAIiEANEpCSqQYbXVUWAREQAREQAREQAREQAREQAREQAREQgVITkJKp1ESVngiIgAiIgAiIgAiIgAiIgAiIgAiIgAjUIAEpmWqw0VVlERABERABERCB4gn8+OOPxV+kK0RABERABERABESghgg0q6G6qqoiIAIiIAIiIAI1SOCxxx6zUaNGWbNm6YY906ZNsw022MBWXnnlLK2vv/7aDjnkEHv++edtoYUWqkGKqrIIiIAIiIAIiIAIJBNIN9pKTkcxRGCOEJg1a5ZddtllduKJJ9q8885bkjzfe+89GzNmjG233XYlSU+JiIAIlIZA//797cUXX7RJkybZ8ssvb/vss4+1adMmm/gHH3xgTz31lE2dOtV69Ohhu+++e14lwi233GK///67u7ZJkybWunVrW3fddW211VYrTWHnciqlYDV+/Hi77bbb7Mgjj7T5558/W6Orr77apkyZUqeGW2yxha2xxhp1zk+ePNnuuusuO+qoo1xY37597Y033rCxY8da586dXTt26NChznWciF7LuXzleuGFF+zzzz+vk87JJ59sLVu2zDmPUoj3R9OmTbPnZ86caVdccYWddtppNs88uYbdhEXfMU8++aTtuOOORSmYiqk7BUsb/9tvv7XHH3/cvbdWWmmlOgz8iULPSLHtmjcTBVQtgXzPXtVWWBUrO4FC91Sh9xj998svv2z9+vWziRMnWqdOnWzPPfe0JZZYIrbMN910k/3555/G+yC6uMC4/80337Stt97aVl11Vav28UEsoAo/OWNmxnr3/ckGj55sm/29vQ0bM9m27t7BOrWf1+5+Z4Rt+Y8OtkS73Pd8oSr9OWWG3fvuz3bQ+h1tvhZ/jQPirslkGCfGheSeSxsvOaXqjCF3ueps16qtVSZ4op944gk3qSyVMFj/+OOPS5Wc0mkEBMaNG2dye6nshrrvvvvsggsucEqMvfbay4YPH2677bab/frrr67gKC3OP/9823TTTd35d999184444y8lXrppZeccql79+624oorOqXCCSec4Cb1jV1KwQorn2OOOcYeeuihHIUSfe7iiy9uyyyzTPa32GKLGTzbtm0biw7lhx/UM3jv1auXU+gdfPDBhoXQHnvsYaNHj068lgj5ykUYk43mzZtb165dc34tWrSokzb3CUrIXXbZJfvbaaedXLyePXvmnCcOcVFsehkxYoSzYOI+23vvvWN/1OvBBx/MXlNs3dPGnz59ul188cWu/sOGDatTV3+i0DNSn3bNm5ECqpJAoWevKiusSpWdQKF7Kuk9dtFFF1mfPn1s2223de8q+n3eKfnGcixQPffcc66fjMrtt9/u3mFDhgxxQdU8PojW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9m9o2fPlq/PFE0DBWEjJWHyK1XtFOVjh9oq1YiEFE0R5/qKS9troddHjuI8JROPkO8Y1vz5rbfRdWFumkbi6F7qu2PiF0iKsHO2elKfCRUAERKAcBNSflYNq404TNVCHQCFUKkmrrEobr1TlamzpyJKpsbWYylvxBPr16+fcNbCwkdSPQCkZYrXGJsNffhmYzAYWD7QLk0Msm8rxtbdSlr1+9HSVCMw5AnwSGmVv1FUuTQkacm2a9BVHBERABERABERABERgzhOQkmnOM1eOIiACIiACIiACIiACIiACIiACIiACIlB1BOb61+WqjqgqJAIiIAIiIAIiIAIiIAg4hmYAACAASURBVAIiIAIiIAIiIAI1SEBKphpsdFVZBERABERABERABERABERABERABERABEpNQEqmUhNVeiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJQgwSkZKrBRleVRUAEREAEREAEREAEREAEREAEREAERKDUBKRkKjVRpScCIiACIiACIiACIiACIiACIiACIiACNUhASqYabHRVWQREQAREQAREQAREQAREQAREQAREQARKTUBKplITVXoiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUIMEpGSqwUZXlUVABERABERABERABERABERABERABESg1ASkZCo1UaUnAiIgAiIgAiIgAiIgAiIgAiIgAiIgAjVIQEqmGmx0VVkEREAEREAEREAEREAEREAEREAEREAESk2gWUMSHDJkSEMu17UiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAJzmECXLl3KkmOTTCBlSVmJioAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI1AwBucvVTFOroiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJQPgJSMpWPrVIWAREQAREQAREQAREQAREQAREQAREQgZohICVTzTS1KioCIiACIiACIiACIiACIiACIiACIiAC5SMgJVP52CplERABERABERABERABERABERABERABEagZAlIy1UxTq6IiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUD4CUjKVj61SFgEREAEREAEREAEREAEREAEREAEREIGaISAlU800tSoqAiIgAiIgAiIgAiIgAiIgAiIgAiIgAuUjICVT+dgqZREQAREQAREQAREQAREQAREQAREQARGoGQJSMtVMU6uiIiACIiACIiACIiACIiACIiACIiACIlA+AlIylY+tUhYBERABERABEagiAj/++GMV1UZVEQEREAEREAEREIHSE2hW+iSVogiIgAiIgAiIgAhUDoHHHnvMRo0aZc2apRv2TJs2zTbYYANbeeWVs5X4+uuv7ZBDDrHnn3/eFlpoocqpnEoiAiIgAiIgAiIgAhVEIN1oq4IKrKLUNoFZs2bZZZddZieeeKLNO++8JYHx3nvv2ZgxY2y77bYrSXpKRAREoDQE+vbta2+88YaNHTvWOnfubPvss4916NAhm3j//v3txRdftEmTJtnyyy/vwtu0aROb+S233GK///67C2vSpIm1bt3a1l13XVtttdVi4ze2k0ksPvjgA3vqqads6tSp1qNHD9t9993rKFzGjx9vt912mx155JE2//zzZxFcffXVNmXKlDpItthiC1tjjTXqnJ88ebLddddddtRRR7mwpHYMJxC9lrB85XrhhRfs888/r5P/ySefbC1btsw5j1KI90fTpk2z52fOnGlXXHGFnXbaaTbPPLmG3YRF3zFPPvmk7bjjjkUpmIqpezGsvv32W3v88cfde2ullVaqw8CfKNTuxbZr3kwUULUE8j17VVthVazsBArdU4XeY/TfL7/8svXr188mTpxonTp1sj333NOWWGKJ2DLfdNNN9ueffxrvg+jiAuP+N99807beemtbddVVrdrHB7GAKvzkjJkZ6933Jxs8erJt9vf2NmzMZNu6ewfr1H5eu/udEbblPzrYEu1y3/P5qvT+kLH2+tdjbNL0WdZ14fls1x6LWutW+VUgmQzjxHyp/XU+bbzklKozhtzlqrNdq7ZWmeCJfuKJJ9xEqVTCYP3jjz8uVXJKpxEQGDdunMntpbIbikFfr169nCLo4IMPNixL9thjDxs9erQr+H333WcXXHCBU3LstddeNnz4cNttt93s119/ja3YSy+95JRL3bt3txVXXNEpFU444QSnAGnsksQCRd35559vm266qWP07rvv2hlnnJFTbax8jjnmGHvooYdyFEr0uYsvvrgts8wy2d9iiy1m8Gzbtm0sOpQfflCf1I7RBMLXEpavXIQx2WjevLl17do159eiRYtosq7uKNZ22WWX7G+nnXZy8Xr27JlznjjERXHpZcSIEc6CCXZ777137I/788EHH8xeU2zd08afPn26XXzx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SXMOaxoG//R5+SRfO6a5Nl+a/jx14plEgVaMwAPraT4eEN4DLk0aKNbuv//+Ol/Si7s2X93j4nKu2Pj50vHny9XuSfkqXAREQARKTYD+jIVLxufRvfJKnZfSaxwEUGTg0jZfi6bu11Bhg/DxwX5P7RdoYc2b5veLSxuvoeVprNfPdUumxgpO5a5sAig04r4e4UvNhCK6AXi4RkxmGxJOWuRR7MSlsqkWXzoGAKwexQltFKdgCsctxBDlYaE28umwcS8bwbPnG4MS9nrCxQYrynyS1P4NLXu+fHW+LgHaTVIaAihjCylk65MLbq9YKxZSMJFuXDumvTapXHEfE0i6xofjml+ftTb6Lqwt00hc3QtdV2z8QmkRVo52T8pT4SIgAiJQDgLqz8pBtXGniRqoQ6AQKpWkVValjVeqcjW2dGTJ1NhaTOWteAL9+vVz7hpY2EjqR6CUDLFaY7PoL7/80llx0C5MDrFsKsfX3kpZ9vrR01UiMOcI8ElolL1RV7k0JWjItWnSVxwREAEREAEREAEREIE5T0BKpjnPXDmKgAiIgAiIgAiIgAiIgAiIgAiIgAiIQNURmOtfl6s6oqqQCIiACIiACIiACIiACIiACIiACIiACNQgASmZarDRVWUREAEREAEREAEREAEREAEREAEREAERKDUBKZlKTVTpiYAIiIAIiIAIiIAIiIAIiIAIiIAIiEANEpCSqQYbXVUWAREQAREQAREQAREQAREQAREQAREQgVITkJKp1ESVngiIgAiIgAiIgAiIgAiIgAiIgAiIgAjUIAEpmWqw0VVlERABERABERABERABERABERABERABESg1ASmZSk1U6YmACIiACIiACIiACIiACIiACIiACIhADRKQkqkGG11VFgEREAEREAEREAEREAEREAEREAEREIFSE5CSqdRElZ4IiIAIiIAIiIAIiIAIiIAIiIAIiIAI1CABKZlqsNFVZREQAREQAREQAREQAREQAREQAREQAREoNYFmDUlwyJAhDblc14qACIiACIiACIiACIiACIiACIiACIiACMxhAl26dClLjk0ygZQlZSUqAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiJQMwTkLlczTa2KioAIiIAIiIAIiIAIiIAIiIAIiIAIiED5CEjJVD62SlkEREAEREAEREAEREAEREAEREAEREAEaoaAlEw109SqqAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiUj4CUTOVjq5RFQAREQAREQAREQAREQAREQAREQAREoGYISMlUM02tioqACIiACIiACIiACIiACIiACIiACIhA+QhIyVQ+tkpZBERABERABERABERABERABERABERABGqGgJRMNdPUqqgIiIAIiIAIiIAIiIAIiIAIiIAIiIAIlI+AlEzlY6uURUAEREAEREAEREAEREAEREAEREAERKBmCEjJVDNNrYqKgAiIgAiIgAiIgAiIgAiIgAiIgAiIQPkISMlUPrZKWQREQAREQAREoIoI/Pjjj1VUG1VFBERABERABERABEpPoFnpk1SKIiACIiACIiACIlA5BB577DEbNWqUNWuWbtgzbdo022CDDWzllVfOVuLrr7+2Qw45xJ5//nlbaKGFKqdyKokIiIAIiIAIiIAIVBCBdKOtCiqwilLbBGbNmmWXXXaZnXjiiTbvvPOWBMZ7771nY8aMse22264k6SkRERCB0hDo27evvfHGGzZ27Fjr3Lmz7bPPPtahQ4ds4h988IE99dRTNnXqVOvRo4ftvvvueZUIt9xyi/3+++/u2iZNmljr1q1t3XXXtdVWW600hZ3LqfTv399efPFFmzRpki2//PKOVZs2bYpiNX78eLvtttvsyCOPtPnnnz977dVXX21TpkypU8MtttjC1lhjjTrnJ0+ebHfddZcdddRRLiypHcMJRK8lLF+5XnjhBfv888/r5H/yySdby5Ytc86jFOL90bRp0+z5mTNn2hVXXGGnnXaazTNPrmE3YdF3zJNPPmk77rhjUQqmYupeDKtvv/3WHn/8cffeWmmlleow8CcKPSPFtmveTBRQtQTyPXtVW2FVrOwECt1Thd5j9N8vv/yy9evXzyZOnGidOnWyPffc05ZYYonYMt900032559/Gu+D6OIC4/4333zTtt56a1t11VWt2scHsYAq/OSMmRnr3fcnGzx6sm329/Y2bMxk27p7B+vUfl67+50RtuU/OtgS7XLf8/mq9O7gsdbvuz9s/OQZtnT7VrZrj8Ws/fzN80W3TIZxYt7gbEDaeMkpVWcMuctVZ7tWba0ywRP9xBNPuEllqYTB+scff1yq5JROIyAwbtw4k9tLZTcUg75evXo5RdDBBx9sWJbsscceNnr0aFdwlE/nn3++bbrpprbbbrvZu+++a2eccUbeSr300ktOudS9e3dbccUVnVLhhBNOcAqQxi733XefXXDBBU7hs9dee9nw4cMdk19//TU1K6x8jjnmGHvooYdyFEr0uYsvvrgts8wy2d9iiy1m8Gzbtm0sOpQfflCf1I7RBMLXEpavXIQx2WjevLl17do159eiRYtosu4+QQm5yy67ZH877bSTi9ezZ8+c88QhLso6LyNGjHAWTNxne++9d+yP+/PBBx/MXlNs3dPGnz59ul188cWu/sOGDatTV3+i0DNSn3bNm5ECqpJAoWevKiusSpWdQKF7Kuk9dtFFF1mfPn1s2223de8q+n3GBvnGciy6PPfcc66fjMrtt9/u3mFDhgxxQdU8PojWvbEcP//f0TZgxAQ7cpOlbI3ObWz6zFk2K1D+IK8PHGO/T5yeqioopG5840dbs3Nb23vtxYN0Mnbo3V/amAnx15/39Pf24pezx5mFMkgb9SDnWQAAF2JJREFUr1AaVR8WDDTmqASDXpdfMLHPfPLJJ5kZM2Zk8w+sSXLKwnGgua5TvnAawQCrTnj0RLHxo9fruHIIcL+svvrqmT/++CMTDPozH374YSZY0ahTwAkTJmS++OILFx4oFOqEc2999NFHLp1gxT1z7rnn5sQhzc8++ywzcODAOtdyolB4MAnOBKvgGe478qAstSo//fRTJlgxygQv8hwEsAk/28FqU4aflzQMw20Q7SfinvmhQ4dmglX9DH3GDjvskLn55ptddnFxC7VvKcpeq/dD2nrTnpdeemkmGDzmXBKsWmYeeeQR93ztvPPOmWDwmA0PLHgygWWNa+M4CSxQMsEqaE7Qtddemzn99NPjojeac9yrgSIu89VXX+WU+aCDDnL3eBpWzz77bGarrbbKvPbaa65//e233wrW/+yzz84EE4LYOMECgGsb+t2kdowmEL6WsKRyHX300XXqHU2z0DH5Ud+ff/65ULRMoODMwPPOO+/MBKvw7vf6669nDjvssOwx5wKLu+z7KE3dYRRMulzeaeL7Ql5//fWZe+65J7PvvvtmnnnmmWzZw+mlafdopQu1azSujqubQNKzV921V+3KQaDQPZX0HqN/XHPNNTOffvppTtGChabM/fffH1vcwMozc84552QCz4ec8GARJsNYgv4zcKN2YdU6PogF0whOjpkwLXPZC0MyN70xLDNq/NTMzKD9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gAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEBAyaQMECBAgQIAAAQIECBAgQIAAAQLFAkKmYkIVECBAgAABAgQIECBAgAABAgQICJm0AQIECBAgQIAAAQIECBAgQIAAgWIBIVMxoQoIECBAgAABAgQIECBAgAABAgSETNoAAQIECBAgQIAAAQIECBAgQIBAsYCQqZhQBQQIECBAgAABAgQIECBAgAABAkImbYAAAQIECBAgQIAAAQIECBAgQKBYQMhUTKgCAgQIECBAgAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEBAyaQMECBAgQIAAAQIECBAgQIAAAQLFAkKmYkIVECBAgAABAgQIECBAgAABAgQICJm0AQIECBAgQIAAAQIECBAgQIAAgWIBIVMxoQoIECBAgAABAgQIECBAgAABAgSETNoAAQIECBAgQIAAAQIECBAgQIBAsYCQqZhQBQQIECBAgAABAgQIECBAgAABAkImbYAAAQIECBAgQIAAAQIECBAgQKBYQMhUTKgCAgQIECBAgAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEPgXFfc72OtFFmMAAAAASUVORK5CYII=" alt="" />


 import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
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.FileSplit;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class InvertedIndex{
private static class Map extends Mapper<Object, Text, Text, Text>{
private Text keyInfo =new Text(); //存单词与uri
private Text valueInfo =new Text(); //存词频
private FileSplit split; //存储split对象
@Override
protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
// TODO Auto-generated method stub
split=(FileSplit) context.getInputSplit();
StringTokenizer itr=new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
int splitIndex=split.getPath().toString().indexOf("file");
keyInfo.set(itr.nextToken()+":"+split.getPath().toString().substring(splitIndex));
valueInfo.set("1");
context.write(keyInfo, valueInfo);
}
}
} public static class Combine extends Reducer<Text, Text, Text, Text>{ //相同的key,value累加
private Text info=new Text();
@Override
protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
// TODO Auto-generated method stub
int sum=0;
for(Text value:values){
sum+=Integer.parseInt(value.toString());
}
int splitIndex=key.toString().indexOf(":");
info.set(key.toString().substring(splitIndex+1)+":"+sum); //与下一行顺序不能调换
key.set(key.toString().substring(0, splitIndex));
context.write(key, info);
}
}
public static class Reduce extends Reducer<Text, Text, Text, Text>{
private Text result=new Text();
@Override
protected void reduce(Text key, Iterable<Text> values, Reducer<Text, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
// TODO Auto-generated method stub
String file=new String();
for(Text value:values){
file+=value.toString()+";";
}
result.set(file);
context.write(key, result);
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Configuration conf=new Configuration();
@SuppressWarnings("deprecation")
Job job=new Job(conf,"invertedIndex");
job.setJarByClass(InvertedIndex.class);
job.setMapperClass(Map.class);
job.setCombinerClass(Combine.class);
job.setReducerClass(Reduce.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true)?0:1);
}
}

 2017-03-15 22:16:27,071 WARN [org.apache.hadoop.util.NativeCodeLoader] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
2017-03-15 22:16:27,748 INFO [org.apache.hadoop.conf.Configuration.deprecation] - session.id is deprecated. Instead, use dfs.metrics.session-id
2017-03-15 22:16:27,749 INFO [org.apache.hadoop.metrics.jvm.JvmMetrics] - Initializing JVM Metrics with processName=JobTracker, sessionId=
2017-03-15 22:16:28,058 WARN [org.apache.hadoop.mapreduce.JobResourceUploader] - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
2017-03-15 22:16:28,061 WARN [org.apache.hadoop.mapreduce.JobResourceUploader] - No job jar file set. User classes may not be found. See Job or Job#setJar(String).
2017-03-15 22:16:28,124 INFO [org.apache.hadoop.mapreduce.lib.input.FileInputFormat] - Total input paths to process : 3
2017-03-15 22:16:28,171 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - number of splits:3
2017-03-15 22:16:28,289 INFO [org.apache.hadoop.mapreduce.JobSubmitter] - Submitting tokens for job: job_local1466554694_0001
2017-03-15 22:16:28,463 INFO [org.apache.hadoop.mapreduce.Job] - The url to track the job: http://localhost:8080/
2017-03-15 22:16:28,468 INFO [org.apache.hadoop.mapreduce.Job] - Running job: job_local1466554694_0001
2017-03-15 22:16:28,473 INFO [org.apache.hadoop.mapred.LocalJobRunner] - OutputCommitter set in config null
2017-03-15 22:16:28,479 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Output Committer Algorithm version is 1
2017-03-15 22:16:28,482 INFO [org.apache.hadoop.mapred.LocalJobRunner] - OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
2017-03-15 22:16:28,571 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Waiting for map tasks
2017-03-15 22:16:28,571 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Starting task: attempt_local1466554694_0001_m_000000_0
2017-03-15 22:16:28,609 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Output Committer Algorithm version is 1
2017-03-15 22:16:28,621 INFO [org.apache.hadoop.mapred.Task] - Using ResourceCalculatorProcessTree : [ ]
2017-03-15 22:16:28,624 INFO [org.apache.hadoop.mapred.MapTask] - Processing split: hdfs://localhost:9000/user/hadoop/input/file2.txt:0+32
2017-03-15 22:16:28,679 INFO [org.apache.hadoop.mapred.MapTask] - (EQUATOR) 0 kvi 26214396(104857584)
2017-03-15 22:16:28,679 INFO [org.apache.hadoop.mapred.MapTask] - mapreduce.task.io.sort.mb: 100
2017-03-15 22:16:28,679 INFO [org.apache.hadoop.mapred.MapTask] - soft limit at 83886080
2017-03-15 22:16:28,679 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufvoid = 104857600
2017-03-15 22:16:28,679 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396; length = 6553600
2017-03-15 22:16:28,683 INFO [org.apache.hadoop.mapred.MapTask] - Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
2017-03-15 22:16:28,754 INFO [org.apache.hadoop.mapred.LocalJobRunner] -
2017-03-15 22:16:28,756 INFO [org.apache.hadoop.mapred.MapTask] - Starting flush of map output
2017-03-15 22:16:28,757 INFO [org.apache.hadoop.mapred.MapTask] - Spilling map output
2017-03-15 22:16:28,757 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufend = 92; bufvoid = 104857600
2017-03-15 22:16:28,757 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396(104857584); kvend = 26214380(104857520); length = 17/6553600
2017-03-15 22:16:28,770 INFO [org.apache.hadoop.mapred.MapTask] - Finished spill 0
2017-03-15 22:16:28,774 INFO [org.apache.hadoop.mapred.Task] - Task:attempt_local1466554694_0001_m_000000_0 is done. And is in the process of committing
2017-03-15 22:16:28,785 INFO [org.apache.hadoop.mapred.LocalJobRunner] - map
2017-03-15 22:16:28,785 INFO [org.apache.hadoop.mapred.Task] - Task 'attempt_local1466554694_0001_m_000000_0' done.
2017-03-15 22:16:28,785 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Finishing task: attempt_local1466554694_0001_m_000000_0
2017-03-15 22:16:28,786 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Starting task: attempt_local1466554694_0001_m_000001_0
2017-03-15 22:16:28,791 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Output Committer Algorithm version is 1
2017-03-15 22:16:28,792 INFO [org.apache.hadoop.mapred.Task] - Using ResourceCalculatorProcessTree : [ ]
2017-03-15 22:16:28,793 INFO [org.apache.hadoop.mapred.MapTask] - Processing split: hdfs://localhost:9000/user/hadoop/input/file3.txt:0+30
2017-03-15 22:16:28,823 INFO [org.apache.hadoop.mapred.MapTask] - (EQUATOR) 0 kvi 26214396(104857584)
2017-03-15 22:16:28,823 INFO [org.apache.hadoop.mapred.MapTask] - mapreduce.task.io.sort.mb: 100
2017-03-15 22:16:28,823 INFO [org.apache.hadoop.mapred.MapTask] - soft limit at 83886080
2017-03-15 22:16:28,823 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufvoid = 104857600
2017-03-15 22:16:28,823 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396; length = 6553600
2017-03-15 22:16:28,824 INFO [org.apache.hadoop.mapred.MapTask] - Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
2017-03-15 22:16:28,831 INFO [org.apache.hadoop.mapred.LocalJobRunner] -
2017-03-15 22:16:28,832 INFO [org.apache.hadoop.mapred.MapTask] - Starting flush of map output
2017-03-15 22:16:28,832 INFO [org.apache.hadoop.mapred.MapTask] - Spilling map output
2017-03-15 22:16:28,832 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufend = 78; bufvoid = 104857600
2017-03-15 22:16:28,832 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396(104857584); kvend = 26214384(104857536); length = 13/6553600
2017-03-15 22:16:28,834 INFO [org.apache.hadoop.mapred.MapTask] - Finished spill 0
2017-03-15 22:16:28,835 INFO [org.apache.hadoop.mapred.Task] - Task:attempt_local1466554694_0001_m_000001_0 is done. And is in the process of committing
2017-03-15 22:16:28,839 INFO [org.apache.hadoop.mapred.LocalJobRunner] - map
2017-03-15 22:16:28,839 INFO [org.apache.hadoop.mapred.Task] - Task 'attempt_local1466554694_0001_m_000001_0' done.
2017-03-15 22:16:28,839 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Finishing task: attempt_local1466554694_0001_m_000001_0
2017-03-15 22:16:28,839 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Starting task: attempt_local1466554694_0001_m_000002_0
2017-03-15 22:16:28,842 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Output Committer Algorithm version is 1
2017-03-15 22:16:28,843 INFO [org.apache.hadoop.mapred.Task] - Using ResourceCalculatorProcessTree : [ ]
2017-03-15 22:16:28,844 INFO [org.apache.hadoop.mapred.MapTask] - Processing split: hdfs://localhost:9000/user/hadoop/input/file1.txt:0+20
2017-03-15 22:16:28,888 INFO [org.apache.hadoop.mapred.MapTask] - (EQUATOR) 0 kvi 26214396(104857584)
2017-03-15 22:16:28,888 INFO [org.apache.hadoop.mapred.MapTask] - mapreduce.task.io.sort.mb: 100
2017-03-15 22:16:28,888 INFO [org.apache.hadoop.mapred.MapTask] - soft limit at 83886080
2017-03-15 22:16:28,888 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufvoid = 104857600
2017-03-15 22:16:28,888 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396; length = 6553600
2017-03-15 22:16:28,889 INFO [org.apache.hadoop.mapred.MapTask] - Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
2017-03-15 22:16:28,893 INFO [org.apache.hadoop.mapred.LocalJobRunner] -
2017-03-15 22:16:28,894 INFO [org.apache.hadoop.mapred.MapTask] - Starting flush of map output
2017-03-15 22:16:28,894 INFO [org.apache.hadoop.mapred.MapTask] - Spilling map output
2017-03-15 22:16:28,894 INFO [org.apache.hadoop.mapred.MapTask] - bufstart = 0; bufend = 56; bufvoid = 104857600
2017-03-15 22:16:28,894 INFO [org.apache.hadoop.mapred.MapTask] - kvstart = 26214396(104857584); kvend = 26214388(104857552); length = 9/6553600
2017-03-15 22:16:28,895 INFO [org.apache.hadoop.mapred.MapTask] - Finished spill 0
2017-03-15 22:16:28,896 INFO [org.apache.hadoop.mapred.Task] - Task:attempt_local1466554694_0001_m_000002_0 is done. And is in the process of committing
2017-03-15 22:16:28,899 INFO [org.apache.hadoop.mapred.LocalJobRunner] - map
2017-03-15 22:16:28,899 INFO [org.apache.hadoop.mapred.Task] - Task 'attempt_local1466554694_0001_m_000002_0' done.
2017-03-15 22:16:28,899 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Finishing task: attempt_local1466554694_0001_m_000002_0
2017-03-15 22:16:28,899 INFO [org.apache.hadoop.mapred.LocalJobRunner] - map task executor complete.
2017-03-15 22:16:28,901 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Waiting for reduce tasks
2017-03-15 22:16:28,902 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Starting task: attempt_local1466554694_0001_r_000000_0
2017-03-15 22:16:28,914 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - File Output Committer Algorithm version is 1
2017-03-15 22:16:28,915 INFO [org.apache.hadoop.mapred.Task] - Using ResourceCalculatorProcessTree : [ ]
2017-03-15 22:16:28,919 INFO [org.apache.hadoop.mapred.ReduceTask] - Using ShuffleConsumerPlugin: org.apache.hadoop.mapreduce.task.reduce.Shuffle@4fb755c9
2017-03-15 22:16:28,932 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - MergerManager: memoryLimit=1945842432, maxSingleShuffleLimit=486460608, mergeThreshold=1284256000, ioSortFactor=10, memToMemMergeOutputsThreshold=10
2017-03-15 22:16:28,934 INFO [org.apache.hadoop.mapreduce.task.reduce.EventFetcher] - attempt_local1466554694_0001_r_000000_0 Thread started: EventFetcher for fetching Map Completion Events
2017-03-15 22:16:28,980 INFO [org.apache.hadoop.mapreduce.task.reduce.LocalFetcher] - localfetcher#1 about to shuffle output of map attempt_local1466554694_0001_m_000002_0 decomp: 64 len: 68 to MEMORY
2017-03-15 22:16:28,984 INFO [org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput] - Read 64 bytes from map-output for attempt_local1466554694_0001_m_000002_0
2017-03-15 22:16:28,986 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - closeInMemoryFile -> map-output of size: 64, inMemoryMapOutputs.size() -> 1, commitMemory -> 0, usedMemory ->64
2017-03-15 22:16:28,991 INFO [org.apache.hadoop.mapreduce.task.reduce.LocalFetcher] - localfetcher#1 about to shuffle output of map attempt_local1466554694_0001_m_000001_0 decomp: 64 len: 68 to MEMORY
2017-03-15 22:16:28,992 INFO [org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput] - Read 64 bytes from map-output for attempt_local1466554694_0001_m_000001_0
2017-03-15 22:16:28,992 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - closeInMemoryFile -> map-output of size: 64, inMemoryMapOutputs.size() -> 2, commitMemory -> 64, usedMemory ->128
2017-03-15 22:16:28,993 INFO [org.apache.hadoop.mapreduce.task.reduce.LocalFetcher] - localfetcher#1 about to shuffle output of map attempt_local1466554694_0001_m_000000_0 decomp: 87 len: 91 to MEMORY
2017-03-15 22:16:28,994 INFO [org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput] - Read 87 bytes from map-output for attempt_local1466554694_0001_m_000000_0
2017-03-15 22:16:28,994 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - closeInMemoryFile -> map-output of size: 87, inMemoryMapOutputs.size() -> 3, commitMemory -> 128, usedMemory ->215
2017-03-15 22:16:28,994 INFO [org.apache.hadoop.mapreduce.task.reduce.EventFetcher] - EventFetcher is interrupted.. Returning
2017-03-15 22:16:28,995 INFO [org.apache.hadoop.mapred.LocalJobRunner] - 3 / 3 copied.
2017-03-15 22:16:28,995 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - finalMerge called with 3 in-memory map-outputs and 0 on-disk map-outputs
2017-03-15 22:16:29,004 INFO [org.apache.hadoop.mapred.Merger] - Merging 3 sorted segments
2017-03-15 22:16:29,005 INFO [org.apache.hadoop.mapred.Merger] - Down to the last merge-pass, with 3 segments left of total size: 183 bytes
2017-03-15 22:16:29,006 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - Merged 3 segments, 215 bytes to disk to satisfy reduce memory limit
2017-03-15 22:16:29,006 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - Merging 1 files, 215 bytes from disk
2017-03-15 22:16:29,007 INFO [org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl] - Merging 0 segments, 0 bytes from memory into reduce
2017-03-15 22:16:29,007 INFO [org.apache.hadoop.mapred.Merger] - Merging 1 sorted segments
2017-03-15 22:16:29,008 INFO [org.apache.hadoop.mapred.Merger] - Down to the last merge-pass, with 1 segments left of total size: 203 bytes
2017-03-15 22:16:29,008 INFO [org.apache.hadoop.mapred.LocalJobRunner] - 3 / 3 copied.
2017-03-15 22:16:29,049 INFO [org.apache.hadoop.conf.Configuration.deprecation] - mapred.skip.on is deprecated. Instead, use mapreduce.job.skiprecords
2017-03-15 22:16:29,186 INFO [org.apache.hadoop.mapred.Task] - Task:attempt_local1466554694_0001_r_000000_0 is done. And is in the process of committing
2017-03-15 22:16:29,190 INFO [org.apache.hadoop.mapred.LocalJobRunner] - 3 / 3 copied.
2017-03-15 22:16:29,190 INFO [org.apache.hadoop.mapred.Task] - Task attempt_local1466554694_0001_r_000000_0 is allowed to commit now
2017-03-15 22:16:29,209 INFO [org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter] - Saved output of task 'attempt_local1466554694_0001_r_000000_0' to hdfs://localhost:9000/user/hadoop/output/_temporary/0/task_local1466554694_0001_r_000000
2017-03-15 22:16:29,210 INFO [org.apache.hadoop.mapred.LocalJobRunner] - reduce > reduce
2017-03-15 22:16:29,210 INFO [org.apache.hadoop.mapred.Task] - Task 'attempt_local1466554694_0001_r_000000_0' done.
2017-03-15 22:16:29,210 INFO [org.apache.hadoop.mapred.LocalJobRunner] - Finishing task: attempt_local1466554694_0001_r_000000_0
2017-03-15 22:16:29,210 INFO [org.apache.hadoop.mapred.LocalJobRunner] - reduce task executor complete.
2017-03-15 22:16:29,473 INFO [org.apache.hadoop.mapreduce.Job] - Job job_local1466554694_0001 running in uber mode : false
2017-03-15 22:16:29,474 INFO [org.apache.hadoop.mapreduce.Job] - map 100% reduce 100%
2017-03-15 22:16:29,475 INFO [org.apache.hadoop.mapreduce.Job] - Job job_local1466554694_0001 completed successfully
2017-03-15 22:16:29,487 INFO [org.apache.hadoop.mapreduce.Job] - Counters: 35
File System Counters
FILE: Number of bytes read=4131
FILE: Number of bytes written=1128147
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=258
HDFS: Number of bytes written=165
HDFS: Number of read operations=33
HDFS: Number of large read operations=0
HDFS: Number of write operations=6
Map-Reduce Framework
Map input records=3
Map output records=12
Map output bytes=226
Map output materialized bytes=227
Input split bytes=342
Combine input records=12
Combine output records=10
Reduce input groups=6
Reduce shuffle bytes=227
Reduce input records=10
Reduce output records=6
Spilled Records=20
Shuffled Maps =3
Failed Shuffles=0
Merged Map outputs=3
GC time elapsed (ms)=0
Total committed heap usage (bytes)=1592262656
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=82
File Output Format Counters
Bytes Written=165

结果:

 Hello    file3.txt:1;
MapReduce file3.txt:2;file1.txt:1;file2.txt:1;
bye file3.txt:1;
is file1.txt:1;file2.txt:2;
powerful file2.txt:1;
simple file2.txt:1;file1.txt:1;

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAswAAABwCAYAAAAKRiY9AAAABHNCSVQICAgIfAhkiAAAIABJREFUeF7tnXlwVXW271dmkpCEJBCSAIFAAJkMYRQFG0SZtNupUbzaMry+z3qv+nVZvq737Hr+0fXue5R9u8qh6+m9rVe9qNzrQGtbdqPggC1wm0EGlSEImUfIPJ2czG+tXzhhn32mvXP2OTkn+a6q1GHv/dvr9/t91g5Z57fXb62Ijo6OAbvdTjabjVpbW6mlpYVKS0vp2edeIAgIgAAIgAAIgAAIgAAIjHUCkWMdAOYPAiAAAiAAAiAAAiAAAt4IwGH2RgfXQAAEQAAEQAAEQAAExjyB6DFPYJQByE7vpLiYPqdZ1bWMo/bO0WHqhLhempxqp/JridTXHzHKrIfpgAAIgAAIgAAIhCIBn17Uy784Qf/1/61wGbun8y4N+YS01Yonfb7auNMdSucWTm+mh39URmnJXSSunKd56s8b4WN0nj9eWUnZ6TbVPJIHkc5j2fPZTDp+aaJRFSHZTnjeOr+O7r21gsaP66WnXy+gVltMSI4VgwIBEAABEAABEBhdBHw6zFZMV+sg6p1Dh34jbawYSyB1bL29nP7t0AwqrEyhgQHjPVk59z/snz3U8X3sXIoTf6Y4zfhgdC3NfDHy1om/erbfVURZaZ207/B02sH/hoAACIAACIAACIBAsAgExWEO1mRGuh9ZzS2sYGfZy0D0q8temvp1afGsJlqz4Br99v0F1N0T+qHqEkaSP7OZ6lvjqLhmvMvcj17IoCvVSZSW1OVyTX9ixdwGstmj6FzZBP0lHIMACIAACIAACICAaQKWOcyLcpvpnhVVvArI6en4VfmBU9l0+FyG6QEZuWH94lpae/NVmjC+m5rbY+nQt5Ppy28zjdwakDbaVfOXNOEnnlaO/XGajXDOTO2kx9cX0xufzaJrzeOGNWftnLT/1o790XUlFMGxEm9/mTvUx2N3lKjV9b2HBs8Z0SM3Jyf0qJXjE5fS3TrMl6uSDM9D9FTWJ8BhNkwMDUEABEAABEAABLwRsMRhnp/TQjvuLOJwhFw6X55CkyfYaeeGIqpviaOLvOJqpcjq4WpeOX3j4CyqbEigqRNtyjkUJ/2by+lWdmVYl8OJ9BZ2oG1jWLGuoVHOD64uVxvi5k1rUTaoaYw33aWROb379Qx66oGLtCSvkU5fSaOl/ClhE89/OG+oPyN6pLGMt7Etjtrt/scli56WDv/1mIaGG0AABEAABEAABEYlAUMOs6e4YweRzcur6OPjU+kUO00iZZzBYN+RHFpfUGu5w7wuv5be+3o6FdcOvraX1/dyfA9vdhsphzlYT4ZRzrKyf6G8i2ZPaaNf/fQCPfOvi6mzO8ryYfb2RdAr+/Pol/cVqi8sd7MNXvzTTSTnzYo4uc/syTd7m9v2VulxqxwnQQAEQAAEQAAExhwBQw6zuxACrROdM8lGr32a5wRPHNm/W1dqOdCMFDuVXnWOcS3hY1nVHu1ilPN3JakKxV+/m0y//U9naB6/AZAV4EBIc0eserPw5P2F9MKHN/HKbmwguoFOEAABEAABEAABEBgxAoYcZiOj273zrEszM5kiXG7GCbcEzHDuH4igts4YFR8cSJme0cGx5DGUw5+yMQ8CAiAAAiAAAiAAAqOJgCUOs4RgvPpJnnLOfElPbyTFRPVTT5/nzA3e2lzjIhwzJrc7hXrk8vHVYW5u8zXeYF/3NncznGXcUZEDlJLQTW1u8hWnJXWrWHDheeyi5xzN/RxbHMl65NOdiJO8al497X5nIcczF5JszquoS3Rp6ktPIudWls2cFbxZ74wfq+HRUQO0hUOErjaNC/vc0y4QcQIEQAAEQAAEQGBECHj2Wk0MZ//JKbRrYxE7sh0UG91P8XGSIqyJnuTYVr1I9oJb2MGKjPCcfM1bm684I8bW28uU0xwb00+5me20dU0ZZ8oYuSwZ+jn6c+xt7kY4b1pWrRxh2SD4M94MKVksCiuTXYaUOr6LpO3KufUu17QnJM1bAaeoc2cvSQW3kzNS7OXc07auaJWDWjZ76isNij5veuS6VPCT8eTnNnkdj6+L0yZ1KD1x/GxAQAAEQAAEQAAEQMAKApasMBdWJKtUYlIoQ17PR7AzLDHMB09nuYxRNuhtv6uYtq0t9VgNz1ubE1yxLjmxh36+qYgmJHZTE6eV++v3k+nkDyOTIcNlgm5O6DdNekrTJrd6m7sRzpIVY/XCOg7D6KYGdnZ//9Fc6rC7mrmzO5ousSMtJaa9yQdHp/EXknLateGKcr618eyPsA0lXrrEsQGTP7/n421ry1R1Qa140yPtuvnNg4ynpjHB23BIVuClnaeNhfJFSnSF8vPgdYK4CAIgAAIgAAIgEHIEIjo6OgbsdjvZbJw/ubWVWlpaqLS0lJ597oWQGywGBAK+CMibjt7eCHrzC2eH3dd9uA4CIAACIAACIAACngi4Lj16aonzIBAGBNo7o+lYoeeY7DCYAoYIAiAAAiAAAiAQYgTgMIeYQTAc/whISAsEBEAABEAABEAABKwkYMmmPysHBF0gAAIgAAIgAAIgAAIgEEoE4DCHkjUwFhAAARAAARAAARAAgZAjAIc55EyCAYEACIAACIAACIAACIQSAcQwh5I1MJaAE8hO73TJE13HxVtks2C4S3pyF02baKMOzol9hQvIeM50Hn4zlTzdk1PtKg1in4ciOuE3q8H846NtXngOw/FJxJhBAAR8EfDpJUjOYMmz+7t984d0/Y+tF1ThEG1OXl8dGbmuzU/c1ROl8ghLxoNDXKzEij+Sot/qMRuZF9oMElg4vZke/lEZpbFjJ3UD3dnCnY30eazd3WeU8Y9XVlJ2uk01j+RByB93yRl9nPN7h7P85JZKWl9QS9UN8ZSV1sn5sCfQawfy/JpSKNhLnpNb59fRvZzjfTxXg3z69QJqdVO50q+JjsDNgZhXKNgrEM/hCJjHpctA2MulE5wAARAIaQI+HWYZ/aQUO6UldVFjW5xyMCYm2wM2KYczJBUDxbF54LYK1ee7f0X2g4BBD5LirbeXq2qAhZUpqtCNUdE6yHrn2agOR7s/7J89dIsU2hEn40xxmlk1Q+3dOfjDUeavHuH5m7duVoV85kxtVVU23z/c45dzGQr22s6VJOULwL7D02kH/9tf8Zezo39/9Vg9LxlXKNjL6ufQX86hbC9/n2XcDwIgEFwChmKYzxSl0dLZjWpkS/Ma6awfDobR6Um1ttKr4+mNg7No+ZwGo7ehXQgTkC8+hRXenWV/Vo/NTH0xl/tewyXEX/lkNnX3GPo1MKPe8rZSbnzF3AaamdXuVvfHx6cqZ1mksm6wWmJyQo/btqJHvij4klCw19ELGfTsewupiCuHhpP4speZeYWTvcw8h6Fkz5GwVyjNH2MBARDwTcDQCvOpy2n04Opy+oxLXS9j5/WPR3JoNTsbWlmU20wbl1RTDpfGtnM4xTl+JbyP29k4nlJEVgre/HwmbV5eRanjB8s2f3oqm477KDLRzytnUmpb39c9K6p45YmrE/Lr2QOs5/C5DKc2t8yrp01Lq9XKeHNHLH1yMtvpuqeVC/35/JlNtHlZtVrtbrXF0n7W8x8XJpkej9MNY+xAmDrkJc2/Pa0c++M0y3Po69nITO2kx9cX0xufzaJrzeOGZQ3tnLT/1o790XUlqpz421/mDvXx2B0lanV976HBc0b0yM3i/MoK64lL6arsvDdJT+5Wl+W5dyeip7I+gc6VTXB3Wf2uOmSk7XWZY7GtECOcg2kvM/MKJ3tpbeXrOfRm19FsL2/zxjUQAIHQJWDIYb5cncx/sHtp0Yxm9Yfb3X/2d+TXkqwuFHO8cxyHU2xeXk2PrCul1z69EUe5iR3PNz+fRRX8x3oKO6DitLSxw3uhPMWFUExUP2VMsNP9HJLxzQ/pQ9fn57TQjjuL+NV+Lp3n+yZzm50biqi+JY4u8uqliIxTnPc97KBXNSSojVA/477MijhfW9eUKedGnJTU8T10Z0GNk8NsZDxm+x1t7R1OpP7LiHae2jbDnb9RW8iXP4mJnzetRT03NY3xprs0Mqd3v55BTz1wkZbwW5nTV/gtDX9KeMHzH84b6s+IHmks45WQqHZ7jM+xLuDVY4ll9rSRUfS0dHjWY2RMwbSXzwkbaGBkTiNlL1/DD1d7+XoOvc17NNvL27xxDQRAIHQJGHKYZUVM/uA/yqtjZ4tSqX9AtkA4y4t/umnoRA+HU3x8fArt3nHWqZFUYXO8WpWNhO9xXKKs3modZnGqRH/k9VXlYxcn0rua6m2yQi2O+Skej0gZ75qXlWzZ8ORwmDfwyrL0JX2ISJ9y/IufXHIaj6+Djdf1XLzu0Nc2RTmtFsr9Rsbjqx9ct4aAUVvI24gL5V00e0ob/eqnF+iZf11Mnd1R1gxCo6W3L4Je2Z9Hv+R4YnkTcjdvOJTfEzlvVsRpemZPvs/boiIH1NufL85memxrRI/Hmy28YNReFnbpVdVI2MvrgK5fDEd7GXkOjczdWxvYyxsdXAMBELCagOHgzW84LENWl09dubHa6xiMpHySldj//fi39OJ/+Ua90n3uP5+iuNg+p/E6HFjHyVJ2aGXFTSuysvCLl5bTL/9pudrlL7GmUzgVmENyJtmU064VWf2VdGEOyWadEv+slRLdsdNFDweyMn2l2vsrYSPj8aAepy0mYNQW35WkcuaVTPqXT/KoX1aa+a1FoETCIuRtyJP3F6rPFg9hElb1f9eSGvWF84guRMkq/VbqMWovK/v0pSvY9vI1nlC6bsZewXoOYa9QekIwFhAY3QQMrTALAnF2Ha/J9Ei231lMHfZoevnjOSoVXE9fpMp1+/wTp/RNXY4lxtOdyOqBxE6nju/imNRK+qe/zBlqtnun88q1XNBmXXC3Au6uD/05WRUZjvgaz3B04p7hETBjC3lO2jpj1BfBQMp0jutvbo9R8f2+voD5Mw4JYZK4/Zf/PEf9DoaDmLFXsOYTLHsFaz5W9mPEXsF+DmEvKy0MXSAAAp4IGHaYPSmQ8/Jq+3/t4dfaXTdea8/l1FZ6yc1sdwq/kFzONY3eN1199V0mbVxaQymJ3Wp1TkIwXuWVQXF0PInEpIpuR4iGtMvlY62Ig58U3+OkZ9qkDqc2Emudl91GsiLpSYyMx9O9OG+egIT7SHy7O4fQrC3kC1JKQreKo9dLWlK3Cm24xkVNJCzIk8gKdSTrkU93Ik7yKt6AuvudhRzPXKji/yvqEl2a+tKTyDmI1y+uVfH/Z66HI2mVyBfUJ7Zcps85FOOHqmQX/Y4T0VEDtIXDmq42jQtK7mkr7eVxUnwh3OzlbS7aa+FmL6PPIexl9AlAOxAAgVAhYMkylOy4lz/m8XF96qdgViP9dE25yxwfur1MpcWKjelnh7ZD5Q09eNo5e4X+JllpPlucOpRabv/JKbRrY5G6X3I1S3+SyULyzjrk4KkspVu14b6kT+lbK5cqk1XmD3HERY84xtu4qIZWJPuG3Cev7OUPgaycPLK21KmNkfE43YADvwjIsyYZUBwx7lplRmwhG0/FEZYNgrIRVN5wFPKzoBd5syFtV86t119yOq7nNyoFHDbkbjzyzOzkjBR7Ofe0ZIuRHNSyQVXO68WbHmkrYU8ynvzcJv2t6lgKwkibq03xtGx2g/qRZ1sv8qVQ9MTx70UwxF97GR1juNnL6LzCzV5Gn0PYy+gTgHYgAAKhQsCSFWbJlSwxzP/AMcyy+lfOeWCletp/f/Ci0zwPsCMrDsSE62nlDnKaOqlI5ksk9Zz8R/z5mSzO45uswi+k6IS8ipOUcxLDLLocIumykq6n4ZJcspKfdv+JKfQ4h444RDYBijP8zCPnlMMsY5bNg5LVwCEytqiI6XTfqkqVwk5Wtf/CerRiZDxON+DAhYA2hZRc1B7rw4DEbtvvKqZt/MVF1nS1143YQrJirF5Yx2EYg6kNf//RXBVOpJfO7miSL1VSitmbfHB0Gj/75bRrwxXlfGvHI1+u5O2EI3ZfMsh8z8fb1pap3w+teNMj7SQvuYynpnEwx7J+TJJLupadZamK5xBxwvUx0/LmRXSd1GSe0evydRxMeznGIivVMn9PGybDzV5G5xVu9jL6HMJevn7LcB0EQCDUCER0dHQM2O12stk4z3BrK7W0tFBpaSk9+9wLlo7VW0oxSzuCMhAAAY8E5O1Mb28EvfmFs8Pu8QZcGFECsNeI4jfdOexlGhluAIGwIeC6tBY2Q8dAQQAEzBKQ3MzHfBQLMqsT7QNHAPYKHNtAaIa9AkEVOkEgNAjAYQ4NO2AUIBAUAhLSAgkfArBX+NhKRgp7hZe9MFoQMEMg+tKlS9TV1UWdnZ3E4RnU3u6cTcKMMm9t9bGo3triGgiAAAiAAAiAAAiAAAiECgFLsmSEymQwDhAAARAAARAAARAAARCwmgAcZquJQh8IgAAIgAAIgAAIgMCoIhD9t+MnqKenh7o5LEOyZUhoxqKFC0bVJMfSZKREuD7Pbx0X35DNKKNBJNfw5FS7SvfW56FYyGiYJ+YAAiAAAiAAAiAQOgR8elFIB2fcWAunN6t80Wmc+1mfI9ihxR1PfV5bf+K9f7yykrLTbaq7SB6E5KGWnL/HL3muVmd8hiPXUnhKjuF7Of/2eK569/TrBdTqpkLfyI0QPYMACIAACIAACIxWAj4d5tE68UDMS6oLSjW3wsoUVVzFqGgdZL3zbFSHo90f9s8eukWKu4gTf6Y4zayaofbuHPzhKPNXz3YueJOV1kn7Dk+nHfxvCAiAAAiAAAiAAAgEiwAcZgtJy2puYQU7y150+rN67EWty6XFXK55DZeA/u37C0iqb4W6SBhJ/sxmkup0UrlRL0cvZNCV6iRKS+rSX3I5XjG3gWz2KJKKjxAQAAEQAAEQAAEQ8JeAIYd51bw62ry8mlKvl7SWEtd/uzhpqO9fP3yePvrbVLpQnjJ0blZWO/3duhL6h39bNHRuUW4z3bOiSpWZltfpB05l0+FzGf7OYcTv164Kv/SLE0Pj8bRy7I/TbIRhZmonPb6+mN74bBZdax43LD7aOWn/rR37o2xfKQf99pe5Q308dkeJWl3fe2jwnBE9cnPy9VLmJy6lu3WYL1clGZ6HrEBX1ifAYTZMDA1BAARAAARAAAS8ETDkMG9cWsNxsLOogp2QKRwfK85YW2cMnSsdXME7fG4SrV54zclhXpLXQKev3AgFmJ/TQjvuLOKQhVw6z4715Al22rmhiOpb4ugir8qGszicSG9hB9o2w52rUYYPri5XG+LmTWtRfGsa4013aWRO7349g5564CItyWtUtl7KnxI28fyH84b6M6JHGst4G9viqN0eY3qs+htET0uH/3r0enEMAiAAAiAAAiAwNgkYelcv1YuK+DW5vNovqR1P73Ec6cal1UPETv6QTnOmtFFKYo86Jxu0CvKa6NTlGw7z5uVV9PHxqXSKHSt7dxSVcZaDfUdyaH1B7dgkP4xZG2Uoq/b7T2bTBH4j8KufXqD42L5h9Ob7lt6+CHplfx7dwxsN87Lb6G7+fOWTPJLzZkWc3Gf25HOMco7ZW13ai56XPp7rch4nQAAEQAAEQAAEQGA4BCJXrVxBK5cvo2VLl1DB4ny6edFCFz3iJGullI+z0uxDp7p6opRzLFkMRGZmtakY0tqmGyubOZNsdLYo1UmPxKpKGjSIMQJGGX5XkkqHvs2kf2HntV9Wmnl1P1DS3BGr3ho8eX+h+mzhYwgIgAAIgAAIgAAIjCYChkIy3E1YnwXiyPkMemLLZfr0m+zrr+jTXW7bvfOsyzm9HpcGOOFEwAzD/oEIFToj8cGBlOkZHdTcHkM5/Ckb8yAgAAIgAAIgAAIgMJoIGHKYczPbneKTZ0xud4mLrahLYOcsWqUxk3CMF/90kxMnCcF4lVc8xYGDeCbQ0xtJMVH91NPnGi1jlmFU5AClJHRTm5t8xWlJ3bSas2hc46Imxy56ztEsK9SRrEc+3Yk4yavm1dPudxZyPHMhyea8irpEl6a+9CRybuX1i2tVnPwZTey7iyIfJ6KjBmgLh/9cbRoX9rmnfUwVl0EABEAABEAABIJEINJms6nqfvIjlf7kRy8P3V7GYRbtFBvTTzMmd5DkG5YMF3qR2Flpa7NHK4dFK/tPTqFdG4vU/bHR/RQfJ2nEmujJ+wr1asb0sWR3uIUd0MgI1+R0RhhuWlatHGHZIPgz3pwpWSwKK5NdmKaO7yJpu3Juvcs17QlJ81bAKercjUdSwe3kjBR7Ofe0rSta5aCWjZz6SoOiz5seuS4V/GQ8+blNXsfj6+K0SR1KTxw/qxAQAAEQAAEQAAEQsIJA9KxZucpJFse5vb2dWltbqa6uwUm3hFlIqi5HWrlP2Vk+X+aa2eKby+n0U87Q8Dc3K5aFFckq3ZgU05BX+BHsEEoM88HTWVbMI6R16IuReErTJpOQDZbb7yqmbWtLXaoFGmEoWTFWL6zjMIxuamBn9/cfzaUO/gKjl87uaLrEjrSUmPYmHxydRlvXlNOuDVeU861NK/cIj1HipR0x7sUc2/49H29bW6aqC2rFmx5p180r6zKemsYEb8MhWYGXdp42FsrbD9ElG1EhIAACIAACIAACIGAFgYiamqoBdw7zs8+9YFq/rEL+3x1nORxjHm/4G17+X9Od4gYQ0BCQtxi9vRH05hfODjsggQAIgAAIgAAIgMBwCbguPQ5Tk0S4ruFczJI1Ac7yMCHiNr8JtHMc/bFCzzHZfncABSAAAiAAAiAAAmOOgGUOs1S4k1y6srEPAgIjRUBCWiAgAAIgAAIgAAIgYCUByxxmf8o9Wzkh6AIBEAABEAABEAABEAABKwm45i6zUjt0gQAIgAAIgAAIgAAIgECYE4DDHOYGxPBBAARAAARAAARAAAQCSwAOc2D5jph2yWssBWekeMloktE4r/TkLlrMOclnT2lTqQRHi4zWeY0W+2AeIAACIAACxgmYimGW/MGIVfYMV6ocPvyjMkpjB0gcH3es3DHU52l2d5/nXp2vSL+3zq+jeznf9Xiunvf06wXU6qbSn1F9odIuEPMKBXv95JZKWl9QS9UN8ZSV1sl5rCfQawfCf+PsaJ1XqPw+YBwgAAIgAALBJWDKYQ7u0MKvN6mAKNXuCitTVJEWo6J1kPXOs1EdjnbbucCMOF77Dk9XxWb8FXcO/nB0+qvH6nnJHELBXvKc/Oatm6mpPZbmTG1VlS/fP9wz7C85/nJ22NZfPVbPazjPHO4BARAAARAAAasImHKY/Vn5tGrAoaxHXkEXVrCz7GWQgWZ49EIGXalOorSkLi+jCL1LUk47f2azKqEtFSD1YmZeK+Y2cHn2KDpXNkGvxuk4FOz18fGpQ2OqrBuscpicMHyH2euELbzoy15m5mXUXhYOH6pAAARAAARAwBQBQw6zdtXTncOXFN9Dd6+sogU5LVySuYf6+iNUueQvv810W0Lb1AjDoLGWj+SjdoinlWN3DI1Oc1FuM92zoopXkW1qFfIAlyk/fC5j6PbLVUlGVXltp52TJ/s/uq5Elct++8vcIV2P3VGiVtf3Hho8Z0SP3CzPjayIn7iU7tZhNjMv0VNZn+DRYQ4le2mNkJ7crQ6l+I9ZMcI5mPYyMy9f9jLLAu1BAARAAARAwGoChhxmh4On/aOsHcjfb75C35dOoN/tm0/t9mhKiOujvOw2urOgZkw4zFo+npxhXwyNGHY+fyHZcWcRh33k0vnyFJo8wU47NxRRfUscXeSVbSvFyJze/XoGPfXARVqS10inr6TRUv6UcJDnP5w3NBQjeqSxfMmSwjft9hi/pyF6Wjo86zEyppGw1wKOgZdYZqlWaFaMzGmk7OVrXr7sZZYF2oMACIAACICA1QTM/2V2M4KpE23071/NGIq7lD/4Z4tS1Q/EOgKbl1eRvOo+xc6pSNm1RNp3JEdtGrPaYTYy6t6+CHplfx79kuNuZbX77pWV9OKfbiI5b1bEaXpmT77Z29y2t0qPW+UmTpqxl2QzWb3gGn1xNtNED+aajoS9jMwrVOxljiZagwAIgAAIjCUClqSV+/xMJv364XNqtXHrmjJal19LMya3jyWOQZlrziSby5cQiffNTu8MSv/uOpHwAVnxfvL+QvXZMoxwAnd6R8M5M/a6a0kN9Q9E0BFNeE0gGATbXsGaVyBYQScIgAAIgAAIOAhYssK8/+QUOn5pIuVltdHElC66iXf737eqkr7mP/5/5BVQiHUEdu8866LMTEYOl5stODE9o4Oa22Mohz9lwyHkBgEj9srg0JpNS6vp5T/PoZ4+S77DejVBsOwV7Hl5nTQuggAIgAAIgIAfBCxxmKX/Bs5uID8OyUy109MPnYPDbNI4Pb2RFBPV79ZxkhCMVz/Jo7ZOz/G5RrtLS+pWIQDXWsbRsYsTPd7Wz7HFkRwuIJ/uRJzkVfPqafc7C/kNQyHJ5ryKukSXpr70JHLO6PWLa6mCN+uduR5y4qLEwInoqAHawqErV5vGqS9xgRZ/7SXZJp7Ycpk+51CMH6qSPQ433OxldF7BtpdHwLgAAiAAAiAAAl4IWLKc9asHL9At7DTJH3VxrlISe2jF3HqVqQBijoAwE5aREa7J6WQlf9fGIg536aDY6H6K582V+VwhTnL3mpXU8V20aVk1rWQ7eRNJ81Ywq8nteMQp2skZKfZy7mlbV7TKQS2bEOW8XrzpkbZSwU/Gk5/bpL/V1PG0SR1KT1xMv6n7htvYX3tJoRuZ+9WmeFo2u0H9pCQOZsvQjinc7GV0XsG213DtjPtAAARAAATGNgGfK8z6zBjuUox9dGwarb35Kj14WznFsqMiGQq+L0mlf94/Z2zTvT57IwwdoN77ejptv6uYtq0tdakWWFiRrFK23cdV/OS1egQ71RLDfPB0lgtnWfm8VJnscQNeZ3e0ul7Oq9be5IOj0zguvZx2bbiiUshps4A8wmP8ju0sKQRFivlT7L5tbRnt+Wymk1pveqRh9/WHGnTwAAARqUlEQVTx1jR6/5Lla14SOy+6Tv6Q7m1aXq8F017dPZFUy86yVGd0iHy50MeCh5u9jM7LCnt5NSYuggAIgAAIgIAFBCJqaqoG7HY72Ww2am9vp9bWVqqra6Bnn3vBAvVQAQLBJSAr8L29EfTmF84Oe3BHgd6MEoC9jJJCOxAAARAAgZEkEF1UVELd3d3U2dk55DTHxd2IRR7JwaFvEDBLQFIaHisMfOyy2XGhvXsCsJd7LjgLAiAAAiAQWgQi6urqBrq6upSz3NbWplaYa2pqsMIcWnbCaEAABEAABEAABEAABEaIgCWb/kZo7OgWBEAABEAABEAABEAABAJOAA5zwBGjAxAAARAAARAAARAAgXAmAIc5nK2HsYMACIAACIAACIAACAScABzmgCNGB6FGID25ixZz/urZU9pU6r7RJJLTOTeznaI4HzoEBEAABEAABEDAGgI+8zBb083IaVk4vZmkiEIaO0niHGnzCHsblT4Xr9H7vOkc69eM2EK461lbaYuf3FJJ6wtqqbohnrLSOjlv9AR67UBe2JtGnm3J5Xwv5+gez1UTn369gFpt/leEDHswmAAIgAAIgAAIWEBg1DvMW28vVxXoCitTVNEPo6J12vQOm1EdaOdMIBRsIc/Ab966mZraY2nO1FZVJfH9wz3Ddi7dOfjDsbu/erZzxUX5ArDv8HTawf+GgAAIgAAIgAAIWEdg1DvM8vq9sIKdZeuYQdMwCRixhX51eZhdebzt4+NTh65V1g1WFUxOGL7D7LEjiy9IufH8mc0kVQCluqNejl7IoCvVSVyevkt/yeV4xdwGstmj6FzZBJdrOAECIAACIAACIOBKwKfDLCtfb34+kzYvr6LU8d3UwH+wPz2VTcd1xSHWL65V5bEncJtmXr079O1k+vLbTNXj/9l+lp77YB41trkWRJE/8E89cJGe2bNYtV2U20z3rKji1TKbWvU7wH0dPpfhMnIZ1/98rYBk1XJBTjP1DUTQpyezh/rUrgq/xG0d4nDIPK3oeTrvMgCcMEzAly1EkbaNP06z0edH+kxP7lZzaO6INTwXR0PteD2N/dF1Jaqc+Ntf5g7pf+yOEvWmY++hwXNG9MjN4tTLyvGJS+luHebLVUmG5yB6KusT4DAbJoaGIAACIAACY52AT4dZAG1aVs1O8yyq4D+yU9Jt9Pj6YmpjZ/ZCeYriJytWqxdcozcOzqLKhgSaOnGwjTi831xOVytfMyZ3uHWY5bxcF5mf00I77iziEIpcOs+6J0+w084NRVTfEkcXeZVYLz9bX0Infkind76aTtFRA7SFnXqH+HKM9bpwHDgCRmyhbTPckZh9fhZwfLvEMku1ObNiZE7vfj1DfRlcktdIp6+k0VL+lLCJ5z+cZ/o57euPUL8/7Xb/45JFT0uH/3rMMkN7EAABEAABEAhXAoayZLz39XQq4tfA3T2RVFI7nt7jOElxoh2yLr+WpE0xX5M28spYju/gVWeRohpxmNvVv2UX/z/+/DSNi+1Tx+Iwy3URWcWWV+an2Lmwd0dR2bVE2nckR23ScidnilLpG3aYbV3RajX6nb/OcNcM58YIATPPj2SRkC95Ry9MChid3r4IemV/Ht2zspLystvobv585ZM8kvNmRZzcZ/bkc4xyjtlbXdqLnpc+nutyHidAAARAAARAAATcEzDkMIuTrJVSPpaVModkpNip9KpzmxI+lhViEVlBzs3sUP9eeVM9RbOzsnxOgzoWR9qxwpwzyUZn2QnWijjf2ek3+tJeu1COGEwnWGP8wMzzc9eSGurnMJ4jbsJ9rMQo4R7yxuTJ+wvVZ8swwj+sHA90gQAIgAAIgAAImCcQ/emnn1JPTw91dXVRZ2cn2Ww2mjlzpk9NEptpVGob49VmpEh2lNcsrKN3ZfU5/yodOZ/B57tJrjtk986zLmo9Zbew+rUycte6oA+7E0aenwz+IrdpaTW9/Oc51NNn6DujXxymZ3RwXH8M5fCn48uhXwpxMwiAAAiAAAiAQFAJRK+6Ywt12bvYUe6gjvZ2am1tofaGG+EWMhophOCIV5ZjWRWuaRw3NNBrLePUOW2ccS4fX20ebCMZKirqEmntoqtqw5NsGNy4tEatNsvmI0cGCwnBeJVfWbd1Bj6+ssMeTUnxPU59TZs0uAqut0BPbyTFRPUHxbnS941jZwLebGHk+ZFsE09suUyfn82kH6qSPeKVL3ISsiHP9rGLEz226+fYYvkiKJ/uRJzkVfPqafc7CzmeuZBkc578LujFl55Ezq0sG2tlH8EZDlkarjhi/a82jaPjlzzPa7j6cR8IgAAIgAAIjEYChpbXHrq9jGZmtVNsTL+KOZbMFAdPZw/x+IozYmzlNuI0SxtxsLeuKeNMGYNZMqShrKzds7JKbQIUkdjjB24td1px239yCu3aWKT6iI3up/g4SaXVpHLlWi2XKpPpwdXllJLYrfqSGNNtXODEnYhTfws7PZERSE7njk8wz3mzhZHnR4rYSBz91aZ4Wja7Qf3IM6CX1PFdKk5/5dx6/SWnY0nzVjCrye2zIc75Ts5IsZfzgEucveQDl02scl4v3vRIWxmzjCc/t0l/q6lj+VIoeuL49xQCAiAAAiAAAiBgjICh9AAHTmWpP/ySMk7Syh08naUqpDnkBK9UJSf20M83cRt2PqQoxF+/n0wn2Sl2iDjMstHvmx8GV8dO8qdshtK+oi6sSFYr0PdxtTJ5jR3BDqrEMEt/VotsSpQvAs88ck45zOWck1c2GEpWA71I2+13FdO2taWmqgXq9eDYPQFtajVp4SlNm1zzZgsjz49sSq1lZ1mq4jlEnFV9bHFndzTJl6pyfuvhTT44Oo2/HJbTrg1XVAo5bUq8R/h5+a4kVW2UFZFNsd/z8ba1ZbTnM+ewJ2965N5ufssh46lpHMwd7WlMsgIv7TxtLJQvtaJL+7vpSRfOgwAIgAAIgAAIDBKIuFLVMOAuJOPZ515QLZCXGI8KCIweAvIGp7c3gt78wvc+hdEza8wEBEAABEAABPwjYGiF2b8ucDcIgECoEJCc08d0RYdCZWwYBwiAAAiAAAiEKoEhh9n9lqVQHTbGBQIgMBwCEtICAQEQAAEQAAEQMEfA56Y/f8oUmxsKWoMACIAACIAACIAACIBA6BHw6TCH3pAxIhAAARAAARAAARAAARAIHgE4zMFjjZ5AAARAAARAAARAAATCkAAc5jA0mq8hpyd30WLOXz17SptKgzeaRPIRS57v0VaVEfMaTU8p5gICIAACIDDaCFieJSOQaej0+XpDLb564fRmksIYaeywiqPqbnzu+Fg5r5/cUknrC2qpuiGestI6Vb7s1w7khf1zKzwld/K9nKN7PFe9e/r1Amq1+VcRMhTsFYh5hYKxR+u8QoEtxgACIAACIBB8ApY7zIGcgtYB1TuZgezXqG6pgCjV3AorU1QBFqNi5byk39+8dbMqHjNnaquqkvj+4Z5hO5fuHHyj89K281fPdi6cI18A9h2eTjv431ZIKNjL6nn5y9nB1V89Vs/LCntDBwiAAAiAAAgMl4DlDrO7VdXhDi7c7pNQiMIKdpa9DDzQfD4+PnWo90quXiiSnDB8h9nLVCy9JOWi82c2k1Tdk+qOejl6IUNVhUxL6tJfcjleMbeBbPYoOld2oxqlSyM+EQr2MjMvd3MYqXMjYa+Rmiv6BQEQAAEQAIEbDrOHYNek+B66e2UVLchpUY5XX3+EKvX75beZdL4sZYigdsXXnVMo109dSaN501rp0LeTVRzqjMkdqhz1sYsTlR5p8+bnM2nz8ipKvV6G+9NT2XR8GIUWFuU20z0rqnhV0qZWVw+wnsPnMgJice3cX+I5OMTTyrE7PkYHZmZe6cndSm1zR6xR9UPttHPyZNtH15WoctBvf5k7dN9jd5So1fW9hwbPGdEjN8uzJSvHJy6lu3WYL1clGZ6D6KmsT/DoMIeSvczMyxsAI5zD1V7e5o1rIAACIAACIBAMAj5XmP9+8xX6vnQC/W7ffGq3R1NCXB/lZbfRnQU1Tg6zwwnU/uHWT+BvFybRf5yfRP/t3kv08sdzqLs3kratLR1ymKX9pmXV7DTPogp2eKak2+jx9cXUxg7vhfIbzrler/54Pjv3O+4s4vCIXDrP902eYKedG4qoviWOLvIKsNWinbsnZ9gIH1/jMjuvBRxTLbHMUt3NrBiZ07tfz6CnHrhIS/Ia6TR/GVrKnxI28fyH84a6M6JHGssXsca2OH7G/ItLFl2ip6XDsx4jYxoJe5m1kba9kTmFq7384YJ7QQAEQAAEQMAKAj49qakTbfTvX80YioEV5+tsUar6MSva1bRLlcnq9vSkwVVQhy6pRFZ0/ZW8rGS/xzGrm9mJNuMwywq1hCbIirZI2bVEtZItm+EC4TCb5TDc9mbmJVkkVi+4Rl+czRxudz7v6+2LoFf259EvOU5aVvHvXllJL/7pJpLzZkWc3Gf25Ju9zW17q/S4VW7ipBl7mVA77Kaw17DR4UYQAAEQAIExTsBnWrnPz2TSrx8+p1YSt64po3X5tRxK0T4sbD19kSQ/Io5/x0T3O+kSJ1krpXwsq5ZmJGeSzcWhl7jY7HRzesz0GYy2ZuZ115Ia6h+IoCMBCkNxzFfCPWQl/8n7C9VnyzDCP4LBbiT6MGOvYI0P9goWafQDAiAAAiAwmgj4XGHef3IKHb80kfKy2mhiShfdxJkX7ltVSV+zI/ZHXrUNhkicrFnZvfOsyy1mMle43BwiJ4zMK4NDUDYtraaX/zxn6AtKIIc/PaODmttjKIc/ZWMe5AYBI/YKNi/YK9jE0R8IgAAIgEC4E/DpMMsEGzhzgfw4JDPVTk8/dC4gDrNsBtSGX8hqdk3jOBfOPRz/HBPV79YhlBCMVz/Jo7ZOz3GsLgpD5IS/85LsBU9suUyfcyjGD1WDYS/uppbGoTASsnGtZZxTDLm+bT/HFkdyeId8uhNxklfNq6fd7yzktxCFJGE3FXWJLk196Unk3MrrF9eq2PUz10NpXJQYOBEdNUBbOCTnatM49UUv0OKvvYyOD/YySgrtQAAEQAAEQMB6Aj5DMn714AW6hR0i+YMtjlNKYg+tmFuvshAEQh66vYxmZrVTbEy/yqIhuXIPns526Ur6l3FFRrgmcZNV8V0bi9T9sRzyEc8bFfO58p3kJA518XdeUjhFqsZdbYqnZbMb1E9KonOcuDBIHd+lNliuZFt6E0nzVjCryS1ncc53ckaKvZx72tYVrXJQy+ZKOa8Xb3qkrYxZxpOf26S/1dTxtEkdSk8cPz/BEH/tZXSMsJdRUmgHAiAAAiAAAtYT0Kwwu19B/OjYNFp781V68LZy5cRK9oHvS1Lpn/fPGRqNPjOGpzRkRoZ/4FSWcsImXE8rd/B0lqpWpxfZHLj9rmKVZUNGrs1OUViRrFKb3cdV4eT1cwQ71RLDLLpGQszw8Xde3T2RVMvOslTFc4g4q/rY4s7uaJKNl+W8Gu9NPjg6jWPXy2nXhisqhZyW8yPM/jt+Fhxx58Ucby7Pxra1ZbTns5lOar3pkYaSMUXGU9Po/YuYrOhKO08bC+WNhOg6+UO6t2l5vRZMezkG4mtesJdXk+EiCIAACIAACASUQMRbb701sOTW9dTZaaP2tjY68sVfaObMmfTscy8EtGN3ysVR0Tpk7trgHAh4IyBvFnp7I+jNL5wddm/34NrIEYC9Ro49egYBEAABEDBOIHLTpk2UEtdPybH9lMQ/t912m/G70RIEQoyApD386vvJITYqDMcTAdjLExmcBwEQAAEQCCUChjb9hdKAMRYQ8EZAQlog4UMA9gofW2GkIAACIDCWCfjc9BdMOAjHCCZt9AUCIAACIAACIAACIGCEAFaYjVBCGxAAgVFNQL/R091k8YXeHRWcAwEQAIGxQSCkVpjHBnLMEgRAIBAEJM2kpBWEgAAIgAAIgIDVBMa0wyz5ghfNaKabOffv+Pheq9mGhD4pCJKZGjolwUNtPFYZabTOywifUJn7qpvqSMqRQ0AABEAABEDAagL/H5UubM3iDJ1RAAAAAElFTkSuQmCC" alt="" />

MapReduce ----倒排索引的更多相关文章

  1. 【Hadoop离线基础总结】MapReduce倒排索引建立

    MapReduce倒排索引建立 求某些单词在文章中出现多少次 有三个文档的内容,求hello,tom,jerry三个单词在其中各出现多少次 hello tom hello jerry hello to ...

  2. 大数据学习——mapreduce倒排索引

    数据 a.txt hello jerry hello tom b.txt allen tom allen jerry allen hello c.txt hello jerry hello tom 1 ...

  3. mapreduce 倒排索引的建立

    大道至简 http://blog.csdn.net/hguisu/article/details/7969757 1.map的输入 key: 文档 id   value: 文档内容 输出: key   ...

  4. 使用MapReduce实现一些经典的案例

    在工作中,很多时候都是用hive或pig来自动化执行mr统计,但是我们不能忘记原始的mr.本文记录了一些通过mr来完成的经典的案例,有倒排索引.数据去重等,需要掌握. 一.使用mapreduce实现倒 ...

  5. MapReduce实例-倒排索引

    环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:任意数量.格式的文本文件(我用的四个.java代码文件) 方案目标: 根据提供的文本文件,提取出每个单词在哪个文件 ...

  6. [置顶] MapReduce 编程之 倒排索引

    本文调试环境: ubuntu 10.04 , hadoop-1.0.2 hadoop装的是伪分布模式,就是只有一个节点,集namenode, datanode, jobtracker, tasktra ...

  7. mapreduce (三) MapReduce实现倒排索引(二)

    hadoop api http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/mapreduce/Reducer.html 改变一下需求: ...

  8. MapReduce的倒排索引

    MapReduce的倒排索引 索引: 什么是索引:索引(Index)是帮助数据库高效获取数据的数据结构.索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址,并且把这些值存储在一个数 ...

  9. MapReduce中的倒排索引

    0.倒排索引资料: http://blog.csdn.net/pzasdq/article/details/51442856 1.三个日志源文件: a.txt hello tom hello jerr ...

随机推荐

  1. 并发服务器三种实现方式之进程、线程和select

    前言:刚开始学网络编程,都会先写一个客户端和服务端,不知道你们有没有试一下:再打开一下客户端,是连不上服务端的.还有一个问题不知道你们发现没:有时启服务器,会提示“Address already in ...

  2. HP-Socket v3.2.2

    ==========================================================================================v3.2.2 upg ...

  3. Docker中运行nginx并挂载本地目录到镜像中

    1.1 从hup上pull镜像1.2 创建将要挂载的目录1.3 先要有配置文件才能启动容器1.3.1 vim /data/nginx/conf/nginx.conf1.3.2 vim /data/ng ...

  4. MongoDB高可用集群+MMS集群监控搭建

    备注: mongodb学习资料 http://www.runoob.com/mongodb/mongodb-tutorial.html 一. 集群的三个组件: mongos(query routers ...

  5. Apache Solr 实现去掉重复的搜索结果

    https://lucene.apache.org/solr/guide/7_2/collapse-and-expand-results.html#collapsing-query-parser 对应 ...

  6. 从2PC到Paxos

    在分布式系统中,一个事务可能涉及到集群中的多个节点.单个节点很容易知道自己执行的事务成功还是失败,但因为网络不可靠难以了解其它节点的执行状态(可能事务执行成功但网络访问超时). 若部分节点事务执行失败 ...

  7. zookeeper高可用集群搭建

    前提:已经在master01配置好hadoop:在各个slave节点配置好hadoop和zookeeper: (该文是将zookeeper配置在各slave节点上的,其实也可以配置在各master上, ...

  8. 【转载】使用Jquery操作Cookie对象

    Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术.jQuery是一个封装好的JavaScript库,使用jQuery可以极大地简化了Java ...

  9. SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法

    按照ASCII码, SELECT char(64) 例如64 对应 @,则 ), 'kk'); 则结果为 abckkqq.com 依此类推, 去掉其他特殊符号,参考ASCII码对照表, 去掉tab符号 ...

  10. 再谈 C# 对象二进制序列化,序列化并进行 AES 加密

    对象的二进制序列化非常有用,也非常方便. 我们可以把对象序列化为字节数组,也可以把对象序列化到文件,还可以把对象序列化到文件并进行加密. 先引用这些命名空间: using System.IO;usin ...