Hadoop大数据面试--Hadoop篇

时间:2023-01-30 23:03:05

本篇大部分内容參考网上,当中性能部分參考:http://blog.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performance/、http://www.idryman.org/blog/2014/03/05/hadoop-performance-tuning-best-practices/

原理篇:

1. Hadoop2.X的各个模块一句话简单介绍

1)Hadoop Common:为Hadoop其它模块提供支持的公共工具包;

2)HDFS:Hadoop分布式文件系统;

3)YARN:任务调度和集群资源管理框架;

4)MapReduce:用于处理大数据集的框架,可扩展和并行。

2. HDFS数据上传原理

1) Client端发送一个加入文件到HDFS的请求给NameNode。

2) NameNode告诉Client端怎样来分发数据块以及分发到哪里;

3) Client端把数据分为块(block)然后把这些块分发到DataNode中。

4) DataNode在NameNode的指导下复制这些块,保持冗余。

能够在解说的时候,拿仅仅笔和纸画下:

aaarticlea/png;base64,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" alt="" />

Tips:

a. NameNode之存储文件的元数据,而不存储详细的数据;

b. HDFS Federation: 解决HA单点故障问题,支持NameNode水平扩展,每一个NameNode相应一个NameSpace。

3. MapReduce概述

1)map和reduce任务在NodeManager节点上各自有自己的JVM;

2)全部的Mapper完毕后。实时的key/value对会经过一个shuffle和sort的阶段,在这个阶段中全部共同的key会被合并,发送到同样的Reducer中;

3)Mapper的个数依据输入的格式确定,Reducer的个数依据job作业的配置决定;

4)Partitioner分区器决定key/value相应该被送往哪个Reducer中。

5)Combiner合并器能够合并Mapper的输出,这样能够提高性能;

4. map--》shuffle、sort--》reduce

map阶段:

1) InputFormat确定输入数据应该被分为多少个分片。而且为每一个分片创建一个InputSplit实例;

2) 针对每一个InputSplit实例MR框架使用一个map任务来进行处理。在InputSplit中的每一个KV键值对被传送到Mapper的map函数进行处理;

3) map函数产生新的序列化后的KV键值对到一个没有排序的内存缓冲区中;

4) 当缓冲区装满或者map任务完毕后。在该缓冲区的KV键值对就会被排序同一时候流入到磁盘中,形成spill文件,溢出文件;

5) 当有不止一个溢出文件产生后,这些文件会全部被排序,而且合并到一个文件里;

6) 文件里排序后的KV键值对等待被Reducer取走;

同样的,能够简单画个图:

aaarticlea/png;base64,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" alt="" />

reduce阶段:

主要包含三个小阶段:

1) shuffle:或者称为fetch阶段(获取阶段),在这个阶段全部拥有同样键的记录都被合并而且发送到同一个Reducer中;

2) sort: 和shuffle同一时候发生,在记录被合并和发送的过程中,记录会依照key进行排序。

3) reduce:针对每一个键会进行reduce函数调用;

reduce数据流:

1) 当Mapper完毕map任务后,Reducer開始获取记录,同一时候对他们进行排序并存入自己的JVM内存中的缓冲区;

2) 当一个缓冲区数据装满。则会流入到磁盘;

3) 当全部的Mapper完毕而且Reducer获取到全部和他相关的输入后,该Reducer的全部记录会被合并和排序,包含还在缓冲区中的;

4) 合并、排序完毕后调用reduce方法;输出到HDFS或者依据作业配置到其它地方;

aaarticlea/png;base64,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" alt="" />图片来自《Hadoop权威指南》3rd Edition

5. YARN相关

YARN包含的组件有:ResourceManager、NodeManager、ApplicationMaster,当中ResourceManager能够分为:Scheduler、ApplicationsManager

Hadoop1.X中的JobTracker被分为两部分:ResourceManager和ApplicationMaster。前者提供集群资源给应用,后者为应用提供执行时环境。

YARN应用生命周期:

1)   client提交一个应用请求到ResourceManager;

2)   ResourceManager中的ApplicationsManager在集群中寻找一个可用的、负载较小的NodeManager;

3)   被找到的NodeManager创建一个ApplicationMaster实例;

