分别建立三个文件:

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,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" 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. MySQL数据库事务详解

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  2. 【原创】VirtualBox 磁盘扩容教程

    问题和环境说明 环境: 主机:Ubuntu 15.10 客户机:Windows 7 x64 VirtualBox:5.0.10 虚拟机磁盘类型:VDI(VirtualBox磁盘映像) 问题: 在虚拟机 ...

  3. Mysql加锁过程详解(6)-数据库隔离级别(1)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  4. sshfs基于ssh挂载远程目录

    为了像本地一样访问远程主机上的目录,通常我们会在远程主机上使用nfs来导出目录,并在本地主机上mount这个nfs文件系统.如果是windows系统,则使用cifs或samba的方式来访问. 但可能我 ...

  5. QTimer 的使用

    QTimer(重复和单发计时器) 应用 QTimer 时,先创建一个 QTimer 类,利用 connect 将 timeout() 与对应槽函数连接,在调用 start() 函数设置定时器时间间隔, ...

  6. 乐观锁机制解决多层嵌套异步ajax问题

    前言 在项目中我们通常需要使用ajax异步嵌套去请求数据并做数据的展示,当我们多次快速的多次的发起ajax,因为ajax是异步的,每个ajax触发回调的时间都是不可控的,这样就会造成前面发起的ajax ...

  7. [转]Angular: Hide Navbar Menu from Login page

    本文转自:https://loiane.com/2017/08/angular-hide-navbar-login-page/ In this article we will learn two ap ...

  8. [PHP] PHP多进程处理tcp连接

    <?php if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0) { echo "failed to create s ...

  9. 推荐 3 篇关于 java8 Lambda表达式的文章

    State of the Lambda 这篇主要讲 Labmbda 的背景和用法 译文:深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) State of t ...

  10. [小知识点] react 性能

    场景: jsx 绑定方法 方法有3种 1: // 在html中,使用箭头函数,自动绑定this class SearchHistory extends React.Component {      c ...