分别建立三个文件:

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. Apache-Flink深度解析-DataStream-Connectors之Kafka

    Kafka 简介 Apache Kafka是一个分布式发布-订阅消息传递系统. 它最初由LinkedIn公司开发,LinkedIn于2010年贡献给了Apache基金会并成为顶级开源项目.Kafka用 ...

  2. python中执行该文件,就调用 mian 方法

    代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...

  3. 浅谈Web服务器和应用服务器的区别

    1Web服务器和应用服务器简介 通俗的讲,Web服务器传送页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods).确切一点,你可以说:Web服务器专 ...

  4. Logback中如何自定义灵活的日志过滤规则

    当我们需要对日志的打印要做一些范围的控制的时候,通常都是通过为各个Appender设置不同的Filter配置来实现.在Logback中自带了两个过滤器实现:ch.qos.logback.classic ...

  5. JVM(二)—— 垃圾回收

    垃圾回收 垃圾回收主要解决三个问题(回收哪些Which,什么时候回收WHEN,如何回收HOW) 一.回收哪些 这三个问题,最主要的还是第一个,Which回收哪些,评断回收还是不回收的标准是看对象是否被 ...

  6. 判断本机ip是电信还是网通

    string location = "0";//0是网通 1是电信 Uri uri = new Uri("http://www.ip138.com/ips138.asp& ...

  7. 部署WebService

    IIS6环境下部署WebService(部署虚拟目录) 首先,打开IIS管理器, 部署一个网站或者使用默认网站 右击网站选择新建虚拟目录 输入WebService的别名 选择WebService文件路 ...

  8. .Net Core 读取配置文件 appsettings.json

    1. 首先些一个类 public class MySettings { public string P1 { get; set; } public string P2 { get; set; } } ...

  9. String为什么是不可变的?

    前几天一个面试被问到String为什么是不可变的?, 自我感觉当时回答的不太理想, 事后总结一下 不可变的是什么 我们谈论的String不可变, 指的是字符串的值不可变 例: String s = & ...

  10. json接口返回值

    SpringBoot响应客户端渲染数据 1.SpringBoot构造并且返回一个json对象 首先,我们在父包下新建一个pojo的包,并新建一个User类  IDEA自动生成对应的get/set,然后 ...