catap.ru_blog_atom.xml - sfeed_tests - sfeed tests and RSS and Atom files
(HTM) git clone git://git.codemadness.org/sfeed_tests
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
catap.ru_blog_atom.xml (10526B)
---
1 <?xml version="1.0" encoding="utf-8"?>
2 <feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>http://catap.ru/blog/</id><title>catap's blog</title><updated>2013-12-29T22:15:54Z</updated><link href="http://catap.ru/blog/" rel="alternate"></link><link href="http://catap.ru/feeds/atom/blog/" rel="self"></link><author><name>Kirill A. Korinskiy</name></author><generator version="r33" uri="http://code.google.com/p/django-atompub/">django-atompub</generator><entry><id>http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/</id><title type="html">Сортированные значения для reducer </title><updated>2013-12-29T22:15:54Z</updated><published>2013-11-27T15:36:52Z</published><category term="hadoop"></category><category term="map reduce"></category><category term="tech"></category><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="self"></link><link href="http://catap.ru/blog/2013/11/27/sortirovannye-znacheniya-dlya-reducer/" rel="alternate"></link><content type="html"><p>Коллеги,</p>
3
4 <p>Есть хитрость, которая позволяет упростить логику reducer если подавать ему сразу отсортированные значения. Код который это делает: <a href="https://gist.github.com/catap/3aabd33b86c0fc5620aa">https://gist.github.com/catap/3aabd33b86c0fc5620aa</a></p>
5
6 <!--more-->
7
8 <p>Немного footnote по&nbsp;коду.</p>
9
10 <p>В <a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapred/MapTask.java#L1116">Comparator</a>/<a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/ReduceContext.java#L121">Grouping</a> внятным образом получить доступ к value нельзя, приходиться делать составной ключ, который будет включать в&nbsp;себя:</p>
11
12 <ul>
13 <li>ключ по которому будут&nbsp;группировать.</li>
14 <li>значения, или их часть, которые будут использоваться для&nbsp;сортировки.</li>
15 </ul>
16
17 <p>Соотвествено:</p>
18
19 <ul>
20 <li>Grouping сравниваются&nbsp;ключи.</li>
21 <li>Comparator сравниваются ключи и если они совпали, идет логика&nbsp;сортировки.</li>
22 </ul>
23
24 <p>Вроде все прекрасно и все танцуют, но, в hadoop по умолчанию Partitioner использует <a href="https://github.com/apache/hadoop-common/blob/release-1.2.1/src/mapred/org/apache/hadoop/mapreduce/lib/partition/HashPartitioner.java#L29">hashCode</a> для балансировки ключей по partition. Соответственно, либо реализуем свой hashCode, либо свой Partitioner, иначе будет интересная отладка&nbsp;:)</p>
25 </content></entry><entry><id>http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/</id><title type="html">over 1M open sockets at linux node</title><updated>2011-12-19T03:17:18Z</updated><published>2011-12-19T02:42:33Z</published><category term="limits"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="self"></link><link href="http://catap.ru/blog/2011/12/19/over-1m-open-sockets-linux-node/" rel="alternate"></link><content type="html"><p>С появлением всяких <a href="http://en.wikipedia.org/wiki/Comet_(programming%29">commet</a> соединений обычным делом стали сотни тысяч соединений на одном&nbsp;тазике.</p>
26
27 <!--more-->
28
29 <p>Но иногда хочется большего. Хочется перешагнуть за миллион. И так, шпаргалка по настройки системы для 10и миллионов&nbsp;соединений:</p>
30
31 <ul>
32 <li><p><strong>/etc/security/limits.conf</strong>:</p>
33
34 <p>services soft nofile&nbsp;10000000</p>
35
36 <p>services hard nofile&nbsp;10000000</p></li>
37 <li><p><strong>/etc/sysctl.conf</strong>:</p>
38
39 <p>net.core.somaxconn =&nbsp;100000</p>
40
41 <p>net.nf_conntrack_max =&nbsp;268435456 </p>
42
43 <p>net.core.rmem_max =&nbsp;65536</p>
44
45 <p>net.core.wmem_max =&nbsp;65536</p>
46
47 <p>net.ipv4.tcp_wmem = 4096 16384&nbsp;65536 </p>
48
49 <p>net.ipv4.tcp_rmem = 4096 16384&nbsp;65536 </p>
50
51 <p>fs.nr_open =&nbsp;10485760</p></li>
52 </ul>
53
54 <p>Да, на сервере должно быть много памяти&nbsp;:)</p>
55 </content></entry><entry><id>http://catap.ru/blog/2011/06/15/linux-time-interval/</id><title type="html">временной интервал в linux</title><updated>2011-06-15T00:20:29Z</updated><published>2011-06-15T00:13:02Z</published><category term="clock_gettime"></category><category term="clock_monotonic"></category><category term="clock_monotonic_raw"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="self"></link><link href="http://catap.ru/blog/2011/06/15/linux-time-interval/" rel="alternate"></link><content type="html"><p>Задали вопрос: как понять, сколько прошло времени в&nbsp;linux?</p>
56
57 <!--more-->
58
59 <p>Первый ответ, который приходит на ум это&nbsp;взять:</p>
60
61 <pre><code>gettimeofday(&amp;time1, NULL)
62 sleep(5);
63 gettimeofday(&amp;time2, NULL)
64 </code></pre>
65
66 <p>и вычесть time1 из time2. Плох этот вариант тем, что время будет не предсказуемое ибо оно может смениться в следствии ntpdate, которая резко переводит время. Есть еще ntpd, который просто корректирует длину&nbsp;секунды.</p>
67
68 <p>Второй вариант&nbsp;это:</p>
69
70 <pre><code>clock_gettime(CLOCK_MONOTONIC, &amp;time1);
71 sleep(5);
72 clock_gettime(CLOCK_MONOTONIC, &amp;time2);
73 </code></pre>
74
75 <p>лучше. ntpdate уже не страшен, время привязано к uptime, но от ntpd не спасет. Опять же, на точность влияет <a href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/">kernel.vsyscall64</a>.</p>
76
77 <p>И самый верный вариант (но доступный с ядер 2.6.28)&nbsp;это:</p>
78
79 <pre><code>clock_gettime(CLOCK_MONOTONIC_RAW, &amp;time1);
80 sleep(5);
81 clock_gettime(CLOCK_MONOTONIC_RAW, &amp;time2);
82 </code></pre>
83 </content></entry><entry><id>http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/</id><title type="html">gettimeofday без syscall</title><updated>2011-05-22T03:12:39Z</updated><published>2011-05-22T02:16:00Z</published><category term="gettimeofday"></category><category term="linux"></category><category term="tech"></category><category term="tips"></category><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="self"></link><link href="http://catap.ru/blog/2011/05/22/gettimeofday-without-syscall/" rel="alternate"></link><content type="html"><p>Тут случайно узнал что gettimeofday может не стоить syscall.&nbsp;Делюсь.</p>
84
85 <!--more-->
86
87 <p>На amd64 есть системная ручка <code>/proc/sys/kernel/vsyscall64</code>, она может принимать три&nbsp;значения:</p>
88
89 <ul>
90 <li>0 &#8212; делаем syscall и получаем с точностью до&nbsp;μs;</li>
91 <li>1 &#8212; по прежнему получаем μs, но где-то рядом, зато без context switch и прочих syscall&nbsp;особенностей;</li>
92 <li>2 &#8212; временные интервалы уже в ms, накладные расходов почти&nbsp;нет.</li>
93 </ul>
94 </content></entry><entry><id>http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/</id><title type="html">flash64: memcpy patch for 10.3.162.29</title><updated>2010-12-10T16:14:09Z</updated><published>2010-12-10T16:07:29Z</published><category term="linux"></category><category term="patch"></category><category term="tech"></category><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="self"></link><link href="http://catap.ru/blog/2010/12/10/flash64-memcpy-patch-10316229/" rel="alternate"></link><content type="html"><p>Мой <a href="http://catap.ru/blog/2010/11/26/flash-memcpy-patch/">патчик</a> пользуется популярность. И люди попросили сделать для новой версии. <a href="http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff">Патч на версию 10.3.162.29</a>. Накладывать используя&nbsp;bspatch.</p>
95
96 <!--more-->
97
98 <p>Например&nbsp;так:</p>
99
100 <pre><code>wget http://catap.ru/patches/flash64/memcpy-10.3.162.29.bsdiff
101 sudo cp /usr/lib64/flash-plugin/libflashplayer.so /usr/lib64/flash-plugin/libflashplayer.so.old
102 sudo bspatch /usr/lib64/flash-plugin/libflashplayer.so.old /usr/lib64/flash-plugin/libflashplayer.so ./memcpy-10.3.162.29.bsdiff
103 </code></pre>
104
105 <p>рестарт браузера и можно радоваться&nbsp;жизни.</p>
106