4)   ApplicationMaster向ResourceManager发送一个资源请求。ResourceManager回复一个Container的列表。包含这些Container是在哪些NodeManager上启动的信息。

5)   ApplicationMaster在ResourceManager的指导下在每一个NodeManager上启动一个Container,Container在ApplicationMaster的控制下执行一个任务;

简单绘图:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZgAAAD4CAYAAADRuPC7AAAgAElEQVR4Ae2dCdwWVfXHr/aWqZkWImq5oYgLKuZSAiaKiJagSS4lKalYaoCgKCpuiEqguICSopKGa0oqarii4Y4mmiKChBHlSpnZX8uF/+d78Tzed96ZeeZ5Znlm5jnn83memblzt/nNvXPuPefcc83yEFqwYEHI3Wi3li5dGi1ilVhaF3+AFBfFxR8B/1BtL4qLPwL+oXHby8pGSRFQBBQBRUARSAEBZTApgKpZKgKKgCKgCBijDEZbgSKgCCgCikAqCCiDSQVWzVQRUAQUAUVAGYy2AUVAEVAEFIFUEFAGkwqsmqkioAgoAopAi0KgCCgCikAjEFi2bJn5z3/+41v017/+dbPhhhv63tPA4iCgDKY470prqggUBoElS5aYV1991SxatMjMmzfP1vt///tf5ZyAdddd1/78Huof//iHIQ+hzTbbzHzlK1+xl5xvuummhuOqq64qUfSYQwSUweTwpWiVFIEiIfDGG29YZgJDef755+05MxAYQMeOHc1hhx1mH+dLX/qS2Wqrrep6NPJ+//33bVop57bbbrNMiDz5CdPRmU9dEKeSSBlMKrBqpopAuRF4+umnzaxZs8yjjz5qZxYyq4CZcC6zjaRQIE+hrl27yqmRWRGzpMcee8xce+21BobXo0cP0717d7PHHntU4upJ9ggog8kecy1RESgkAoisZsyYYR566CHLRHr27GmOPfbYxJlJLeAwK4LheJkOjA+Gc9FFF1km06dPn7pnT7XUR+O2RkAZTGs89EoRUAQcBJgN8LGGsUD77ruvufLKKw0isLwSTIeZCz/EajDEyy67zKDXgdEQrmK0bN6eMphscNZSFIFCIcBsZcqUKVafgqjp7LPPbvVRXr58eSGeZ/XVVzd9+/a1P5jlvffea04//XTLIAcNGqSzmpTf4kp4Ow4q4+233zbt27cPuh0p/F//+pdZc801I8UNi9Tsdfnoo49sZ/di9O6775q11lrLrLbaamajjTby3o50re/IH6ZmxIVnnj59ulm4cKE56qijrB7DH51ih2KMcNVVV9l+c+ihh9qH0W9d23ca97vb8o1vfKNtrp+F/N///Z8Jux+Y0HMjiTzKXhem8ljHzJ0717z88stWecm5UDULHEkv8WUdAaagW265pZWZh1nw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" alt="" />

Tips:

a.  client能够从ApplicationMaster中获取任务信息;

b. 一个作业一个ApplicationMaster,一个Application能够有多个Container,一个NodeManager也能够有多个Container;

性能篇:

性能涉及较多内容。这里參考前文中给出的链接。并依照作业执行、map阶段、reduce阶段的顺序来组织性能相关的点。

1. 命令行參数:

在自己定义集群的參数时。不改动集群的文件,而在命令行使用參数。这样能够针对不同的參数设置方便,从而不必改动集群中的配置文件,一般有以下两种方式:

1)hadoop jar ExampleJob-0.0.1.jar ExampleJob -conf my-conf.xml arg0 arg1

使用配置文件的方式,把须要改动的地方设置在配置文件里面,使用-conf指定配置文件(上面命令行来自:http://www.idryman.org/blog/2014/03/05/hadoop-performance-tuning-best-practices/);

2)hadoop jar ExampleJob-0.0.1.jar ExampleJob -Dmapred.reduce.tasks=20 arg0

使用-D參数来这是相应的值也是能够的(上面的命令行来自:http://www.idryman.org/blog/2014/03/05/hadoop-performance-tuning-best-practices/);

2. map阶段

1) map的个数问题

