-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
2262 lines (1963 loc) · 424 KB
/
Copy pathatom.xml
File metadata and controls
2262 lines (1963 loc) · 424 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Guinguo's blog</title>
<subtitle>Just try it</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://www.guinguo.top/"/>
<updated>2018-12-18T15:48:13.505Z</updated>
<id>http://www.guinguo.top/</id>
<author>
<name>guinguo</name>
<email>guinguo@yahoo.com</email>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>2018年12月杂谈</title>
<link href="http://www.guinguo.top/2018/12/18/2018%E5%B9%B412%E6%9C%88%E6%9D%82%E8%B0%88/"/>
<id>http://www.guinguo.top/2018/12/18/2018年12月杂谈/</id>
<published>2018-12-18T14:42:35.000Z</published>
<updated>2018-12-18T15:48:13.505Z</updated>
<content type="html"><h2 id="12月杂谈"><a href="#12月杂谈" class="headerlink" title="12月杂谈"></a>12月杂谈</h2><p>不知不觉入职快一年了,实习期间因为要做毕设,毕设后又去了旅游,然后毕业,正式入职,都没时间闲下来记录生活,工作。<br>从哪个时间点说起好呢?<br>上一篇博客是17年8月的,再上一篇就是16年8月的,这一篇是18年12月的,真是一年一篇…<del>(捂脸</del></p>
<h4 id="说点什么"><a href="#说点什么" class="headerlink" title="说点什么"></a>说点什么</h4><p> 当初写博客为了记录自己的学习过程,以便之后需要翻看,写完后确实有翻看,而且翻看不少次,像做毕业设计用到的BHasee,就返回来看我写的Hbase Shell操作的博客。 </p>
<p> 什么时候开始没有写呢?16年8月,刚好是我结束大二的时候,那会应该是回家考驾照了,刚好有空记录一些学习笔记,然后就是大三,第一学期很忙,专业课有点多,加之工作室的任务也不少,所以就没时间碰这个blog了。<br>然后大三下,复习,要找实习,2017年6月1号,顺利到网易实习,做的内容前端多一些,也有后端的内容。哪会就学了前端的一些技术,像react,redux等,还有认识了部门的一些同事,对我之后的影响还是挺大的。</p>
<p> 上一篇blog是结束大三暑假时写的,可以说是为了校招写的,毕竟太久没更新也不好意思拿出来给人看233。校招那会想找大数据的岗位,Java其次。<br>因为校招开始的比较早,那会还在实习,准备补充分<del>(其实是能力不行…)</del>,面了好几家,效果都不理想,笔试也做了一大堆,每次都石沉大海。心灰意冷的我就跑去参加宣讲会,现场面试等,<br>最后只拿到一个大数据的offer,深圳的一家公司,给的待遇很是白菜。。。但是总比没有好,所以那它当保底,继续找其他的。</p>
<p> 时间点应该是17年10月份左右,那会几乎天天跑图书馆复习,笔试面试,顺带看了一部分金庸古龙的武侠小说<del>(真香)</del>, 之前投了网易一个大数据岗,面挂了,问的全是逻辑题,醉了,你是要招柯南去破案呐??<br>刚好遇到现在部门的校招补招,试了下就面过了,虽然是写python+angular的,但起码待遇比之前的好,最后考虑了下还是接受了。然后校招就结束了~</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">#以下todo</span><br></pre></td></tr></table></figure>
<h4 id="去年今日"><a href="#去年今日" class="headerlink" title="去年今日"></a>去年今日</h4><p> 羽超联赛之游遍大江南北</p>
<h4 id="我的毕设"><a href="#我的毕设" class="headerlink" title="我的毕设"></a>我的毕设</h4><p> 基于大数据的微博数据分析系统</p>
<h4 id="正式入职"><a href="#正式入职" class="headerlink" title="正式入职"></a>正式入职</h4><p> 运维开发工程师</p>
<h4 id="慢慢成长"><a href="#慢慢成长" class="headerlink" title="慢慢成长"></a>慢慢成长</h4><p> python, angular, golang</p>
<h4 id="未来期望"><a href="#未来期望" class="headerlink" title="未来期望"></a>未来期望</h4><p> gf? no 当然是技术啦</p>
</content>
<summary type="html">
随便写点什么
</summary>
<category term="blog" scheme="http://www.guinguo.top/categories/blog/"/>
<category term="blog" scheme="http://www.guinguo.top/tags/blog/"/>
</entry>
<entry>
<title>CDH5 HBase 参数调优</title>
<link href="http://www.guinguo.top/2017/08/07/CDH5-HBase-%E5%8F%82%E6%95%B0%E8%B0%83%E4%BC%98/"/>
<id>http://www.guinguo.top/2017/08/07/CDH5-HBase-参数调优/</id>
<published>2017-08-07T15:44:22.000Z</published>
<updated>2017-08-07T16:28:39.752Z</updated>
<content type="html"><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>在CDH中使用HBase是很方便的,直接添加服务就可以了。<br>下面记录一些日常遇到的问题以及参数的一些调整</p>
<h3 id="1-日志记录等级"><a href="#1-日志记录等级" class="headerlink" title="1.日志记录等级"></a>1.日志记录等级</h3><p>在cdh中,每个服务都会有log记录的,默认是INFO级别,即什么信息都记录下来,这有有个优点就是<br>如果遇到什么问题,查log就可以很快定位到出错的地方,并解决它。<br>但是也有一个缺点,就是正常运行,不过log越来越大,占用着磁盘空间。(如果不在乎磁盘容量的可以忽略)</p>
<p><strong>调整</strong><br>把log文件减少数量到3(默认10),调节日志级别为WARN,调整单个日志大小为100M(默认是200M)<br>这样,log占用的磁盘容量最多也就300M,而且记录WARN级别以上的信息,忽略INFO的大量日志信息。</p>
<p>具体操作:在HBase界面的配置中查找log,把各个【记录阈值】切换为WARN,几个服务的【最大日志大小】跟【最大日志文件备份】相应改过来,保存重启即可。<br><del>PS:这个调整适用于其他服务,如果需要的话</del></p>
<h3 id="2-手动compact与spilt"><a href="#2-手动compact与spilt" class="headerlink" title="2.手动compact与spilt"></a>2.手动compact与spilt</h3><p>compact:<br>Hbase为了防止小文件(被刷到磁盘的menstore)过多,以保证保证查询效率,hbase需要在必要 的时候将这些小的store file合并成相对较大的store file,这个过程就称之为compaction,主要有:minor compaction和major compaction</p>
<ul>
<li>major_compact:是将所有的store file合并成一个</li>
<li>minor_compact:是合并一部分store file,具体有以下几个参数合作完成:<pre><code>hbase.hstore.compaction.min :默认值为 3,表示至少需要三个满足条件的store file时,minor compaction才会启动
hbase.hstore.compaction.max 默认值为10,表示一次minor compaction中最多选取10个store file
hbase.hstore.compaction.min.size 表示文件大小小于该值的store file 一定会加入到minor compaction的store file中
hbase.hstore.compaction.max.size 表示文件大小大于该值的store file 一定会被minor compaction排除
hbase.hstore.compaction.ratio 将store file 按照文件年龄排序(older to younger),minor compaction总是从older store file开始选择,如果该文件的size 小于它后面hbase.hstore.compaction.max 个store file size 之和乘以 该ratio,则该store file 也将加入到minor compaction 中。
</code></pre></li>
</ul>
<p>通常生产环境会关闭自动major_compact,因为当进行major_compact时,HBase的RegionServer暂时无法提供服务,造成region下线,无法写入数据的问题,我之前就遇到过,程序写入hbase写着就报错了,查log才发现。<br>可以选择一个空闲时间进行手动major_compact</p>
<p><strong>调整</strong><br>搜索:hbase.hregion.majorcompaction 改成0 表示不进行最大化压缩,默认是7天一次<br>然后自己找个空闲时间执行major_compact,shell命令是 major_compact tablename</p>
<p>spilt:<br>HBase会在region量达到一定程度时,自己进行 split。什么时候自动进行split呢,这是根据Split Policy来决定的,0.94之前是一个定值 (ConstantSizeRegionSplitPolicy),之后改成根据一个公式(IncreasingToUpperBoundRegionSplitPolicy) 来计算是否要split</p>
<p>一般我是在建表的时候预估数据量的大小,进行与分区,就不会造成自动spilt了</p>
<pre><code>hbase org.apache.hadoop.hbase.util.RegionSplitter -c 100 -f basic:other &apos;user&apos; HexStringSplit
</code></pre><p>建立user表,预先创建100个分区,有两个columnfamily basic跟other,多的用|分隔加在后面,使用十六进制字符串分隔,如果是以十六进制字符串作为行键rowkey或者行键rowkey的前缀是十六进制字符串,用HexStringSplit就比较合适;UniformSplit会把行键均匀地分割多个部分,如果行将rowkey是随机的字节数组,用UniformSplit就比较合适;</p>
<p>手动spilt命令:split ‘regionName’, ‘splitKey’</p>
<h3 id="3-JVM内存"><a href="#3-JVM内存" class="headerlink" title="3.JVM内存"></a>3.JVM内存</h3><p>搜索 【Java 堆栈大小】 根据自己的环境进行调节,我这边一开始没怎么用,所以给少了,后来发现regionserver挂了,查log才发现是OOM,所以给到1G的jvm内存,之前给256M的. </p>
<p>暂时先记这么多,之后遇到其他的再补充,如果有什么错误的地方,欢迎提出来一起讨论学习。</p>
</content>
<summary type="html">
CDH5中HBase的性能调优
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
<category term="HBase调优" scheme="http://www.guinguo.top/tags/HBase%E8%B0%83%E4%BC%98/"/>
</entry>
<entry>
<title>Kafka Use</title>
<link href="http://www.guinguo.top/2016/09/13/Kafka-Use/"/>
<id>http://www.guinguo.top/2016/09/13/Kafka-Use/</id>
<published>2016-09-13T03:03:55.000Z</published>
<updated>2016-09-14T16:47:59.185Z</updated>
<content type="html"><h2 id="Kafka简介"><a href="#Kafka简介" class="headerlink" title="Kafka简介"></a>Kafka简介</h2><p> Kafka是一个高吞吐量的分布式消息订阅发布系统,它采用独特的设计提供消息传递系统的功能。</p>
<p><strong>术语</strong></p>
<ul>
<li><strong>topic</strong> Kafka维护的消息流称为topic</li>
</ul>
<blockquote>
<pre><code>物理上不同的topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上,
但用户只需指定消息的topic即可生产或者消费数据而不必担心数据存于何处
</code></pre></blockquote>
<ul>
<li><strong>producer</strong> 消息发布者称为producer</li>
<li><strong>consumer</strong> 订阅并消费消息的称为consumer</li>
<li><strong>broker</strong> Kafka集群中的每个节点称为broker</li>
<li><strong>partition</strong> 物理概念,每个topic包含一个或者多个partition</li>
</ul>
<p><img src="http://kafka.apache.org/images/producer_consumer.png" alt="Kafka"></p>
<h2 id="下载解压"><a href="#下载解压" class="headerlink" title="下载解压"></a>下载解压</h2><blockquote>
<pre><code>wget http://archive.apache.org/dist/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz
tar -zxvf kafka_2.11-0.10.0.0.tgz
mv kafka_2.11-0.10.0.0 kafka
</code></pre></blockquote>
<h2 id="配置分发"><a href="#配置分发" class="headerlink" title="配置分发"></a>配置分发</h2><p>kafka自带zookeeper,但是我们使用我们自己的,找到zookeeper.connect 这一配置项,修改</p>
<blockquote>
<pre><code>cd kafka/config
vi server.properties
zookeeper.connect=server1:2181,server2:2181,server3:2181
</code></pre></blockquote>
<p>创建一个启动脚本用于启动Kafka</p>
<blockquote>
<pre><code>vi kafka/start.sh
nohup bin/kafka-server-start.sh config/server.properties &gt; kafka.log 2&gt;&amp;1 &amp;
:wq
chmod +x kafka/start.sh
</code></pre></blockquote>
<p>复制到其他节点</p>
<blockquote>
<pre><code>scp -r kafka server2:~/
scp -r kafka server3:~/
</code></pre></blockquote>
<h2 id="启动测试"><a href="#启动测试" class="headerlink" title="启动测试"></a>启动测试</h2><ol>
<li><p>首先启动zookeeper</p>
<blockquote>
<pre><code>zkServer.sh start
</code></pre></blockquote>
</li>
<li><p>再启动Kafka</p>
<blockquote>
<pre><code>./kafka/start.sh
</code></pre></blockquote>
</li>
<li><p>使用jps命令查看</p>
<blockquote>
<p> [hadoop@server1 ~]$ jps<br> 19114 JournalNode<br> 19979 Jps<br> 18400 JobHistoryServer<br> 18479 ResourceManager<br> 18331 DFSZKFailoverController<br> 18277 QuorumPeerMain<br> 11797 NameNode<br> 12485 Kafka</p>
</blockquote>
<p> 可以看到已经启动了</p>
</li>
<li><p>创建topic</p>
<blockquote>
<pre><code>[hadoop@server3 ~]$ cd kafka
[hadoop@server3 ~]$ bin/kafka-topics.sh --zookeeper server1:2181 --create --topic test-kafka --replication-factor 2 --partitions 2
Created topic &quot;test-kafka&quot;.
</code></pre></blockquote>
<p> 这条命令指定了zookeeper节点为server1(随便指定一个都行,因为zk是一个集群) 创建一个名为test-kafka的topic,副本数为2</p>
<p> 可以查看zk上面是否已经有了这个topic</p>
<blockquote>
<pre><code>[hadoop@server3 kafka]$ bin/kafka-topics.sh --zookeeper server1:2181 --list
test-kafka
</code></pre></blockquote>
</li>
<li><p>查看topic描述</p>
<blockquote>
<pre><code>[hadoop@server3 kafka]$ bin/kafka-topics.sh --zookeeper server1:2181 --describe --topic test-kafka
Topic:test-kafka PartitionCount:2 ReplicationFactor:2 Configs:
Topic: test-kafka Partition: 0 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: test-kafka Partition: 1 Leader: 3 Replicas: 3,1 Isr: 3,1
[hadoop@server3 kafka]$
</code></pre></blockquote>
<p> 可以看到test-kafka 有两个partition, partition 0 上 存在Leader 2 (Broker2),因为副本数为2,所以Broker3也存了一份,<br> 这个Leader表示,我在Broker2这个节点找不到就到Broker3那里去找,提高了可靠性,不会因为某台机子宕掉了而停止工作</p>
</li>
<li><p>启动消费者与生产者</p>
<p> server2为生产者,server3消费者–zookeeper 后面跟zk集群中某一台机子就行</p>
<blockquote>
<pre><code>[hadoop@server2 kafka]$ bin/kafka-console-producer.sh --broker-list server3:9092 --topic test-kafka
test kafka
hello I&apos;m guin_guo
[hadoop@server3 kafka]$ bin/kafka-console-consumer.sh --zookeeper server1:2181 --topic test-kafka
test kafka
hello I&apos;m guin_guo
</code></pre></blockquote>
</li>
</ol>
<p>在server2上输入(生产)内容,server3就显示(消费)出来了</p>
<h2 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档"></a>参考文档</h2><p><a href="http://kafka.apache.org/documentation.html" target="_blank" rel="external">http://kafka.apache.org/documentation.html</a></p>
</content>
<summary type="html">
Kafka集群的安装
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
<category term="kafka" scheme="http://www.guinguo.top/tags/kafka/"/>
</entry>
<entry>
<title>Flume Use</title>
<link href="http://www.guinguo.top/2016/08/29/Flume-Use/"/>
<id>http://www.guinguo.top/2016/08/29/Flume-Use/</id>
<published>2016-08-29T09:45:13.000Z</published>
<updated>2016-09-12T05:02:06.577Z</updated>
<content type="html"><p> Apache Flume是一个分布式,可靠性,可用性的系统,可以有效地从不同的数据源收集,整合,和移动大量日志数据到其他的存储(HDFS,HBase etc…)<br>flume其实没有集群概念,每个flume都是一个独立的个体,每个flume agent收集数据汇总到flume collector,由collector写入flume storage。<br><img src="http://flume.apache.org/_images/UserGuide_image00.png" alt=""></p>
<p> Flume event是一个有效字节数据单元和一组可选的字符串属性组成.Flume agent是一个JVM进程,控制组件事件流从外部流向目的地.Flume消费外部源传送给它的数据,像web server。外部数据源以Flume Source认可的形式传递给flume,例如,Avro Flume 源可以用来从Avro客户端或者从Flume代理的Avro 槽(sink) 流出的事件流接收Avro事件。类似的流可以使用第一Thrift Sink或者一个Flume Thrift Rpc 客户端,或者用任意语言编写的遵循Thrift协议栈的Thrift客户端。<br> 当一个Sink 源接收到一个事件时,它可以存储到一个或者多个渠道(channel)。channel是存储事件直到事件被sink消费。文件渠道(channel),就是一种,它支持本地文件系统,Sink 从channel移除一个事件并把它放到外部仓库像HDFS(通过Flume HDFS sink),或者直接(转发)流向下一个数据源被其使用。指定agent中的source和sink 在channel上进行异步事件处理</p>
<p><hr>以上翻译自flume官网,措辞不对请见谅!</p>
<hr>
<h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><p> server1作为collector,server2 作为agent。实现agent连接collector然后想collector发送日志,最终collector将日志写到HDFS。</p>
<h2 id="系统要求"><a href="#系统要求" class="headerlink" title="系统要求"></a>系统要求</h2><ol>
<li>jdk 大于1.6,最好是1.7</li>
<li>内存 足够的内存配置以使用source,channels,sinks</li>
<li>磁盘空间 足够的磁盘空间使用source,channels,sinks</li>
<li>目录权限 agent可以直接读写响应目录</li>
</ol>
<h2 id="下载安装"><a href="#下载安装" class="headerlink" title="下载安装"></a>下载安装</h2><pre><code>[hadoop@server1 ~]$ wget http://www-us.apache.org/dist/flume/stable/apache-flume-1.6.0-bin.tar.gz
[hadoop@server1 ~]$ tar -zxvf apache-flume-1.6.0-bin.tar.gz
[hadoop@server1 ~]$ mv apache-flume-1.6.0-bin flume-1.6.0
</code></pre><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><h3 id="jdk环境变量"><a href="#jdk环境变量" class="headerlink" title="jdk环境变量"></a>jdk环境变量</h3><pre><code>[hadoop@server1 ~]$ mv flume-1.6.0/conf/flume-env.sh.template flume-1.6.0/conf/flume-env.sh
[hadoop@server1 ~]$ vi flume-1.6.0/conf/flume-env.sh
#把jdk目录填上去
</code></pre><blockquote>
<p>复制到server2</p>
</blockquote>
<pre><code>[hadoop@server1 ~]$ scp -r flume-1.6.0/ hadoop@server2:~/
</code></pre><h3 id="agent启动文件"><a href="#agent启动文件" class="headerlink" title="agent启动文件"></a>agent启动文件</h3><p>在server1节点,conf目录下,将flume-conf.properties.template 重命名一份出来<br>用于启动配置。关于三大组件的详细配置,请参考<a href="http://flume.apache.org/FlumeUserGuide.html#configuration" title="flumeUserGuide" target="_blank" rel="external">官方文档</a></p>
<p>创建server2事件监听目录/home/hadoop/flume-test</p>
<ul>
<li><p>server1上的配置</p>
<p> [hadoop@server1 flume-1.6.0]$ cp conf/flume-conf.properties.template conf/avro.conf</p>
<p> [hadoop@server1 flume-1.6.0]$ cat conf/avro.conf<br> #defind source sink channel<br> a1.sources = r1<br> a1.sinks = k1<br> a1.channels = c1</p>
<p> #specify configure<br> #r1的类型是Avro<br> a1.sources.r1.type = avro<br> #channel为c1,注意,这里是r1.channels<br> a1.sources.r1.channels = c1<br> #绑定本机端口4141<br> a1.sources.r1.bind = 0.0.0.0<br> a1.sources.r1.port = 4141</p>
<p> #sink k1的类型为HDFS<br> #see <a href="http://flume.apache.org/FlumeUserGuide.html#hdfs-sink" title="hdfs-sink" target="_blank" rel="external">http://flume.apache.org/FlumeUserGuide.html#hdfs-sink</a><br> a1.sinks.k1.type = hdfs<br> a1.sinks.k1.hdfs.path = hdfs://server1:9000/flume-test/<br> a1.sinks.k1.hdfs.fileType = DataStream<br> a1.sinks.k1.hdfs.writeFormat = TEXT<br> a1.sinks.k1.hdfs.round = true<br> a1.sinks.k1.hdfs.roundValue = 5<br> a1.sinks.k1.hdfs.roundUnit = minute<br> a1.sinks.k1.hdfs.useLocalTimeStamp = true<br> a1.sinks.k1.hdfs.filePrefix = events-<br> #而这里是k1.channel<br> a1.sinks.k1.channel = c1</p>
<p> #使用内存作为channel<br> a1.channels.c1.type = memory<br> a1.channels.c1.capacity = 1000<br> a1.channels.c1.transactionCapacity = 100</p>
</li>
<li><p>server2上的配置</p>
<p> [hadoop@server2 flume-1.6.0]$ cat conf/avro.conf<br> a1.sources = r1<br> a1.channels = c1<br> a1.sinks = k1</p>
<p> #For each one of the sources, the type is defined<br> a1.sources.r1.type = spooldir<br> a1.sources.r1.spoolDir = /home/hadoop/flume-test<br> a1.sources.r1.channels = c1</p>
<p> #Each sink’s type must be defined<br> a1.sinks.k1.type = avro<br> a1.sinks.k1.hostname = server1<br> a1.sinks.k1.port = 4141<br> a1.sinks.k1.channel = c1</p>
<p> #Each channel’s type is defined.<br> a1.channels.c1.type = memory<br> a1.channels.c1.capacity = 1000<br> a1.channels.c1.transcationCapacity = 100</p>
</li>
</ul>
<h2 id="启动测试"><a href="#启动测试" class="headerlink" title="启动测试"></a>启动测试</h2><p> <br> 以上Avro配置是:server2监听目录/home/hadoop/flume-test,如果有文件变化,就把事件传递到server1的4141端口上,server1监听本机的4141端口,如果有事件接收,就传递到hdfs hdfs://server1:9000/flume-test/上存储下来 文件名前缀events-</p>
<ol>
<li><p>先启动server1:</p>
<p> cd bin<br> bin/flume-ng agent -n agent -c conf -f conf/avro.conf -Dflume.root.logger=DEBUG,console</p>
</li>
<li><p>然后是server2:<br> bin/flume-ng agent -n agent -c conf -f conf/avro.conf -Dflume.root.logger=DEBUG,console</p>
</li>
<li><p>进入目录<br> [hadoop@server2 flume-test]$ cd /home/hadoop/flume-test<br> [hadoop@server2 flume-test]$ echo “hello flume source is avro and write to hdfs” &gt; test.txt</p>
</li>
<li><p>查看结果</p>
</li>
</ol>
<p>然后可以看到server2打印出:</p>
<pre><code>2016-08-29 22:22:12,724 (pool-4-thread-1) [INFO - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.readEvents(ReliableSpoolingFileEventReader.java:258)] Last read took us just up to a file boundary. Rolling to the next file, if there is one.
2016-08-29 22:22:12,730 (pool-4-thread-1) [INFO - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.rollCurrentFile(ReliableSpoolingFileEventReader.java:348)] Preparing to move file /home/hadoop/flume-test/test.txt to /home/hadoop/flume-test/test.txt.COMPLETED
2016-08-29 22:22:12,735 (pool-4-thread-1) [DEBUG - org.apache.flume.client.avro.ReliableSpoolingFileEventReader.rollCurrentFile(ReliableSpoolingFileEventReader.java:384)] Successfully rolled file /home/hadoop/flume-test/test.txt to /home/hadoop/flume-test/test.txt.COMPLETED
</code></pre><p>server1打印出:</p>
<pre><code>2016-08-29 22:34:00,734 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.hdfs.HDFSDataStream.configure(HDFSDataStream.java:58)] Serializer = TEXT, UseRawLocalFileSystem = false
2016-08-29 22:34:01,602 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.hdfs.BucketWriter.open(BucketWriter.java:234)] Creating hdfs://server1:9000/flume-test//events-.1473647640735.tmp
2016-08-29 22:34:32,796 (hdfs-k1-roll-timer-0) [INFO - org.apache.flume.sink.hdfs.BucketWriter.close(BucketWriter.java:363)] Closing hdfs://server1:9000/flume-test//events-.1473647640735.tmp
2016-08-29 22:34:35,975 (hdfs-k1-call-runner-0) [INFO - org.apache.flume.sink.hdfs.BucketWriter$8.call(BucketWriter.java:629)] Renaming hdfs://server1:9000/flume-test/events-.1473647640735.tmp to hdfs://server1:9000/flume-test/events-.1473647640735
2016-08-29 22:34:36,067 (hdfs-k1-roll-timer-0) [INFO - org.apache.flume.sink.hdfs.HDFSEventSink$1.run(HDFSEventSink.java:394)] Writer callback called.
</code></pre><p>查看hdfs 发现已经有了文件,flume测试成功!</p>
<pre><code>[hadoop@server2 flume-test]$ hadoop fs -ls /flume-test/
Found 1 items
-rw-r--r-- 3 hadoop supergroup 45 2016-08-29 22:23 /flume-test/events-.1473646940947
[hadoop@server2 flume-test]$ hadoop fs -cat /flume-test/events-.1473646940947
hello flume source is avro and write to hdfs
</code></pre><h2 id="参考文档"><a href="#参考文档" class="headerlink" title="参考文档"></a>参考文档</h2><p><a href="http://flume.apache.org/FlumeUserGuide.html" target="_blank" rel="external">http://flume.apache.org/FlumeUserGuide.html</a><br><a href="http://my.oschina.net/u/2000675/blog/604267" target="_blank" rel="external">http://my.oschina.net/u/2000675/blog/604267</a><br><a href="http://blog.csdn.net/u010022051/article/details/42522441" target="_blank" rel="external">http://blog.csdn.net/u010022051/article/details/42522441</a><br><a href="http://www.cnblogs.com/lishouguang/p/4560862.html" target="_blank" rel="external">http://www.cnblogs.com/lishouguang/p/4560862.html</a></p>
</content>
<summary type="html">
Apache Flume 1.6.0 的安装与使用
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
</entry>
<entry>
<title>Storm Base Used demon</title>
<link href="http://www.guinguo.top/2016/08/24/Storm-BaseUsed-demon/"/>
<id>http://www.guinguo.top/2016/08/24/Storm-BaseUsed-demon/</id>
<published>2016-08-24T11:37:27.000Z</published>
<updated>2016-09-12T03:24:17.365Z</updated>
<content type="html"><h2 id="栗子介绍"><a href="#栗子介绍" class="headerlink" title="栗子介绍"></a>栗子介绍</h2><p>spout:它会随机发射一系列的句子,句子的格式是 谁:说的话<br> RandomSpout<br>bolt:处理源流出来的数据,末尾添加”, hi guinguo~”,然后打印。两个功能,两个Bolt。<br> ExclaimBasicBolt<br> PrintBolt<br>Topology:用于启动</p>
<h2 id="建立MAVEN项目"><a href="#建立MAVEN项目" class="headerlink" title="建立MAVEN项目"></a>建立MAVEN项目</h2><p> 基本的pom.xml</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">project</span> <span class="attr">xmlns</span>=<span class="string">"http://maven.apache.org/POM/4.0.0"</span> <span class="attr">xmlns:xsi</span>=<span class="string">"http://www.w3.org/2001/XMLSchema-instance"</span></span><br><span class="line"> <span class="attr">xsi:schemaLocation</span>=<span class="string">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">modelVersion</span>&gt;</span>4.0.0<span class="tag">&lt;/<span class="name">modelVersion</span>&gt;</span></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>top.guinguo.storm<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>storm-samples<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">version</span>&gt;</span>1.0-SNAPSHOT<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">packaging</span>&gt;</span>jar<span class="tag">&lt;/<span class="name">packaging</span>&gt;</span></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">name</span>&gt;</span>storm-samples<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">properties</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">project.build.sourceEncoding</span>&gt;</span>UTF-8<span class="tag">&lt;/<span class="name">project.build.sourceEncoding</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">properties</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">repositories</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">repository</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">id</span>&gt;</span>clojars.org<span class="tag">&lt;/<span class="name">id</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">url</span>&gt;</span>http://clojars.org/repo<span class="tag">&lt;/<span class="name">url</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">repository</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">repositories</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">build</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">finalName</span>&gt;</span>storm-samples<span class="tag">&lt;/<span class="name">finalName</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">plugins</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">plugin</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.apache.maven.plugins<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>maven-compiler-plugin<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">version</span>&gt;</span>3.1<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">configuration</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">source</span>&gt;</span>1.7<span class="tag">&lt;/<span class="name">source</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">target</span>&gt;</span>1.7<span class="tag">&lt;/<span class="name">target</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">encoding</span>&gt;</span>$&#123;project.build.sourceEncoding&#125;<span class="tag">&lt;/<span class="name">encoding</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">configuration</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">plugin</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">plugin</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>maven-assembly-plugin<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">configuration</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">descriptorRefs</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">descriptorRef</span>&gt;</span>jar-with-dependencies<span class="tag">&lt;/<span class="name">descriptorRef</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">descriptorRefs</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">configuration</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">executions</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">execution</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">id</span>&gt;</span>make-assembly<span class="tag">&lt;/<span class="name">id</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">phase</span>&gt;</span>package<span class="tag">&lt;/<span class="name">phase</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">goals</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">goal</span>&gt;</span>single<span class="tag">&lt;/<span class="name">goal</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">goals</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">execution</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">executions</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;/<span class="name">plugin</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">plugins</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">build</span>&gt;</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;<span class="name">dependencies</span>&gt;</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">&lt;!-- https://mvnrepository.com/artifact/org.apache.storm/storm-core --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">dependency</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">groupId</span>&gt;</span>org.apache.storm<span class="tag">&lt;/<span class="name">groupId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">artifactId</span>&gt;</span>storm-core<span class="tag">&lt;/<span class="name">artifactId</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">version</span>&gt;</span>1.0.2<span class="tag">&lt;/<span class="name">version</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">scope</span>&gt;</span>provided<span class="tag">&lt;/<span class="name">scope</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!-- 注意,这里必须是provided,不然打包上传到集群跑回报错,</span><br><span class="line"> 因为Storm集群自带了核心包,我们只需把我们写的class打包即可--&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">dependency</span>&gt;</span></span><br><span class="line"></span><br><span class="line"> <span class="tag">&lt;/<span class="name">dependencies</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">project</span>&gt;</span></span><br></pre></td></tr></table></figure>
<p>加了个build 插件:maven-assembly-plugin: 为了把所有依赖包最后打到一个jar包去,方便测试和部署。</p>
<h2 id="建立Spout"><a href="#建立Spout" class="headerlink" title="建立Spout"></a>建立Spout</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span><br><span class="line"> * Created by guin_guo on 2016/8/23.</span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">RandomSpout</span> <span class="keyword">extends</span> <span class="title">BaseRichSpout</span> </span>&#123;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> SpoutOutputCollector collector;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> Random rand;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> String[] sentences = <span class="keyword">new</span> String[]&#123;<span class="string">"guinguo:I'm happy"</span>,</span><br><span class="line"> <span class="string">"ggn:I'm angry"</span>, <span class="string">"guin_guo:I'm sad"</span>, <span class="string">"John:I'm excited"</span>, <span class="string">"Micheal:I'm dangerous"</span>&#125;;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">declareOutputFields</span><span class="params">(OutputFieldsDeclarer outputFieldsDeclarer)</span> </span>&#123;</span><br><span class="line"> outputFieldsDeclarer.declare(<span class="keyword">new</span> Fields(<span class="string">"sentence"</span>));</span><br><span class="line"> <span class="comment">//declarer.declare方法用来给我们发射的value在整个Stream中定义一个别名。</span></span><br><span class="line"> <span class="comment">//可以理解为key。该值必须在整个topology定义中唯一。</span></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">open</span><span class="params">(Map map, TopologyContext topologyContext, SpoutOutputCollector spoutOutputCollector)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">this</span>.collector = spoutOutputCollector;</span><br><span class="line"> <span class="keyword">this</span>.rand = <span class="keyword">new</span> Random();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">nextTuple</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> String toSay = sentences[rand.nextInt(sentences.length)];</span><br><span class="line"> <span class="keyword">this</span>.collector.emit(<span class="keyword">new</span> Values(toSay));</span><br><span class="line"> <span class="comment">//发射tuple,不用自己实现tuple,</span></span><br><span class="line"> <span class="comment">//我们只需要定义tuple的value,Storm会帮我们生成tuple</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<blockquote>
<p> Tuple的概念。<br> Storm中,基本元数据是靠Tuple才承载的。或者说,Tuple是数据的一个大抽象。它要求实现类必须能序列化。<br> Tuple中以List存放Values,List的Index按照new Values(obj1, obj2,…)的参数的index,例如我们emit(new Values(“v1”, “v2”)), 那么Tuple的属性即为:{ [ “v1” ], [ “V2” ] }</p>
</blockquote>
<h2 id="建立Bolt"><a href="#建立Bolt" class="headerlink" title="建立Bolt"></a>建立Bolt</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span><br><span class="line"> * 末尾添加",hi guinguo~"</span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ExclaimBasicBolt</span> <span class="keyword">extends</span> <span class="title">BaseBasicBolt</span> </span>&#123;</span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">execute</span><span class="params">(Tuple tuple, BasicOutputCollector basicOutputCollector)</span> </span>&#123;</span><br><span class="line"> String sentence = tuple.getString(<span class="number">0</span>);</span><br><span class="line"> String out = sentence + <span class="string">",hi guinguo~"</span>;</span><br><span class="line"> basicOutputCollector.emit(<span class="keyword">new</span> Values(out));</span><br><span class="line"> <span class="comment">//取到以后,我们在末尾添加",hi guinguo~"后,仍然发射一个Tuple</span></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">declareOutputFields</span><span class="params">(OutputFieldsDeclarer outputFieldsDeclarer)</span> </span>&#123;</span><br><span class="line"> outputFieldsDeclarer.declare(<span class="keyword">new</span> Fields(<span class="string">"excl_sentence"</span>));</span><br><span class="line"> <span class="comment">//定义其唯一的value的field 名字为"excl_sentence"</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>在上面的Spout中,我们发射的Tuple是{[“guinguo: I’m Happy”]},所以可以使用tuple.getValue(0)取到。</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span><br><span class="line"> * print bolt</span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">PrintBolt</span> <span class="keyword">extends</span> <span class="title">BaseBasicBolt</span> </span>&#123;</span><br><span class="line"></span><br><span class="line"> <span class="comment">//private int indexId;</span></span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">prepare</span><span class="params">(Map stormConf, TopologyContext context)</span> </span>&#123;</span><br><span class="line"> <span class="comment">//this.indexId = context.getThisTaskIndex();</span></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">execute</span><span class="params">(Tuple tuple, BasicOutputCollector basicOutputCollector)</span> </span>&#123;</span><br><span class="line"> String sentence = tuple.getString(<span class="number">0</span>);</span><br><span class="line"> <span class="comment">//仍然是取第一个</span></span><br><span class="line"> System.err.println(<span class="string">"String recieved: "</span> + sentence);</span><br><span class="line"> <span class="comment">//System.err.println(String.format("Bolt[%d] String recieved: %s", this.indexId, sentence));</span></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="meta">@Override</span></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">declareOutputFields</span><span class="params">(OutputFieldsDeclarer outputFieldsDeclarer)</span> </span>&#123;</span><br><span class="line"> <span class="comment">//不再发tuple了</span></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure>
<h2 id="建立Topology"><a href="#建立Topology" class="headerlink" title="建立Topology"></a>建立Topology</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ExclaimBasicTopo</span> </span>&#123;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> <span class="keyword">throws</span> Exception </span>&#123;</span><br><span class="line"> TopologyBuilder builder = <span class="keyword">new</span> TopologyBuilder();</span><br><span class="line"></span><br><span class="line"> builder.setSpout(<span class="string">"spout"</span>, <span class="keyword">new</span> RandomSpout());</span><br><span class="line"> <span class="comment">//定义一个spout,id为"spout" </span></span><br><span class="line"></span><br><span class="line"> builder.setBolt(<span class="string">"exclaim"</span>, <span class="keyword">new</span> ExclaimBasicBolt()).shuffleGrouping(<span class="string">"spout"</span>);</span><br><span class="line"> <span class="comment">//定义了一个id为exclaim的bolt,并且按照随机分组获得spout发射的tuple</span></span><br><span class="line"></span><br><span class="line"> builder.setBolt(<span class="string">"print"</span>, <span class="keyword">new</span> PrintBolt()).shuffleGrouping(<span class="string">"exclaim"</span>);</span><br><span class="line"> <span class="comment">//定义了一个id为print的bolt,并且按照随机分组获得exclaim发射出来的tuple</span></span><br><span class="line"> </span><br><span class="line"> <span class="comment">//builder.setBolt("exclaim", new ExclaimBasicBolt(),2).shuffleGrouping("spout");</span></span><br><span class="line"> <span class="comment">//builder.setBolt("print", new PrintBolt(),3).shuffleGrouping("exclaim");</span></span><br><span class="line"></span><br><span class="line"> Config conf = <span class="keyword">new</span> Config();</span><br><span class="line"> conf.setDebug(<span class="keyword">false</span>);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (args != <span class="keyword">null</span> &amp;&amp; args.length &gt; <span class="number">0</span>) &#123;</span><br><span class="line"> conf.setNumWorkers(<span class="number">3</span>);</span><br><span class="line"> <span class="comment">//交到集群中运行</span></span><br><span class="line"> StormSubmitter.submitTopology(args[<span class="number">0</span>], conf, builder.createTopology());</span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> <span class="comment">//本地运行</span></span><br><span class="line"> LocalCluster cluster = <span class="keyword">new</span> LocalCluster();</span><br><span class="line"> cluster.submitTopology(<span class="string">"test"</span>, conf, builder.createTopology());</span><br><span class="line"> Utils.sleep(<span class="number">100000</span>);</span><br><span class="line"> cluster.killTopology(<span class="string">"test"</span>);</span><br><span class="line"> cluster.shutdown();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<h2 id="运行测试"><a href="#运行测试" class="headerlink" title="运行测试"></a>运行测试</h2><h3 id="本地运行"><a href="#本地运行" class="headerlink" title="本地运行"></a>本地运行</h3><p> 运行ExclaimBasicTopo可以看到不停的输出: </p>
<pre><code>String recieved: marry:I&apos;m angry,hi guin_guo~
String recieved: marry:I&apos;m angry,hi guin_guo~
String recieved: marry:I&apos;m angry,hi guin_guo~
String recieved: ted:I&apos;m excited,hi guin_guo~
String recieved: marry:I&apos;m angry,hi guin_guo~
String recieved: ted:I&apos;m excited,hi guin_guo~
String recieved: laden:I&apos;m dangerous,hi guin_guo~
String recieved: john:I&apos;m sad,hi guin_guo~
String recieved: ted:I&apos;m excited,hi guin_guo~
String recieved: laden:I&apos;m dangerous,hi guin_guo~
String recieved: laden:I&apos;m dangerous,hi guin_guo~
String recieved: edi:I&apos;m happy,hi guin_guo~
String recieved: john:I&apos;m sad,hi guin_guo~
String recieved: laden:I&apos;m dangerous,hi guin_guo~
</code></pre><p> 我们可以指定并行数,在ExclaimBasicTopo中我注释掉的那两行,跟PrintBolt中的那个打印任务Id<br>由于我们并没有多指定task数目,所以默认,会有两个exectuor去执行两个exclaimBasicBolt的task,3个executor去执行3个PrintBolt的task。</p>
<pre><code>Bolt[1] String recieved: john:I&apos;m sad,hi guin_guo~
Bolt[2] String recieved: edi:I&apos;m happy,hi guin_guo~
Bolt[1] String recieved: laden:I&apos;m dangerous,hi guin_guo~
Bolt[2] String recieved: edi:I&apos;m happy,hi guin_guo~
Bolt[1] String recieved: laden:I&apos;m dangerous,hi guin_guo~
Bolt[0] String recieved: marry:I&apos;m angry,hi guin_guo~
Bolt[1] String recieved: marry:I&apos;m angry,hi guin_guo~
Bolt[0] String recieved: edi:I&apos;m happy,hi guin_guo~
Bolt[1] String recieved: john:I&apos;m sad,hi guin_guo~
Bolt[0] String recieved: marry:I&apos;m angry,hi guin_guo~
</code></pre><p> PrintBolt 的prepare方法从上下文中拿到该Bolt的TaskIndex,我们指定了3的并发度,所以理论上有3个task,那么该值应该为[0,1,2]。<br>证实确实是并发了。</p>
<h3 id="集群运行"><a href="#集群运行" class="headerlink" title="集群运行"></a>集群运行</h3><p>用 mvn clean install 命令编译,然后把target目录下生成的 storm-samples-jar-with-dependencies.jar 拷到nimbus机器上,执行</p>
<pre><code>cd apache-storm-1.0.2/bin
./storm jar /home/hadoop/storm-samples-jar-with-dependencies.jar top.guinguo.storm.ExclaimBasicTopo test
</code></pre><p>然后可以到web UI里面查看详情信息<br>点进去test,可以看到<br><img src="http://7xsve9.com1.z0.glb.clouddn.com/Storm-spouts.jpg" alt="test-spouts"><br><img src="http://7xsve9.com1.z0.glb.clouddn.com/Storm-bolts.jpg" alt="test-bolts"></p>
<p>看到spout已经发射了76780个tuple了,而id为exclaim的bolt已经接收了72780个tuple了,<br>而print没有输出,emit为0。</p>
<p><strong>参考</strong></p>
<ul>
<li><a href="http://itindex.net/detail/47353-storm-%E7%B3%BB%E5%88%97" target="_blank" rel="external">http://itindex.net/detail/47353-storm-%E7%B3%BB%E5%88%97</a></li>
</ul>
</content>
<summary type="html">
Storm之最基本的例子
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
<category term="Storm" scheme="http://www.guinguo.top/tags/Storm/"/>
</entry>
<entry>
<title>Hadoop Cluster Set Up P7 Storm</title>
<link href="http://www.guinguo.top/2016/08/24/Hadoop-Cluster-Set-Up-P7-Storm/"/>
<id>http://www.guinguo.top/2016/08/24/Hadoop-Cluster-Set-Up-P7-Storm/</id>
<published>2016-08-23T16:00:35.000Z</published>
<updated>2016-09-12T03:24:08.923Z</updated>
<content type="html"><h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><h3 id="术语"><a href="#术语" class="headerlink" title="术语"></a>术语</h3><p> Storm相关术语都用斜体英文表示。 这些术语的字面意义翻译如下,由于这个工具的名字叫Storm,这些术语一律按照气象名词解释</p>
<ul>
<li>spout 龙卷,读取原始数据为bolt提供数据</li>
<li>bolt 雷电,从spout或其它bolt接收数据,并处理数据,处理结果可作为其它bolt的数据源或最终结果</li>
<li>nimbus 雨云,主节点的守护进程,负责为工作节点分发任务。</li>
</ul>
<p>下面的术语跟气象就没有关系了</p>
<ul>
<li>topology 拓扑结构,Storm的一个任务单元</li>
<li>define field(s) 定义域,由spout或bolt提供,被bolt接收</li>
</ul>
<h3 id="基础知识"><a href="#基础知识" class="headerlink" title="基础知识"></a>基础知识</h3><p> Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,<br>每个组件负责一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据<br>传递给bolt,bolt要么把数据保存到某种存储器,要么把数据传递给其他的bolt。你可以想象一下,<br>一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。</p>
<h3 id="应用案例"><a href="#应用案例" class="headerlink" title="应用案例"></a>应用案例</h3><ol>
<li>连续计算<br>连续发送数据到客户端,使它们能够实时更新并显示结果,如网站指标。</li>
<li>分布式远程过程调用</li>
<li>频繁的CPU密集型操作并行化</li>
</ol>
<h3 id="Storm组件"><a href="#Storm组件" class="headerlink" title="Storm组件"></a>Storm组件</h3><p>对于一个Storm集群,一个连续运行的主节点组织若干节点工作。有两类节点:</p>
<ul>
<li>主节点:master node 运行这一个叫做Nimbus的守护进程,负责在集群中分发代码,分配任务,监控等。</li>
<li>工作节点:worker nodes 运行Supervisor的守护进程,作为拓扑的一部分运行在节点上,<br>一个Storm拓扑结构在不同的机器上运行着众多的工作节点。<h2 id="安装前要求与流程"><a href="#安装前要求与流程" class="headerlink" title="安装前要求与流程"></a>安装前要求与流程</h2></li>
<li>Zookeeper集群<br>参考 <a href="/2016/05/26/Zookeeper集群安装于部署/">Zookeeper集群安装于部署</a></li>
<li>安装Storm依赖库</li>
<li>下载并解压Storm发布版本</li>
<li>修改storm.yaml配置文件</li>
<li>启动</li>
</ul>
<h2 id="安装Storm依赖库"><a href="#安装Storm依赖库" class="headerlink" title="安装Storm依赖库"></a>安装Storm依赖库</h2><ol>
<li><a href="http://zeromq.org/area:download" target="_blank" rel="external">ZeroMQ</a></li>
</ol>
<pre><code>wget https://github.com/zeromq/zeromq4-1/releases/download/v4.1.5/zeromq-4.1.5.tar.gz
tar -zxvf zeromq-4.1.5.tar.gz
cd zeromq-4.1.5
./configure
make
sudo make install
</code></pre><ol>
<li><a href="https://github.com/nathanmarz/jzmq" target="_blank" rel="external">ZJMQ</a></li>
</ol>
<pre><code>git clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install
</code></pre><ol>
<li>JAVA &gt;6</li>
<li>Python</li>
</ol>
<h2 id="下载并解压"><a href="#下载并解压" class="headerlink" title="下载并解压"></a>下载并解压</h2><pre><code>wget http://www-us.apache.org/dist/storm/apache-storm-1.0.2/apache-storm-1.0.2.tar.gz
tar -zxvf apache-storm-1.0.2.tar.gz
</code></pre><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><pre><code>[hadoop@server1 ~]$ vi storm/conf/storm.yaml
storm.zookeeper.servers:
- &quot;server1&quot;
- &quot;server2&quot;
- &quot;server3&quot;
storm.local.dir: &quot;/home/hadoop/storm/data&quot;
nimbus.seeds: [&quot;server1&quot;]
scp -rq apache-storm-1.0.2 server2:~/
scp -rq apache-storm-1.0.2 server3:~/
</code></pre><h2 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h2><ol>
<li>启动主控节点</li>
</ol>
<pre><code>[hadoop@server1 ~]$ apache-storm-1.0.2/bin/storm nimbus
</code></pre><p>这会一直占用着控制台,可以使用下面命令让其后台运行</p>
<pre><code>[hadoop@server1 ~]$ apache-storm-1.0.2/bin/storm nimbus &gt; /dev/null 2&gt;&amp;1 &amp;
</code></pre><ol>
<li>启动工作节点</li>
</ol>
<pre><code>[hadoop@server2 ~]$ apache-storm-1.0.2/bin/storm supervisor &gt; /dev/null 2&gt;&amp;1 &amp;
[hadoop@server3 ~]$ apache-storm-1.0.2/bin/storm supervisor &gt; /dev/null 2&gt;&amp;1 &amp;
</code></pre><ol>
<li>启动管理页面<br>在主控节点上运行</li>
</ol>
<pre><code>[hadoop@server1 ~]$ apache-storm-1.0.2/bin/storm ui &gt; /dev/null 2&gt;&amp;1 &amp;
</code></pre><p>web ui地址端口8080</p>
<pre><code>[hadoop@server1 ~]$ jps
7845 Jps
2567 core
6777 nimbus
[hadoop@server2 ~]$ jps
3657 Jps
2411 supervisor
[hadoop@server3 ~]$ jps
19259 Jps
18767 supervisor
</code></pre><h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
<li><a href="http://storm.apache.org/releases/1.0.2/Setting-up-a-Storm-cluster.html" target="_blank" rel="external">http://storm.apache.org/releases/1.0.2/Setting-up-a-Storm-cluster.html</a></li>
<li><a href="http://blog.csdn.net/lulongzhou_llz/article/details/46433107" target="_blank" rel="external">http://blog.csdn.net/lulongzhou_llz/article/details/46433107</a></li>
<li><a href="https://yq.aliyun.com/articles/25772" target="_blank" rel="external">https://yq.aliyun.com/articles/25772</a><br>报错参考</li>
<li><a href="http://my.oschina.net/mingdongcheng/blog/43009" target="_blank" rel="external">http://my.oschina.net/mingdongcheng/blog/43009</a></li>
</ul>
</content>
<summary type="html">
Storm1.0.2 的安装
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
<category term="Storm" scheme="http://www.guinguo.top/tags/Storm/"/>
</entry>
<entry>
<title>Hadoop Cluster Set Up P6 Sqoop</title>
<link href="http://www.guinguo.top/2016/08/16/Hadoop-Cluster-Set-Up-P6-Sqoop/"/>
<id>http://www.guinguo.top/2016/08/16/Hadoop-Cluster-Set-Up-P6-Sqoop/</id>
<published>2016-08-16T15:17:16.000Z</published>
<updated>2016-09-12T03:23:57.015Z</updated>
<content type="html"><p>Sqoop1.99.7 暂时只支持mysql到hdfs或者hdfs到mysql,不支持hive或者hbase。<a href="sqoop.apache.org">官网</a>也说了不用与生产环境。这里我只是先装 <del>(踩)</del> 着 <del>(坑)</del><br><img src="/images/acmusume/01.png" height="50px" ,="" width="50px" style="margin:0 0"></p>
<h2 id="下载并解压"><a href="#下载并解压" class="headerlink" title="下载并解压"></a>下载并解压</h2><p>由于服务器在美国,所以我换了一个镜像,大家如果在国内的话,可以使用北理工的<a href="http://mirror.bit.edu.cn" target="_blank" rel="external">http://mirror.bit.edu.cn</a></p>
<pre><code>wget http://www-us.apache.org/dist/sqoop/1.99.7/sqoop-1.99.7-bin-hadoop200.tar.gz
tar -zxvf sqoop-1.99.7-bin-hadoop200.tar.gz
mv sqoop-1.99.7-bin-hadoop200 sqoop-1.99.7
</code></pre><h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><ul>
<li>环境变量</li>
</ul>
<pre><code>/etc/profile
</code></pre><blockquote>
<p> export SQOOP_HOME=/home/hadoop/sqoop-1.99.7<br> export PATH=$PATH:$SQOOP_HOME/bin<br> export CATALINE_BASE=$SQOOP_HOME/server<br> export LOGDIR=$SQOOP_HOME/logs</p>
</blockquote>
<ul>
<li><p>sqoop配置文件<br> 这里<strong>注意</strong>,配置文件不再存放于${SQOOP_HOME}/server/conf/目录下,而是直接存在安装的目录${SQOOP_HOME}/conf/下</p>
<p> vi ${SQOOP_HOME}/conf/sqoop.properties</p>
</li>
</ul>
<p> 把下面的属性替换成hadoop的配置文件目录,<strong>注意</strong>!我第一次换成hadoop安装目录,然后就报错了,尴尬。。。 </p>
<blockquote>
<p> org.apache.sqoop.submission.engine.mapreduce.configuration.directory=/usr/local/hadoop-2.7.2/etc/hadoop/</p>
</blockquote>
<p> 并且替换@LOGDIR@ 和@BASEDIR@ :</p>
<blockquote>
<p> :0,$ s/@LOGDIR@/logs/g<br> :0,$ s/@BASEDIR@/base/g</p>
</blockquote>
<pre><code>vi ${SQOOP_HOME}/conf/sqoop_bootstrap.properties
</code></pre><p> 这里要注意,有个坑,1.99.7版本之前,都是catalina.properties这个配置文件,然后我下了1.99.7就没有发现,而且官网也没显式说明,改名为sqoop_bootstrap.properties<br> 把hadoop的所以jar都加进来</p>
<blockquote>
<p> common.loader=${catalina.base}/lib,${catalina.base}/lib/<em>.jar,${catalina.home}/lib,${catalina.home}/lib/</em>.jar,${catalina.home}/../lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/common/</em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/common/lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/hdfs/</em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/hdfs/lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/mapreduce/</em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/mapreduce/lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/tools/</em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/tools/lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/yarn/</em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/yarn/lib/<em>.jar,/usr/local/hadoop-2.7.2/share/hadoop/httpfs/tomcat/lib/</em>.jar</p>
</blockquote>
<ul>
<li>复制mysql-connector-java-*-bin.jar到${SQOOP_HOME}/server/lib/下</li>
</ul>
<p><a href="wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz">mysql-connector</a></p>
<pre><code>cp mysql-connector-java-5.1.39-bin.jar ${SQOOP_HOME}/server/lib/
</code></pre><h2 id="运行测试"><a href="#运行测试" class="headerlink" title="运行测试"></a>运行测试</h2><ul>
<li>首先验证配置是否正确</li>
</ul>
<pre><code>sqoop2-tool verify
</code></pre><p>这里我又踩了一个坑</p>
<blockquote>
<p> Verification has failed, please check Server logs for further details.<br> Tool class org.apache.sqoop.tools.tool.VerifyTool has failed.<br>查看日志 ${SQOOP_HOME}/logs/sqoop.log</p>
</blockquote>
<figure class="highlight java"><figcaption><span>log</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">2016</span>-<span class="number">08</span>-<span class="number">18</span> <span class="number">10</span>:<span class="number">58</span>:<span class="number">34</span>,<span class="number">400</span> ERROR [org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:<span class="number">67</span>)] Failure in server initialization </span><br><span class="line">org.apache.sqoop.common.SqoopException: MAPREDUCE_0002:Failure on submission engine initialization </span><br><span class="line"> at org.apache.sqoop.submission.mapreduce.MapreduceSubmissionEngine.initialize(MapreduceSubmissionEngine.java:<span class="number">127</span>) </span><br><span class="line"> at org.apache.sqoop.driver.JobManager.initialize(JobManager.java:<span class="number">257</span>) </span><br><span class="line"> at org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:<span class="number">64</span>) </span><br><span class="line"> at org.apache.sqoop.tools.tool.VerifyTool.runTool(VerifyTool.java:<span class="number">36</span>) </span><br><span class="line"> at org.apache.sqoop.tools.ToolRunner.main(ToolRunner.java:<span class="number">72</span>) </span><br><span class="line">Caused by: java.io.IOException: Cannot initialize Cluster. Please check your configuration <span class="keyword">for</span> mapreduce.framework.name and the correspond server addresses. </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:<span class="number">120</span>) </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.&lt;init&gt;(Cluster.java:<span class="number">82</span>) </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.&lt;init&gt;(Cluster.java:<span class="number">75</span>) </span><br><span class="line"> at org.apache.hadoop.mapred.JobClient.init(JobClient.java:<span class="number">475</span>) </span><br><span class="line"> at org.apache.hadoop.mapred.JobClient.&lt;init&gt;(JobClient.java:<span class="number">454</span>) </span><br><span class="line"> at org.apache.sqoop.submission.mapreduce.MapreduceSubmissionEngine.initialize(MapreduceSubmissionEngine.java:<span class="number">125</span>) </span><br><span class="line"> ... <span class="number">4</span> more </span><br><span class="line"><span class="number">2016</span>-<span class="number">08</span>-<span class="number">18</span> <span class="number">10</span>:<span class="number">58</span>:<span class="number">34</span>,<span class="number">403</span> ERROR [org.apache.sqoop.tools.tool.VerifyTool.runTool(VerifyTool.java:<span class="number">41</span>)] Got exception <span class="keyword">while</span> initializing/destroying Sqoop server: </span><br><span class="line">java.lang.RuntimeException: Failure in server initialization </span><br><span class="line"> at org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:<span class="number">68</span>) </span><br><span class="line"> at org.apache.sqoop.tools.tool.VerifyTool.runTool(VerifyTool.java:<span class="number">36</span>) </span><br><span class="line"> at org.apache.sqoop.tools.ToolRunner.main(ToolRunner.java:<span class="number">72</span>) </span><br><span class="line">Caused by: org.apache.sqoop.common.SqoopException: MAPREDUCE_0002:Failure on submission engine initialization </span><br><span class="line"> at org.apache.sqoop.submission.mapreduce.MapreduceSubmissionEngine.initialize(MapreduceSubmissionEngine.java:<span class="number">127</span>) </span><br><span class="line"> at org.apache.sqoop.driver.JobManager.initialize(JobManager.java:<span class="number">257</span>) </span><br><span class="line"> at org.apache.sqoop.core.SqoopServer.initialize(SqoopServer.java:<span class="number">64</span>) </span><br><span class="line"> ... <span class="number">2</span> more </span><br><span class="line">Caused by: java.io.IOException: Cannot initialize Cluster. Please check your configuration <span class="keyword">for</span> mapreduce.framework.name and the correspond server addresses. </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:<span class="number">120</span>) </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.&lt;init&gt;(Cluster.java:<span class="number">82</span>) </span><br><span class="line"> at org.apache.hadoop.mapreduce.Cluster.&lt;init&gt;(Cluster.java:<span class="number">75</span>) </span><br><span class="line"> at org.apache.hadoop.mapred.JobClient.init(JobClient.java:<span class="number">475</span>) </span><br><span class="line"> at org.apache.hadoop.mapred.JobClient.&lt;init&gt;(JobClient.java:<span class="number">454</span>) </span><br><span class="line"> at org.apache.sqoop.submission.mapreduce.MapreduceSubmissionEngine.initialize(MapreduceSubmissionEngine.java:<span class="number">125</span>) </span><br><span class="line"> ... <span class="number">4</span> more </span><br></pre></td></tr></table></figure>
<p>MapReduce配置出错了?<br>搞了半天,无语啊,我配置了TEZ,mapreduce框架默认使用yarn作为管理,但是我在yarn-site.xml中配了tez</p>
<pre><code>&lt;property&gt;
&lt;name&gt;mapreduce.framework.name&lt;/name&gt;
&lt;value&gt;yarn-tez&lt;/value&gt;
&lt;/property&gt;
</code></pre><p>把这个配置去掉,使用默认的yarn就正常了,,,sqoop2的兼容实在是不敢恭维。</p>
<pre><code>[hadoop@server1 sqoop-1.99.7]$ sqoop2-tool verify
</code></pre><blockquote>
<p> Running tool: class org.apache.sqoop.tools.tool.VerifyTool<br> 1 [main] INFO org.apache.sqoop.core.SqoopServer - Initializing Sqoop server.<br> 82 [main] INFO org.apache.sqoop.core.PropertiesConfigurationProvider - Starting config file poller thread<br> Verification was successful.<br> Tool class org.apache.sqoop.tools.tool.VerifyTool has finished correctly.</p>
</blockquote>
<ul>
<li>启动sqoop2-server</li>
</ul>
<pre><code>sqoop2-server start
</code></pre><blockquote>
<p> [hadoop@server1 sqoop-1.99.7]$ sqoop2-server start<br> Setting conf dir: /home/hadoop/sqoop-1.99.7/bin/../conf<br> Sqoop home directory: /home/hadoop/sqoop-1.99.7<br> Starting the Sqoop2 server…<br> Sqoop2 server started.</p>
</blockquote>
<p>默认端口是12000 在sqoop.properties 中可以改</p>
<pre><code>[hadoop@server1 sqoop-1.99.7]$ wget -qO - http://server1:12000/sqoop/version
</code></pre><blockquote>
<p> {“source-url”:”git:\/\/mbp.abrahamfine.com\/Users\/abefine\/cloudera_code\/sqoop-clean\/common”,”source-revision”:”435d5e61b922a32d7bce567fe5fb1a9c0d9b1bbb”,”build-version”:”1.99.7”,”api-versions”:[“v1”],”user”:”abefine”,”build-date”:”Tue Jul 19 16:08:27 PDT 2016”}</p>
</blockquote>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
<li><a href="http://www.th7.cn/db/nosql/201510/134172.shtml" target="_blank" rel="external">hadoop-2.6.0与sqoop-1.99.6的安裝配置</a></li>
<li><a href="http://blog.csdn.net/gdmzlhj1/article/details/50483171" target="_blank" rel="external">sqoop1.4.6安装和使用</a></li>
</ul>
</content>
<summary type="html">
Sqoop1.99.7的安装
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
<category term="Sqoop2" scheme="http://www.guinguo.top/tags/Sqoop2/"/>
</entry>
<entry>
<title>Hadoop Cluster Set Up P5 Hive</title>
<link href="http://www.guinguo.top/2016/07/28/Hadoop-Cluster-Set-Up-P5-Hive/"/>
<id>http://www.guinguo.top/2016/07/28/Hadoop-Cluster-Set-Up-P5-Hive/</id>
<published>2016-07-28T12:39:36.000Z</published>
<updated>2016-09-12T03:23:33.519Z</updated>
<content type="html"><p>Hive原则上可以安装在集群上的任何一台机器上面,如果 master节点的负荷比较大,可以选择一台机器性能较好的datanode来安装hive。这里我选择master来安装hive,因为另一台namenode的配置跟datanode差不多,而且我的master配置相比其他node好一点。另外,在我们的安装中采用 MySQL来存放hive的meta数据</p>
<h2 id="Centos7-install-mysql-server"><a href="#Centos7-install-mysql-server" class="headerlink" title="Centos7 install mysql-server"></a>Centos7 install mysql-server</h2><p>Centos 使用mariadb 作为默认数据库,mariadb是MySQL一个分支,而且是开源的。不过我们仍可以安装mysql,使用RPM包进行安装</p>
<h3 id="下载MySQL的rpm包"><a href="#下载MySQL的rpm包" class="headerlink" title="下载MySQL的rpm包"></a>下载MySQL的rpm包</h3><p>yum install wget <a href="http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm" target="_blank" rel="external">http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm</a></p>
<h3 id="安装mysql-community-release-el75-noarch-rpm-包"><a href="#安装mysql-community-release-el75-noarch-rpm-包" class="headerlink" title="安装mysql-community-release-el75.noarch.rpm 包"></a>安装mysql-community-release-el75.noarch.rpm 包</h3><p>rpm -ivh mysql-community-release-el7-5.noarch.rpm</p>
<pre><code>-ivh:安装显示安装进度--install--verbose--hash
</code></pre><p>安装后就会有两个yum源</p>
<pre><code>[root@ ~]# ls -1 /etc/yum.repos.d/mysql-community*
/etc/yum.repos.d/mysql-community.repo
/etc/yum.repos.d/mysql-community-source.repo
[root@server1 ~]#
</code></pre><h3 id="安装MySQL-Server"><a href="#安装MySQL-Server" class="headerlink" title="安装MySQL Server"></a>安装MySQL Server</h3><p>yum install mysql-server</p>
<h3 id="启动-停止-重启-状态命令"><a href="#启动-停止-重启-状态命令" class="headerlink" title="启动 停止 重启 状态命令"></a>启动 停止 重启 状态命令</h3><ul>
<li>systemctl start mysqld</li>
<li>systemctl stop mysqld</li>
<li>systemctl restart mysqld</li>
<li>systemctl status mysqld</li>
</ul>
<h3 id="更改root密码"><a href="#更改root密码" class="headerlink" title="更改root密码"></a>更改root密码</h3><p>mysql_secure_installation</p>
<pre><code>Enter current password for root (enter for none): //当前密码,第一次使用为null
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y //设置密码
New password: /root
Re-enter new password: //root
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] n //是否删除匿名用户
... skipping.
Normally, root should only be allowed to connect from &apos;localhost&apos;. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] n //不允许root远程登录
... skipping.
By default, MySQL comes with a database named &apos;test&apos; that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] n //是否删除测试数据库
... skipping.
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y //重新加载权限表
... Success!
Cleaning up...
All done! If you&apos;ve completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
</code></pre><h3 id="登录验证"><a href="#登录验证" class="headerlink" title="登录验证"></a>登录验证</h3><p>mysql -uroot -proot</p>
<h3 id="创建数据库并授权"><a href="#创建数据库并授权" class="headerlink" title="创建数据库并授权"></a>创建数据库并授权</h3><pre><code>mysql -uroot -proot
mysql&gt; create database hive;
[授权hive在任何位置(%)远程可以登陆]
mysql&gt; grant all on hive.* to &apos;hive&apos;@&apos;%&apos; identified by &apos;hive&apos;;
mysql&gt; grant all on hive.* to &apos;hive&apos;@&apos;server1&apos; identified by &apos;hive&apos;;
mysql&gt; flush privileges; [刷新权限]
</code></pre><h2 id="下载hive1-2-1并解压"><a href="#下载hive1-2-1并解压" class="headerlink" title="下载hive1.2.1并解压"></a>下载hive1.2.1并解压</h2><blockquote>
<pre><code>wget http://archive.apache.org/dist/hive/stable/apache-hive-1.2.1-bin.tar.gz
tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /usr/local/
</code></pre></blockquote>
<h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><ul>
<li><strong>环境变量</strong></li>
</ul>
<blockquote>
<pre><code>[root@server1 hive-1.2.1]# vi /etc/profile
#HIVE
export HIVE_HOME=/usr/local/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin
</code></pre><p> [root@server1 hive-1.2.1]# source /etc/profile</p>
</blockquote>
<p>修改bin/hive-config.sh</p>
<blockquote>
<pre><code>vi /usr/local/hive-1.2.1/bin/hive-config.sh
#Install add
export JAVA_HOME=/usr/local/jdk1.7.0_79
export HIVE_HOME=/usr/local/hive-1.2.1
export HADOOP_HOME=/usr/local/hadoop-2.7.2
</code></pre></blockquote>
<p>复制配置文件</p>
<blockquote>
<pre><code>[root@server1 hive-1.2.1]# cd conf/
[root@server1 conf]# ls
beeline-log4j.properties.template hive-exec-log4j.properties.template
hive-default.xml.template hive-log4j.properties.template
hive-env.sh.template ivysettings.xml
[root@server1 conf]# cp hive-exec-log4j.properties.template hive-exec-log4j.properties
[root@server1 conf]# cp hive-log4j.properties.template hive-log4j.properties
[root@server1 conf]# cp hive-env.sh.template hive-env.sh
[root@server1 conf]# cp hive-default.xml.template hive-site.xml
</code></pre></blockquote>
<ul>
<li><strong>修改hbase-site.xml</strong></li>
</ul>
<p>修改hive-site.xml 以MySQL做metastore</p>
<pre><code>&lt;property&gt;
&lt;name&gt;javax.jdo.option.ConnectionURL&lt;/name&gt;
&lt;value&gt;jdbc:mysql://server1:3306/hive?createDatabaseIfNotExist=true&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
//mysql驱动
&lt;name&gt;javax.jdo.option.ConnectionDriverName&lt;/name&gt;
&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;
&lt;/property&gt;
//用户名
&lt;property&gt;
&lt;name&gt;javax.jdo.option.ConnectionUserName&lt;/name&gt;
&lt;value&gt;hive&lt;/value&gt;
&lt;/property&gt;
//用户密码
&lt;property&gt;
&lt;name&gt;javax.jdo.option.ConnectionPassword&lt;/name&gt;
&lt;value&gt;hive&lt;/value&gt;
&lt;/property&gt;
//默认数据库位置
&lt;property&gt;
&lt;name&gt;hive.metastore.warehouse.dir&lt;/name&gt;
&lt;value&gt;/user/hive/warehouse&lt;/value&gt;
&lt;description&gt;location of default database for the warehouse&lt;/description&gt;
&lt;/property&gt;
//hive远程metastore的thrift地址
&lt;property&gt;
&lt;name&gt;hive.metastore.uris&lt;/name&gt;
&lt;value&gt;thrift://server1:9083&lt;/value&gt;
&lt;/property&gt;
//hiveserver2的配置
&lt;property&gt;
&lt;name&gt;hive.support.concurrency&lt;/name&gt;
&lt;description&gt;Enable Hive&apos;s Table Lock Manager Service&lt;/description&gt;
&lt;value&gt;true&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.zookeeper.quorum&lt;/name&gt;
&lt;description&gt;Zookeeper quorum used by Hive&apos;s Table Lock Manager&lt;/description&gt;
&lt;value&gt;server1,server2,server3&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.zookeeper.client.port&lt;/name&gt;
&lt;value&gt;2181&lt;/value&gt;
&lt;description&gt;The port of zookeeper servers to talk to. This is only needed for read/write locks.&lt;/description&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.server2.thrift.bind.host&lt;/name&gt;
&lt;value&gt;server1&lt;/value&gt;
&lt;description&gt;Bind host on which to run the HiveServer2 Thrift interface. Can be overridden by setting $HIVE_SERVER2_THRIFT_BIND_HOST&lt;/description&gt;
&lt;/property&gt;
//关闭推测式执行,一些优化项
&lt;property&gt;
&lt;name&gt;hive.mapred.reduce.tasks.speculative.execution&lt;/name&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;mapreduce.reduce.speculative&lt;/name&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
小表mapjoin
&lt;property&gt;
&lt;name&gt;hive.ignore.mapjoin.hint&lt;/name&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.mapjoin.smalltable.filesize&lt;/name&gt;
&lt;value&gt;500000000&lt;/value&gt;
&lt;/property&gt;
并行执行
&lt;property&gt;
&lt;name&gt;hive.exec.parallel&lt;/name&gt;
&lt;value&gt;true&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.exec.parallel.thread.number&lt;/name&gt;
&lt;value&gt;16&lt;/value&gt;
&lt;/property&gt;
客户端显示
&lt;property&gt;
&lt;name&gt;hive.cli.print.current.db&lt;/name&gt;
&lt;value&gt;true&lt;/value&gt;
&lt;/property&gt;
&lt;property&gt;
&lt;name&gt;hive.cli.print.header&lt;/name&gt;
&lt;value&gt;true&lt;/value&gt;
&lt;/property&gt;
关闭自动统计
&lt;property&gt;
&lt;name&gt;hive.stats.autogather&lt;/name&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
</code></pre><p>复制mysql-connector</p>
<pre><code>[root@server1 ~]# wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz
--2016-08-04 09:20:40-- https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz
Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz [following]
--2016-08-04 09:20:45-- http://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.39.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)... 23.213.79.98
Connecting to cdn.mysql.com (cdn.mysql.com)|23.213.79.98|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3899019 (3.7M) [application/x-tar-gz]
Saving to: &apos;mysql-connector-java-5.1.39.tar.gz&apos;
100%[===================================================&gt;] 3,899,019 1.93MB/s in 1.9s
2016-08-04 09:20:47 (1.93 MB/s) - &apos;mysql-connector-java-5.1.39.tar.gz&apos; saved [3899019/3899019]
[root@server1 ~]# tar -zxvf mysql-connector-java-5.1.39.tar.gz
[root@server1 ~]# cd mysql-connector-java-5.1.39
[root@server1 mysql-connector-java-5.1.39]# cp mysql-connector-java-5.1.39-bin.jar /usr/local/hive-1.2.1/lib/
</code></pre><p>文件夹权限问题,由于permition,可能会报错。所以做如下修改</p>
<pre><code>[root@server1 hive-1.2.1]# hdfs dfs -mkdir /user/hive/
[root@server1 hive-1.2.1]# hdfs dfs -mkdir /user/hive/warehouse
[root@server1 hive-1.2.1]# hdfs dfs -chmod g+w /user/hive/warehouse
[root@server1 hive-1.2.1]# hdfs dfs -chmod 777 /tmp
</code></pre><p>如果启动报jline包错误,执行下面的语句</p>
<pre><code>[root@server1 hive-1.2.1]# export HADOOP_USER_CLASSPATH_FIRST=true
</code></pre><h2 id="启动"><a href="#启动" class="headerlink" title="启动"></a>启动</h2><ul>
<li>启动metastore</li>
</ul>
<pre><code># hive-1.2.1/bin/hive --service metastore &amp; [jobs查看]
</code></pre><ul>
<li>启动hive</li>
</ul>
<pre><code># hive-1.2.1/bin/hive
</code></pre><ul>
<li>启动hiveserver2 [jdbc服务]</li>
</ul>
<pre><code>hive-1.2.1/bin/hive --service hiveserver2 --hiveconf hive.server2.thrift.port=14000 start &amp;
[root@server1 bin]# lsof -i :14000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 23747 root 316u IPv4 3330453723 0t0 TCP server1:scotty-ft (LISTEN)
</code></pre><h2 id="测试"><a href="#测试" class="headerlink" title="测试"></a>测试</h2><ul>
<li>测试 hiverserver2</li>
</ul>
<pre><code>[root@server1 bin]# beeline
Beeline version 1.2.1 by Apache Hive
beeline&gt; !connect jdbc:hive2://server1:14000 root admin org.apache.hive.jdbc.HiveDriver
Connecting to jdbc:hive2://server1:14000
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://server1:14000&gt; create table test(id int);
No rows affected (0.184 seconds)
0: jdbc:hive2://server1:14000&gt; insert into table test values (1),(2),(3);
INFO : Number of reduce tasks is set to 0 since there&apos;s no reduce operator
INFO : number of splits:1
INFO : Submitting tokens for job: job_1469961992051_0003
INFO : The url to track the job: http://server1:23188/proxy/application_1469961992051_0003/
INFO : Starting Job = job_1469961992051_0003, Tracking URL = http://server1:23188/proxy/application_1469961992051_0003/
INFO : Kill Command = /usr/local/hadoop-2.7.2/bin/hadoop job -kill job_1469961992051_0003
INFO : Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
INFO : 2016-08-04 21:35:49,284 Stage-1 map = 0%, reduce = 0%
INFO : 2016-08-04 21:35:56,766 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 2.32 sec
INFO : MapReduce Total cumulative CPU time: 2 seconds 320 msec
INFO : Ended Job = job_1469961992051_0003
INFO : Stage-3 is selected by condition resolver.
INFO : Stage-2 is filtered out by condition resolver.
INFO : Stage-4 is filtered out by condition resolver.
INFO : Moving data to: hdfs://mycluster/user/hive/warehouse/test/.hive-staging_hive_2016-08-04_21-35-12_875_2422159926076678033-1/-ext-10000 from hdfs://mycluster/user/hive/warehouse/test/.hive-staging_hive_2016-08-04_21-35-12_875_2422159926076678033-1/-ext-10002
INFO : Loading data to table default.test from hdfs://mycluster/user/hive/warehouse/test/.hive-staging_hive_2016-08-04_21-35-12_875_2422159926076678033-1/-ext-10000
No rows affected (48.918 seconds)
0: jdbc:hive2://server1:14000&gt;
0: jdbc:hive2://server1:14000&gt; select * from test;
+----------+--+
| test.id |
+----------+--+
| 1 |
| 2 |
| 3 |
+----------+--+
3 rows selected (0.178 seconds)
</code></pre><h3 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h3><p><a href="https://www.91ri.org/13896.html" target="_blank" rel="external">https://www.91ri.org/13896.html</a><br><a href="http://www.itweet.cn/2015/07/10/hive0.13.1-install/" target="_blank" rel="external">http://www.itweet.cn/2015/07/10/hive0.13.1-install/</a><br><a href="http://sharadchhetri.com/2014/07/31/how-to-install-mysql-server-5-6-on-centos-7-rhel-7/" target="_blank" rel="external">http://sharadchhetri.com/2014/07/31/how-to-install-mysql-server-5-6-on-centos-7-rhel-7/</a></p>
</content>
<summary type="html">
SQL-on-Hadoop 之 Hive1.2.1的安装
</summary>
<category term="BigData" scheme="http://www.guinguo.top/categories/BigData/"/>
</entry>
<entry>
<title>Hbase Shell Base Use</title>
<link href="http://www.guinguo.top/2016/07/25/Hbase-Shell_Base-Use/"/>
<id>http://www.guinguo.top/2016/07/25/Hbase-Shell_Base-Use/</id>
<published>2016-07-25T09:20:40.000Z</published>
<updated>2016-09-12T03:23:19.761Z</updated>
<content type="html"><p><strong>HBase shell支持Tab键自动补全</strong><br>基于hdfs,所以底层只有put,即增删改都是增加一行记录。</p>
<h1 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h1><p>status 查看集群数据库状态</p>
<pre><code>hbase(main):001:0&gt; status
1 active master, 0 backup masters, 3 servers, 0 dead, 0.6667 average load
</code></pre><p>查看HBase 版本信息</p>
<pre><code>version
hbase(main):002:0&gt; version
1.2.2, r3f671c1ead70d249ea4598f1bbcc5151322b3a13, Fri Jul 1 08:28:55 CDT 2016
</code></pre><p>list 查看数据表</p>
<pre><code>hbase(main):003:0&gt; list
TABLE
0 row(s) in 0.1270 seconds
=&gt; []
</code></pre><p>create 创建数据表user,有user_id,info两列</p>
<pre><code>hbase(main):002:0&gt; create &apos;user&apos;,&apos;user_id&apos;,&apos;username&apos;,&apos;address&apos;,&apos;info&apos;
0 row(s) in 4.8590 seconds
=&gt; Hbase::Table - user
hbase(main):003:0&gt; list
TABLE
user
1 row(s) in 0.0650 seconds
=&gt; [&quot;user&quot;]
</code></pre><p>describe 查看表信息,对每列的描述</p>
<pre><code>hbase(main):010:0&gt; describe &apos;user&apos;
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME =&gt; &apos;address&apos;, DATA_BLOCK_ENCODING =&gt; &apos;NONE&apos;, BLOOMFILTER =&gt; &apos;ROW&apos;, REPLICATION_SCOPE
=&gt; &apos;0&apos;, VERSIONS =&gt; &apos;1&apos;, COMPRESSION =&gt; &apos;NONE&apos;, MIN_VERSIONS =&gt; &apos;0&apos;, TTL =&gt; &apos;FOREVER&apos;, KEEP
_DELETED_CELLS =&gt; &apos;FALSE&apos;, BLOCKSIZE =&gt; &apos;65536&apos;, IN_MEMORY =&gt; &apos;false&apos;, BLOCKCACHE =&gt; &apos;true&apos;
}
{NAME =&gt; &apos;info&apos;, DATA_BLOCK_ENCODING =&gt; &apos;NONE&apos;, BLOOMFILTER =&gt; &apos;ROW&apos;, REPLICATION_SCOPE =&gt;
&apos;0&apos;, VERSIONS =&gt; &apos;1&apos;, COMPRESSION =&gt; &apos;NONE&apos;, MIN_VERSIONS =&gt; &apos;0&apos;, TTL =&gt; &apos;FOREVER&apos;, KEEP_DE
LETED_CELLS =&gt; &apos;FALSE&apos;, BLOCKSIZE =&gt; &apos;65536&apos;, IN_MEMORY =&gt; &apos;false&apos;, BLOCKCACHE =&gt; &apos;true&apos;}
{NAME =&gt; &apos;user_id&apos;, DATA_BLOCK_ENCODING =&gt; &apos;NONE&apos;, BLOOMFILTER =&gt; &apos;ROW&apos;, REPLICATION_SCOPE
=&gt; &apos;0&apos;, VERSIONS =&gt; &apos;1&apos;, COMPRESSION =&gt; &apos;NONE&apos;, MIN_VERSIONS =&gt; &apos;0&apos;, TTL =&gt; &apos;FOREVER&apos;, KEEP
_DELETED_CELLS =&gt; &apos;FALSE&apos;, BLOCKSIZE =&gt; &apos;65536&apos;, IN_MEMORY =&gt; &apos;false&apos;, BLOCKCACHE =&gt; &apos;true&apos;
}
{NAME =&gt; &apos;username&apos;, DATA_BLOCK_ENCODING =&gt; &apos;NONE&apos;, BLOOMFILTER =&gt; &apos;ROW&apos;, REPLICATION_SCOPE
=&gt; &apos;0&apos;, VERSIONS =&gt; &apos;1&apos;, COMPRESSION =&gt; &apos;NONE&apos;, MIN_VERSIONS =&gt; &apos;0&apos;, TTL =&gt; &apos;FOREVER&apos;, KEE
P_DELETED_CELLS =&gt; &apos;FALSE&apos;, BLOCKSIZE =&gt; &apos;65536&apos;, IN_MEMORY =&gt; &apos;false&apos;, BLOCKCACHE =&gt; &apos;true
&apos;}
4 row(s) in 0.0520 seconds
</code></pre><p>alter 修改表结构</p>
<pre><code>hbase(main):012:0&gt; alter &apos;user&apos;,{NAME=&gt;&apos;username&apos;,METHOD=&gt;&apos;delete&apos;}
Updating all regions with the new schema...
0/1 regions updated.
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 4.5440 seconds
</code></pre><p>drop 删除表(先disable 再 drop)</p>
<pre><code>hbase(main):006:0&gt; drop &apos;temp_table&apos;
ERROR: Table temp_table is enabled. Disable it first.
Here is some help for this command:
Drop the named table. Table must first be disabled:
hbase&gt; drop &apos;t1&apos;
hbase&gt; drop &apos;ns1:t1&apos;
hbase(main):007:0&gt; disable &apos;temp_table&apos;
0 row(s) in 19.6310 seconds
hbase(main):008:0&gt; drop &apos;temp_table&apos;
0 row(s) in 1.4960 seconds
</code></pre><p>is_(dis)enabled 判断表状态</p>
<pre><code>hbase(main):010:0&gt; is_enabled &apos;user&apos;
true
0 row(s) in 0.0260 seconds
hbase(main):011:0&gt; is_disabled &apos;user&apos;
false
0 row(s) in 0.0170 seconds
</code></pre><p>put hbase不用add,使用put添加数据</p>
<pre><code>hbase(main):013:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;info:age&apos;,&apos;22&apos;
0 row(s) in 0.2990 seconds
hbase(main):014:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;info:birthday&apos;,&apos;1995-01-01&apos;
0 row(s) in 0.1280 seconds
hbase(main):015:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;info:school&apos;,&apos;scau&apos;
0 row(s) in 0.0280 seconds
hbase(main):016:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;info:contry&apos;,&apos;china&apos;
0 row(s) in 0.0080 seconds
hbase(main):017:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;info:name&apos;,&apos;guinguo&apos;
0 row(s) in 0.2350 seconds
hbase(main):018:0&gt; put &apos;user&apos;,&apos;1&apos;,&apos;address:province&apos;,&apos;guangdong&apos;
0 row(s) in 0.0600 seconds
hbase(main):019:0&gt; put &apos;user&apos;,&apos;2&apos;,&apos;info:birthday&apos;,&apos;1990-11-01&apos;
0 row(s) in 0.0170 seconds