MapReduce ----倒排索引
分别建立三个文件:
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/NTMzKD9OTd9xmydwL69v8gMGP7XnGHStJnu+LuREzNhrQF/X/Pq0MzwP6bk1DpQMmWe+my2PiIcMOy3SZkT+gzM3PvuiMwPoydlxk+e7n5epgQaqnGTpmei8RoB0rlSxDluycTKIXsjoIU+/PDDnbkiwio1Zuheq4zJfDCocyvPUQmnkcYCpdj40fx0XHkEnn76aTvvvPPcqgarzri7ecHSiRVl4rDyTHjwYsqGc26//fYzXC3+/e9/54QRCcsGrmdF/ZJLLnH3adhVJCmcVe4HHnjAWUlgrst9/f3331cexDKXCLfG4447zpk3n3LKKY51MFBwz/o222xjgfItWwJWlfh5SWKINQFm0rQ1jNknBTchL+FnPlD0OQsX8ueeOOCAA9w9ccQRR7jo0f6hUPuWouzZQuqPvATo9wPljy211FLZOLDHbW7RRRe1QKHiLJrWWWedbDiuTRtvvLG9+uqredONBgRKZltkkUWipxvVMW5h11xzja2wwgo55cbaiH4rDStWl2+99VYLBvGJdWdV+IcffnDueHHCM7bJJps4V72kdoxeH76WsKRy0YfQ7vQx9B9Y7tDHFCv0B7gJBosYdS4lvWARwrnZ0XfgZsmvVatWzlrLH/Mvll3zzTefSyNN3XFXw+IsbXzisS8ULnBx/MPppWn3cGWT2jUcV39XP4GkZ6/6CaiGpSZQ6J5Keo/Rn+Iex/s9mC27oo0cOdKN37t06ZK3qFg9MV70rvJEZA7AGDRJqmF8kFTHSg2/5a2f7OOh46z/92Pt0heGOKul4/sMtG9GTqxT5A9/GOcsk577YpTd2X+4HffgQAuUTi4eGoTjN+9kHUNudVgyjZs83RZuXdfi+a7A6unH36dY38C17o5+w23Qr5PsgDsGODc75IJnBtvHw8ZZNF6dQumEIzDH92Sic6BTwIQRs/x33nnHNt98c7evAibgDHToMBhEBSuMsc0UTiPOLD56UbHxo9fruPII8LJiUoCgsGSSgWICwac7WMHPTlBRFj388MNu7xVeNFdeeaUFK9LuPmPieuCBB2b32MCN6qyzznKTNuIzwTj22GPd/iLsU5IU7kmhLEXRxIuR/Bj8owypFUEBgDKZAcGCCy7onu2rrrrKTRrTbpibjyGKBhQQvo1gisKRNgosGxzi8DOPIppfsIrm9mmhb8HVZP/9968TF+X29ttvn7f907ZfvrKnvV7xZhPALTawXDLa5f3333cDww033NCZti+88MI5++twBYPQt99+Oy8+FjUC6zp3Pw4aNMjYdwcFaGMWlB/RfZF4RhhY0/fg5pXECpcDhP0rCgnPVWBF456zuAUglDT0tb5v9mnla8dwXnHXJpWL8tIX4NaGQvLuu+92Cw/0tbjRpZUbb7zRcMV46623XN/A/l9errvuOsOlGiVWdN+mNOkXqjtjn7BLHukVis/7ChdRr/SK5h9OL027++uT2jWaj46rn0DSs1f9BFTDUhModE8lvccoC330mWee6VyZ6e9RpLNYGF5sipYZV28+3uAXl+nrcKPjHfXKK6/kRK/G8UGUR2M5PmPbLtbr5aG2WNsWtu/a8XtuUZdxgfLnwmcH28U9l7OVlmztqnf5iz9Ynw9+sUM2WDJb3akzZtnTn42yydNnBsqr8bbFCh1s3WXb1cFx7g5d7cwnBtl6y7Wzbbov7MJ7LNPWbgv2hlqtEwtnZpt2a+9+0Xh1EtMJK6slEwMi//OsGdTvuuuuhnKIL7egZOKhZ0CM9YjfHwNl0/rrr5+9nnTi0ojmET3mmnCe0fDose6JxkEgcHfKFhS/7MDdIXuMQofJQOD64SxdmPD/8ssvLhwFJ5YLfuWD+5A9X7yggFhggQWymwGTDishrJAjSeE+HVbG/SSM61FylHIfqWyBK/QPVvSxZMCaiWfbTwaxrkgr+RjSN2C9gJUGafNjM+iw3334mWfySln8RsC0P8ou+h0kHDdt+ybVIV/Zk65TeF0CKIRoa9rxm2++cYpirNaiGztzJc9z3AbVPlXCuXe4H9gslJXQwI2ybqaN+AwbomK15zflri+rOAQo8GkHFH1xgnXo2muvHatIjmvHcBqFro3Li3Mo144//ni78MILncUpiiDqi4K7GGHjbJRTbACL8plFCy9sDMv9gsIOi0j/Q6GFhWr4HH+feuqpbqEjLPnqzhjHL46kic+eTdQ5arXmrw2nV0y7J7VrMSwVVwREQAQaSiD6HiM9LItQRqFgwpKUPi7YEiPHij0uXz6OwCIjgkED734WXqJSC+ODaJ0b+/H7wYberZrPY1Onz7KPAosmfu0XaG7vBeejwkbixJsZbOw06NeJNnZS/J5M0euOCvaE6j9orN3ed7idsEWnaLCOCxAoqyUTG5AidAqsRnvxXwJgtRDT8mDfG9dRYH2CCwwdCavWJ510ktvEtFAa0fDocTTPaHj0OFtI/VHRBMIuLrwYwkpI7iO+OMWqLqsYKHu8GwTKhah7DEqlYA8SV1++ehG1tGnXrl3WHS8p3EMLW9hxPRZRvDTjJsYVDbqehaP+TIiYuPH1JjYiZsNlFIDhr1b55FH4RC0j8jGkf0D5F+zpllO6LbfcMufY9zNMynBroRyU4dFHH3UujOH8fNy07RvOqJiy10r71/O2qXMZvPzqJ88QVkcoLlEyh11k/YVY0BVSZK633noWvk+C/Wyc5SJfDasGQWGGgomVXdx1Efq7+rCK44EFGYqM6LNKXNoH600snaKSrx15JpOujaYVPsaKKSz0GRtttJEF+/Flxw6Fro9eCzvqF/4qHxMavmYa/TrRgAEDnMt1sK9HThYorXnveEmqe7R8+eKj/MKdEL5eMcrCBe8uNr5deumlc5Iqpt0LtWu0fDoWAREQgXISiHuPYU3KV0AZV3br1s1lT9/Hl+P46AXjgnyy2WabufEflk9YNLHwGyfVPj6Iq3NjPzc2sGTCuujzn3KtsDfptlBO1Vo2m8dt+o2wvnz2U4PsmleH2Xk7dk1E0G6+5rbyUq3t28BVb/6WZVWbJJalsUUoKy3clOIkbHKONRPWJmilsX5gcNy7d2/r2LGjm4wmpRENjx77/H2e0fDocVx5da7yCMRNcigllgm4wjEY94oDJgJ+TyZvxRKuUXgCxgTVf73KxyFNP3FNCvfXoKzwQvpMfnAbqyVZJvgaFW4dSLBZtpv88uUl3A5pP1b3vRAeVQ7kY0g8FNe4MXphshV1ZfHHDETgj/Jw8ODBzlKBiWhYfNyk9mWi2ZCy52Sqg7wEeAZZaMB10Qtt1KNHDzdIxJUVpS1f1sJFzgv71bAvU1rxVpAoSKL3T9o0KiUe1pYMpFmcCSvSSsWKerK/Ga6pcYLlKG4JYSV+Ujv6dOKujcsjfI72R9EctarCatLvi5SURlx41PWCtLB0igouiYxR8lkVpa27TzcpPn3Xsssu61x5vfBuYusBlGrh84QX0+6F2jVabx2LgAiIQLkI5HuPYWXOV2G9gon8sWBnPMfiZSGhD2efQBYYSQfFVBqppvFBmvo2xjiLBvsqNZ2niR22Ya5rXFM0T4HwBTn2dvrnih2y1SNo1aXb2CtfzTYuqFPv2ZdmT386bHyQzjTr3GFeuzPYp+noTf+3oBOJVycdnSivu1waviiZWE1ea621XHQGjJi6s5ooEYFiCWCxFFZA4VrD3l/eNQrXOAbzvGgQBunBV4Ky2bDxrffZ5iR7wXA/+k9dJ4X7hPgUK9ZVpMWLDauqfIqxYuvYGOIz2cct1luIYZrcvn17N5HnhxUjSgQES8bgS351qpWPIX0GLlFMrhAUBMGXyPLueUVZsC5AQcGePuyBErZ8C2ec1L4NLXudSupELAGUiOzh5duYSLjEYnGEOxaDRlwSGVx6N1RcrXFfyrdKSRr0D7Q912Bdh3sVLlKNWcHE/c++Qazw8ota9NWXVbRhUJbTny655F+DOR+Hfi742pnb3y4sSe1I3HzXRvOPHtOW7E/E+MELK9XcM2HlZPS6OXWcpu6U1U+QkuJjfck+IuEfClaYewVTOL207V6oXecUK+UjAiJQ2wSS3mMo+hnLfffdd1lQuMthhbnKKqskwsNljv4Ry3Zc5uOkGscHcfWspnNrB/sq4QLnFUZYKWGhdEewATgSTDfsxjd/zFEojRw31Z77//buHcSOKgAD8JiY4IuImkYsJIUWgpWgIDbauHYSbEQEhYXF2tbKykBwWVgIFmmWtbYUxEIJgp2g22nhA0kRRFERjUScf9YJ1915bc7e7O7NdyCgd2bOzP3mzN2Zf86Z+fJK86yllCx7oZ6nLafuuL26/Mtfzf/+Wde99vF31ZvPn2keIP7hV1eaHk0ps/NdX9h//E9grj2ZpljnblsO+Fw4pCRsSm+BdFtUCOxVIBdAy8vLzdvjEmQkjMhbeNqHbufEOxcmGSKTXiu5wDl79mxzwZmSHi/nzp1rpifkyN3qDM1p3wA0Nr3d3gzLytDP/NFKD5rz58/v9asc6flzdz8hUx7QGOf0Lsj+aN+IlOeo1K/Lri5evNgMLcm86ZkwW/oM83uRACLLp9daekTld2NlZaXTLHf/E3alDeRtVFlPgsb0hGqHy7YLTtm/JdveuYE+3CWQYybDghIerq2tNcdlAt9caKcnXEr2X3ruJFBoh6Surq72nkBmmfp1xs2/lAyTzcsl0tX+KJcEaxsbG81XyHE0W3JinZ5HY1Y5TnNstGF8jtMEb7lr3IYg+S1M2TmcOJ8l4Mtd37b3aLsNU/Zj37KpY2y7cky3AXN6Q2ebs38THB50mfLd86y+T+qHjaf32ZT5x77TbH2Zd2y/Z56h/Tq2PtMXV2Ds2Fvcb+6bzUtgqE3lAd5jf8fytyz/cl6fv9/pAZ8bx1Ne3pGbjHkz7dBb5Rbx/GBe+/Kw1JvnMb394iPNG+je//xy9fe1f6onHr63eu3ph5pNvK8e6vbOS49Wa3Xw9N6nP1Qnjh9rgqMXHj9dvf7M9jxffP9b9dk3P1dvPLvdQ2mp7vX01gdfV1s//l79VL/V7rl66F16MaW8Uj+E/N2Pvq0uvPpYNTvfy089WD15Zju0Oiw2h2E7bqtPKreffnsYtsY2ENgngQQPOXlOd9quHkTpzdBO7+rFkLsqCSbS+yZ3mHeWoenpSbC+vl5luFgCjVttmNysVUK23CnPBdTOtz1lH+XCtstnimF+uhIW5WRjaHhMHgicIHFpaen6pmV8f05q8jaRrjK0fzN/6bZ3rdNn3QJ5o2N6HuVY7jpWczczx1nfsd5d66356bys0psmJ//5zesrfftxyrJ9dbafZ//nmEzYuJcSj/SezssDZp8BN6WOhGObm5u73qTXtWzfd++aN5/tdf6+etrP57Xfx9ZrOgECBPZbIL9nuXGZ8/Odz8rb73Wp72gIJMjIkLa7Th5v/nWVX+vnN12tQ6j77z5RHftvOF3XfPnsj6vXqsz/wD0n62Cqf1zc1Pn61rPonx94T6ZFB/b9DkYggUbX2yParckFxc4HgM9uaS5mS6anrqxjrxcuB6M1v7XmBCB3j7pK9lFXwDQ775BhwsOhfdTWkwf35kHweeZbTkryrKcMsUkvyr4ytv9Lt71vvT7fLZD9NlQSMA6FjEPL3mrT5mGVYa/prTgUMMW5az9OXXZsP3W9TGBsmXZ6hubfyL22/Halt+WU0vXdh5bb6/xDdWXaPPb72DpNJ0CAwDwE/J7NQ/Vo15kY6HQdCA2VU3dOjzyGwqrZdUydb2i7FnmankyLvHd9twMRuHTpUjNcIz1slBsT2E/D9FrLw6K3traaHi/ZL7k4TM+mebztbT+3/cb0LEXg5gnkldAJe3cOlZuyBSXLTqnfPAQIECBAgAABAjdfQMh0882tkQABAgQIECBAgAABAgQIECCwcAL1c9cVAgQIECBAgAABAgQIECBAgAABAmUCQqYyP0sTIECAAAECBAgQIECAAAECBAjUAkImzYAAAQIECBAgQIAAAQIECBAgQKBYQMhUTKgCAgQIECBAgAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEBAyaQMECBAgQIAAAQIECBAgQIAAAQLFAkKmYkIVECBAgAABAgQIECBAgAABAgQICJm0AQIECBAgQIAAAQIECBAgQIAAgWIBIVMxoQoIECBAgAABAgQIECBAgAABAgSETNoAAQIECBAgQIAAAQIECBAgQIBAsYCQqZhQBQQIECBAgAABAgQIECBAgAABAkImbYAAAQIECBAgQIAAAQIECBAgQKBYQMhUTKgCAgQIECBAgAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEBAyaQMECBAgQIAAAQIECBAgQIAAAQLFAkKmYkIVECBAgAABAgQIECBAgAABAgQICJm0AQIECBAgQIAAAQIECBAgQIAAgWIBIVMxoQoIECBAgAABAgQIECBAgAABAgSETNoAAQIECBAgQIAAAQIECBAgQIBAsYCQqZhQBQQIECBAgAABAgQIECBAgAABAkImbYAAAQIECBAgQIAAAQIECBAgQKBYQMhUTKgCAgQIECBAgAABAgQIECBAgAABIZM2QIAAAQIECBAgQIAAAQIECBAgUCwgZComVAEBAgQIECBAgAABAgQIECBAgICQSRsgQIAAAQIECBAgQIAAAQIECBAoFhAyFROqgAABAgQIECBAgAABAgQIECBAQMikDRAgQIAAAQIECBAgQIAAAQIECBQLCJmKCVVAgAABAgQIECBAgAABAgQIECAgZNIGCBAgQIAAAQIECBAgQIAAAQIEigWETMWEKiBAgAABAgQIECBAgAABAgQIEPgXFfc72OtFFmMAAAAASUVORK5CYII=" 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,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" alt="" />
MapReduce ----倒排索引的更多相关文章
- 【Hadoop离线基础总结】MapReduce倒排索引建立
MapReduce倒排索引建立 求某些单词在文章中出现多少次 有三个文档的内容,求hello,tom,jerry三个单词在其中各出现多少次 hello tom hello jerry hello to ...
- 大数据学习——mapreduce倒排索引
数据 a.txt hello jerry hello tom b.txt allen tom allen jerry allen hello c.txt hello jerry hello tom 1 ...
- mapreduce 倒排索引的建立
大道至简 http://blog.csdn.net/hguisu/article/details/7969757 1.map的输入 key: 文档 id value: 文档内容 输出: key ...
- 使用MapReduce实现一些经典的案例
在工作中,很多时候都是用hive或pig来自动化执行mr统计,但是我们不能忘记原始的mr.本文记录了一些通过mr来完成的经典的案例,有倒排索引.数据去重等,需要掌握. 一.使用mapreduce实现倒 ...
- MapReduce实例-倒排索引
环境: Hadoop1.x,CentOS6.5,三台虚拟机搭建的模拟分布式环境 数据:任意数量.格式的文本文件(我用的四个.java代码文件) 方案目标: 根据提供的文本文件,提取出每个单词在哪个文件 ...
- [置顶] MapReduce 编程之 倒排索引
本文调试环境: ubuntu 10.04 , hadoop-1.0.2 hadoop装的是伪分布模式,就是只有一个节点,集namenode, datanode, jobtracker, tasktra ...
- mapreduce (三) MapReduce实现倒排索引(二)
hadoop api http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/mapreduce/Reducer.html 改变一下需求: ...
- MapReduce的倒排索引
MapReduce的倒排索引 索引: 什么是索引:索引(Index)是帮助数据库高效获取数据的数据结构.索引是在基于数据库表创建的,它包含一个表中某些列的值以及记录对应的地址,并且把这些值存储在一个数 ...
- MapReduce中的倒排索引
0.倒排索引资料: http://blog.csdn.net/pzasdq/article/details/51442856 1.三个日志源文件: a.txt hello tom hello jerr ...
随机推荐
- Magicodes.NET框架之路——让Magicodes.NET帮你编写代码
时间总是过得很快,而我几乎没有时间来安安静静的写博客和完善文档.不过总算是框架在一直前进,而我的计划是在今年年底(公历)前,让此框架成熟稳定. 在很长一段时间里,我尝试了很多我之前没有接触的技术或者没 ...
- 通过修改hosts解决gist.github.com无法访问的问题
1.打开mac终端先ping一下 ping 192.30.253.119 如果能ping通的话 ,说明可以访问 2.修改hosts文件,添加如下语句: 192.30.253.118 gist.gith ...
- jquery调用javascript方法
本来想找个“优雅”一点的方法,类似C#在调用C++方法时候的Invoke之类的.没找到,后来想想,其实也没必要,直接写就好了,算最优雅了吧.只是少了VS的Intelligence,有点不习惯罢了. 事 ...
- 系统不支持WP开发
好伤心,,,系统不支持WP开发... 买的ThinkPad S5 自带的win8,既不属于专业版,也不属于家庭版,,不属于各种版本. 其他条件都满足了.. 难道我要还系统吗??
- shell中$后加引号有什么用($"string"和$'string')
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 有些时候在某些服务管理脚本中看到$"$string& ...
- DRF之项目搭建
DRF,全称Django Restful Framework,是一个基于Django的Restful接口框架,是主要用来做API接口的,为前端提供数据的接口.在前面一片博客中,我们构建了一个vue的项 ...
- Django 系列博客(七)
Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...
- Python图像处理之验证码识别
在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract ...
- WCF、WebAPI、WCFREST、WebService之间的区别【转载】
在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...
- python基础学习(十一)公共方法
Python内置函数 Python 包含了以下内置函数: 切片 切片 使用 索引值 来限定范围,从一个大的 字符串 中 切出 小的 字符串 列表 和 元组 都是 有序 的集合,都能够 通过索引值 获取 ...