map的个数是不能直接设置的。假设有非常多mapper的执行时间小于1分钟。那么建议设置mapred.min.split.size的大小。提高分片的大小,这样来减小Mapper的个数,能够减小Mapper初始化的时间;或者设置JVM重用(图片来自:http://www.idryman.org/blog/2014/03/05/hadoop-performance-tuning-best-practices/)

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYYAAABOCAYAAAAkTLGIAAAWIUlEQVR4Ae2dXWxUR5bH/yw7Aflrthu86bWHnsHYbqH1jhDI61hpraWRzNgPGQmRXQvJUvzAhyYWDi9h87A7k4+XDPuSMQKJwINXsRQ5IkIKD2FhXpCMLGMFoRUS8gdkZQfTxKG9sd1eCEKsTtWte6tu3+6+/WHja5+WwPfeqjpV9avbdapOVdfZhL//xxfgDxNgAkyACTABi8BfMQkmwASYABNgAjoBVgw6Db5mAkyACTABsGLgl4AJMAEmwAQMAqwYDBx8wwSYABNgAqwY+B1gAkyACTABgwArBgMH3zABJsAEmAArBn4HmAATYAJMwCDAisHAwTdMgAkwASbAioHfASbABJgAEzAI/LVxt6FvulDd044QgPnhw5ib2tAwuPJMgAlsYAKbijkSY2vHBUQj1JFeA+LtCCWmMR+Jis5VMp3G9MCHeAKr003cQaKiCZEKRXwZia/6sJCke6djVqFYuoN7Fz/BcxWWUb5Msbm1H7tiZXZywE/+nwG/OaaVSUsulMQ5PN0jw90KQ9Ufy8+Asp8hNX4OD0bGTAF8xwSYABMIGIGCTEnUITb2KKWgja6FUqDO+DCmE0QiimhHl4MkQkqBlME5JJacx0Azqt6Uo3XqXCcGDuPe+DJQ0YRdb57AZhU1i3xHKeSb/xgWLh7GxMA1zFv5kAKgMtC/uakxLNyeFiGhPVpZwiewLUKPl5H4y+9FectjxwSX2tZmVWL+ywSYABMIHIG8TElO54uMo+P5YZohAJiaBiJRIBLDVozbYOaHrRnCxTEsqKfh11EpZhHLWByXI+7n4/eRijWhvKIO5eGHKia85TfjlVo5U0iNf51//rb0DBdTXyMhZg1NCNdDmJk2x+pQTtETN+SMZ6QPEyOAmEWQgogdY5NUBpz8mAkwgbVNwJdi0BUCEtcwcWWotLUKV8lOFj/gJ2FW0sWXYUtYv/e6rsMWyzwlRu2xY16RinhGs4ZOROJR0KwhOfUQYWGyWkbipsniyZXDmBAzoGOIxC8gFOc1iyLAc1ImwAReAgFfiuG5NRqWCqIdjT3tGWcMqg6bq7ery9x/kwtIASjHdrwSBp4YymEZT5PAFpcUU/59PCXTVEWmmUwXKl3p8761Zw11CHfUyXUUNVvQhNnrDryIrVHhSybABIJEIK81BqEgrPUDZU+vrjerG6qnNYUua0RNHbVl2jGjmXfJG1gUaw5lqIxJ+7xtqlm6j5SmKLzljyH1YFnILI91Yqsp3eedpVwyxlZ5lCEUIbOVOVsgpanWXdQ6Ce9sygiTA5gAE1jDBEq7K8ldUdvs5Ow4cu/scZI4cexn7l1JdoB1YcuX94bJy45Li9HjqPSzFbX+D2iMR+2UdGHuNNLKqOWt8jXjGmL4hgkwASYQGAJFKQanlqrD1LefOqHFX620fL8lVOXgdQO/xDgeE2ACwSOQlykpeNUrbYm3dsgttfT7iiT/AK60cFkaE2ACa4aAr8XnNVPal1QQfUFZ/GhO/OjuJRWGs2UCTIAJrDCBEpmSVriULJ4JMAEmwARWjQCbklYNNWfEBJgAEwgGAVYMwWgnLiUTYAJMYNUIsGJYNdScERNgAkwgGARYMQSjnbiUTIAJMIFVI8CKYdVQByyjloM4/fZ+1OZd7Bp0vd2L091780i5F30ne9HXkkeSdRu1EH7rFkaJKrYXfe+u9vtFJ0afR2NPP6rCm0pUj9UTw4ph9VhzTkyACWwUAvUdiFRsQmp8EAvJF4GrNf+OIXBNttYLPIuhs2dgnjm71su8lsq3UfnRrLEVuH4G/aNrqT0KKUszqvbQ0TqOG4FCpLzMNIFWDOqHZ44HObeHOPKXYB0T7nEOku3hTYRtR2qpDOXihNZrWKxtt7y6KS9wgDoTyWkwGfbM8hyX8awkMsvsW8TwQgPiNSkMf34VeOMA4hUJDJ76EuJ7QHHahOcfS7wWBvWlGQHaWtEgYniFX8KjfSSXIlA+AxiacUpb+0YP3tstvEgQGCdvEYVMGFrau4tOQh9Xpmzg8d1LeP/yrJZS1kGWHcDSJD4+exUPtBiw6plePyOSx43iU2j9VXqnU2rp7kXnj1odsraPLJLJwM3Xo9jaIzOtyU+E7ZhN40VlbJk8g374eL+0vNIvVf11fgBmR3B88BZUu+idtsHHz/udnqn1RH/vALT14nSbDJrUlUTLQfS3ReAYZVx8vcL/40uMZhisU/m7axIYVHHyTE8l3NpxHtHIJswPH8HclJaRNVuQvlroeReq32pH6FG2/unf0Rj/pYvSNKb/8yM82fVvaIxXZ+6fKM6LF9jc+mfsiqnvN4mS6Z+99ol4nhr/FA9Gbrry8L4NpGJQCoGqJA/l60J1HAB5iFPPkidQ+7smlEdeR1V4SDoFSjuUL4ptrc14MEeSSCksS/ixdpTDuq6IorIeeFat3IZKZQDh1lR6qJu40od7oHDpoMdTQVQ04NVvzmAQveg+tB/Dn1/C8BsH0NICjJJmmB3Bx6dmrY5SflE736jBqNa5NrTtxOAp6ggA8WJ378Wo+OLKxm1o249Hn5/B8Rn6su03Wlx2PIsYPDUgFJE7fUv3AcQXRnD8LHUE8ssK+FcODy4P4PhlylKm3W3kTs9aEb57Ccet+ojyvL3f6Oxy1c8Q6XFTTP09xGmP9qKvLQKjo9JC6TIXX1f0tNts/B5c/m9MnmzFwZarzmh6x350Vk3iPL07tDaT6/1KyzH9QUPbATFiP04yd+zH+4d+ja4dt4zBRXoq60nB+asZklJOjnI28podwZ88vh83L8/iBQ0o2iKY0hWJkVi/sd7PmUvoG6S09NmLvn+S6U+PwnqmpzGvlUKgp2lKgXyxWLOFxM0vzIR2/3QEc8k+1P7uH6z+6Qutf/oznuOfUf3WfoQ2RbHtNeqfSB1m6Z92Uf+klIJUBvjtp4hGooj+9l8wceUE7oGUw1E0xo7Cj4II1BqDn6Ot7dNbkw/xk2gWy9HP1IeYsI+yyHDEduIGEtbx3fPDn2ndYjPKXR7inpCHOvoID3VAziPJlybx5Sjw3Y8pPL57Nf3LNqOUAglN4JHh+lRmNXndml0AGJ1MADU7RZ8gQ4HJ62qGQF82dU2hNYjvKMfjuyNydpKWfi9aaCZznZQCfWYx9I3wzWrdF/lnRxN2V6Rw97Yzg3hwexaPK6hcjuxc9XNiel8VXn9vec5T2R4N+zItxufi60gq7OoWRmeBhgZnQb92Tw2S32gzrlzvl4+MDcU38wOSKMerNT4SUpQS5J81p6zfD6d9fpFViFQKNECj2awzxk/gUQoQ7etMSdIk0YhcHq1PawefWq5/HSkiQdpswRRjK5JkAj+JpKp/+sjqn+jht3iacsklMUb/NIhFuwZ6/3RFzB6M/mkT9U/viPJOJ16gnBREzwVU12eubCBmDIYJR5mGTN4+7miXwDHLPOQjuhHFv4c4Tw9u339tSPO+kS+tNAPJGI+9IxbwNIJXK4Btuw/gtDGUtzr/HdtBTvIeFSDZV5KaSmzDIv5HM2vJdFbHk/bcl9Q8IuWof05J1qiWRtEne7ENpqkHKFZ+zgJg9PokOg/RQOAWRrEXB3cvYlTM0HKnXR8xsn0/nPb548lekIswMmV+YHT+AM2IGpYm8Sdhu9WpaOnfTU9vmGiy9j9ZZgt6dp7X1D8dFQvWnsFZH+7ElgrZyYtOP3Y0Y+wnV45ID5MHjyISP295mHSZwgAEQjEU4kHOJKMpBdGw9/NUErk8xDm5pZu5aKp/EPiVEyf9ynrpXaYcow93Jar9W/JJ59fUI0dU4RnNZu6St6K3s4t4jBr8agcwaiiBFB45kwijCKJ+S7P4znha6E2J6j9zFe+fumqZWQ6g73tl9iiR/GzVm7mDu0uW6RE7EdZmf9mSrY8w5/vRd/YWXniaKwHMXMUHVvv88dABHLfbR1KgGdFoQy/+tfsH9A2SHNcnLf1ZnB59IUfbI7TGSOYa5cHSw16fY7bgyk27pf7piFQKdv+Uj5L4Fk+XXgBiF5RHubScspvBnIiBMiXlNNc49XJdOSP++SnaL+PcuyJmuFXe24BMHuL8mLkyCCd7lBjRT04qU468d8d3TAk0YjRNQ+645v0shmdS2La71TA92XFEp1OO3XssuwGNjI2FcIpJNuDewn7b4JZPNvk9Ndi2ROWyS6GZSqz6zdzRFqeLyB856u8UQVzRekG3bkLZsRctmskLwsyiJ/Ijv5jyU17SvNfQsB9d+yoNs5xekszXxebvSE7j4wRlucqVv1Su3gKc74fszF3fD4/2mU/r9aXk0cFLGK5qRX/3Xmch2yO91w7T7OaYYmYLzoh/forWJXZiS3lmM086I71/6sDWTelpfZnBNMGBmDFo5RWX0lxDuwIuIBq/AOCaO4rrfghzwzGE4lGE4hfk9CkxDUSiEC5KI7lH3qSU5AJzFNEeylN9pvHd+Hb8Ilbm8vamwv38vYX+6ztx2t6RkcDg9QS62w7g9M9pZ4iUMYmdOE1b+uhDO0a0hWn5MPP/tLj5MXrw3sledNvR1M6OWQxdnsT7hyxTE+0Yup7Ae/vsiEVe0FR9BH0nNVNW2q6kFIZ/LLx+uQqYvf638OXdX+M9iz+ZIQZnD6DTFrodnYd0bpYpSTNJZJdvCyruYvRbTLa1Ik5trynU4oT6SZ2Ljx8ZueJIxddvfwd0c5D8fjhhzvej/+cj6Lvu3T4faO3j5C7fxVffbUX/yZ1yVxK2o8OjfT8YfZE+qwAgzTHWrqT4eQBHMAf5uwVnJ5KTY+6rLzA33IhQ/JcIKfOO3T8dRaOv/ukd3APNaKKIvkVlUh+9f8o+m1Ap6C8fu63TWLPXNNoKyh5vOe3f/bLMVmu2Df0WjPn5JbV24qn1gf9D4qt3AvmDNjfLQJmS3IXn+7VIQE7zk99nWDxYi0VeU2VifmuqOfwUpuC1BT/CX06cQJqSXg4qzjUzATmjsX+8RqYOz2l8ZgkbO4T5Bbr9pz7CxDpz9cumpEC/kVx4JsAEmEDpCbApqfRMWSITYAJMINAEWDEEuvm48EyACTCB0hNgxVB6piyRCTABJhBoAqwYAt18XHgmwASYQOkJ8K4kwbQL1T3tCBl8neO2jcfr5kYdE7KMxFd9WEgWU7GNyK8YXpyWCaxtAqwYRPsMYW5gCOL0bU+/DWukES2fAMYpmIUWrb5THCiYGv+sSKVABQgIv0JZcTomsMEIsGIIQIPLs/7LgdkEJktSXudcl8XxsZJIZCFMgAmsHwKBVgzqJNP/fbiMv/m7Msdbm9U+Klz4aMAf0Bgnd3v6x6+5yDGVKH8PSrbulMc4Hlxk49PDm14kj2s6h0c6waEfQule3jwia49UGVWZ7SBrtiDPddE807mOFDbSB5ifXW++YAJMwBeBQC4+U4clHWZID27f/9cNzFN1hbc2q97hE9hGfejSHSTVrxLJg9vAYUwMXJPxIT24+SKVI5KjFEgZHMa0cHUgPbyJA/jGl+WBfT0XUNvanENaccFuPnOq/kKsM1tI3JSemZ+PML/iiHNqJrC+CARqxuB0vnCdZDqExUQ7QpEyVMaasTAyhs2xOpD30/nbn+A5tRl5cLM7SMe/QmmaU/eg9DWeiPzk6a3Kw9uTkT5MjFgnwlouQNNG8kUWJjMfTbBrtiBDmJ9GiC+ZwIYnEAjFoHd4cJk7VAs+uXkHKfLxXPs6NqMO4ViZcIa9aCsDtQtHpSjlX8e/gzjGO3Yso3BPD2/Dh1H3GjknN5PR8c/kgjDXxw8fKSN9tqBkB52fOStSteK/TIAJFEIgEIrBlwe35A0sLjWhvKIO5a1VYutpatwavZODbuXW0/aQVKibTy/MzgxEX3Pwiqns9hSmzxjmps7Y/pi90mV75osPCfCcLViSA84vGx8OYwJMID8CgVpjEB2gZb8XI3Ph0FpVeAwLt6cBlCESo0XmZTg7bpwRfWEe3FQe8i+N0KPGGrDuQakTW83o4o7SqHURUh4TA4dR6lFudj6ZZwuyuMzPo9n4ERPYkAQCfbqqGn07I29n91Caycn1+4T5xDRCEWuXkm6esuOZO5YMc83SHSSWmhCJmGsdRhz7ddI9KJ3Dg5H8t4fa21VtmdZFmhc0M4LBR+0q0utqRgewPvmlVZMfMAEmkJVAoBVD1ppxoEZAmdJK8StnTSxfMgEmsC4JBMqUtC5bYDUqlW1tYTXy5zyYABMIFAGeMQSqubiwTIAJMIGVJ8AzhpVnzDkwASbABAJFgBVDoJqLC8sEmAATWHkCrBhWnjHnwASYABMIFAFWDIFqLi4sE2ACTGDlCbBiWHnGnAMTYAJMIFAEVlAx0N55OgW1H1XhQDHhwjIBJsAENjSBlVMM1t750ngI29BtxJVnAkyACawqgRU6RM85l8c5r2hV67UCmTnHRThHcKxANiySCTABJvCSCRSlGIyzeOzjrb1O8bQ61cQ05iNRcfKprLc6j0iF30Giokn4Ipbh+hEOTsdsMyPHOxfJ34JKn0m+TJF+lpGf/D8DfmOexBqKX0AoLmXOD5/D0z0y3K0wFB8sPwPKfubyIWHXgi+YABNgAmuKQEGmJOrw1Emh7s4QdMT1Hnm6qfIQZtdYKIV0D2dOOCkFUgbnkFiyn0LIfLPdOkpbnkx6b3wZqGjCrjdPYLOKmkW+oxTyzX8MCxd1r2/yuGw6HVWekKpOJQVCe7SyKA9yWEbiL78HlVedCLvSHtwUDv7LBJgAEyiEQF4zBqdzNU8VNTLOcS7P/PCHHh7Oxm0R88N9WEgCuDiGBfU0/DoqK+jGOUr7+fh9pGKW/4XwQxUT3vKb8UotOe6hcnt5WMuRvy09w8XU10iIWUMTwvUQx2krD3LKrzJWwYNbhtLxYybABJhAXgR8KQZdIaQdZ21kl2W2YMTL8yZcJdx0Aj/gJ1IaxqcMW3LuenL8MeTysGaI9n1Ds4ZOROJRMWtITj20PMgtwz1ryuTBrdS+GXwXnSMyASbABFwEfCmGkngIc2W8uXq760mW2+QCUgDKsR2vhIEnhnJYxtMksMWV3JSfy8NaFypd6fO+tWcNdQh31Ml1lMQNOfvRhNnrDi4PbloUvmQCTIAJvFQCea0xFOchTNYzVN8lHMJIn8yaaScbBuF2kiKUoTLWLGLappql+0hpisJbfm4Pa9myl2GWcskYUeVRhlCEzFbmbIFmXWpdZqU8uGUsGgcwASbABPIg4GvG4JYnzSGAGP3GLwA4jDl0yt1EHqNkI32kHY091pPENcujWZ0RJf2GFoDrsKWnHaHYMTTGjsko2q4kO42nfICU2j30Y1csimgPlVl9aDHaWWNQT9P/auYibVeS7uP5+cgNzMfkIrm9tgBAmeL0uOny+QkTYAJMYG0QKJE/hlwewtRWU337aSkBrLR8v2VV5ZA7l3jdwC83jscEmMBaIpCXKSljwXPsRMqYbp0FbO2wZgtLd5DUf9exzurJ1WECTGB9EyjIlJSGZOpDTGzgjlBfUAamMS1+dJdGiR8wASbABAJBoESmpEDUlQvJBJgAE2ACPgiUxpTkIyOOwgSYABNgAsEgwIohGO3EpWQCTIAJrBqB/wdNPk/65DRSSwAAAABJRU5ErkJggg==" alt="" />

2) 设置mapred.child.java.opts參数

使用Ganglia、Nagios等监控工具检測slave节点的内存使用情况,设置合适的mapred.child.java.opts 參数。避免交换的发生;

3)map的输出使用压缩

当map的输出较多时,能够考虑使用压缩,这能提高非常大的性能(图片来自:http://www.idryman.org/blog/2014/03/05/hadoop-performance-tuning-best-practices/):

aaarticlea/png;base64,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" width="452" height="200" alt="" />

4)使用合适的Writable作为key(键)和value(值)类型

这一点在mapper和reducer的编程中都能够使用,假设全部数据都使用Text的话,那么数据的占有空间将会非常大,导致效率低下。假设有必要能够自己定义Writable类型。

5)重用已有变量

在mapper或者reducer的编程中重用已经定义的变量,能够避免反复的生成新对象,而导致垃圾回收频繁的调用,例如以下代码1和2(代码參考:http://blog.cloudera.com/blog/2009/12/7-tips-for-improving-mapreduce-performance/);

public void map(...) {
...
for (String word : words) {
output.collect(new Text(word), new IntWritable(1));
}
}

class MyMapper ... {
 Text wordText = new Text();
IntWritable one = new IntWritable(1);
public void map(...) {
...
for (String word : words) {
wordText.set(word);
output.collect(word, one);
}
}
}

6) 设置mapreduce.reduce.shuffle.parallelcopies參数

设置此參数,能够使 Reducer在一个Mapper完毕后就開始获取数据,并行化数据获取;

7) 最小化mapper输出:

a.      在Mapper端过滤,而不是在Reducer端过滤;

b.      使用更小的数据来存储map输出的key和value(參考第4)点);

c.      设置Mapper的输出进行压缩(參考第3)点)。

3. reduce阶段

Reducer负载均衡:

1) Reducer的个数。依据实际集群的数量来设置Reducer的个数。使其负载均衡。

比方集群有100个节点。那么Reducer的个数设置为101个则应该是不合理的。在第一次任务分配时分配了100个作业。这100个作业是并行的。可是最后一个作业并非并行的。

2)Reducer中部分由于同样key的数据量大,导致个别Reducer执行耗时相比其它Reducer耗时长非常多。

能够考虑:

a.      实现一个更好的hash函数继承自Partitioner类;

b.      假设知道有大量同样的key的数据。能够写一个预处理的作业把同样的key分到不同的输出中,然后再使用一个MR作业来处理这个特殊的key的数据;

4. 设置输入输出

假设有多个连续的MR作业,能够设置输入输出为序列文件,这样能够达到更好的性能。

个人整理,如有错误,敬请不吝赐教。

分享,成长,快乐

脚踏实地,专注

转载请注明blog地址:http://blog.csdn.net/fansy1990