-
Notifications
You must be signed in to change notification settings - Fork 5
/
hadoop.txt
2250 lines (1646 loc) · 73 KB
/
hadoop.txt
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
1.1 某知名连锁餐饮企业的困惑2
1.2 从餐饮服务到数据挖掘3
1.3 数据挖掘的基本任务4
1.4 数据挖掘建模过程4
1.4.1 定义挖掘目标4
1.4.2 数据取样5
1.4.3 数据探索6
1.4.4 数据预处理12
1.4.5 挖掘建模14
1.4.6 模型评价14
1.5 餐饮服务中的大数据应用15
第2章 Hadoop基础16
2.1 概述16
2.1.1 Hadoop简介16
2.1.2 Hadoop生态系统17
2.2 安装与配置19
2.3 Hadoop原理26
2.3.1 Hadoop HDFS原理26
2.3.2 Hadoop MapReduce原理27
2.3.3 Hadoop YARN原理28
2.4 动手实践30
2.5 小结33
第3章 Hadoop生态系统:Hive34
3.1 概述34
3.1.1 Hive简介34
3.1.2 Hive安装与配置35
3.2 Hive原理38
3.2.1 Hive架构38
3.2.2 Hive的数据模型40
3.3 动手实践41
3.4 小结45
第4章 Hadoop生态系统:HBase46
4.1 概述46
4.1.1 HBase简介46
4.1.2 HBase安装与配置47
4.2 HBase原理50
4.2.1 HBase架构50
4.2.2 HBase与RDBMS51
4.2.3 HBase访问接口52
4.2.4 HBase数据模型53
4.3 动手实践54
4.4 小结61
第5章 大数据挖掘建模平台62
5.1 常用的大数据平台62
5.2 TipDM-HB大数据挖掘建模平台63
5.2.1 TipDM-HB大数据挖掘建模平台的功能63
5.2.2 TipDM-HB大数据挖掘建模平台操作流程及实例65
5.2.3 TipDM-HB大数据挖掘建模平台的特点67
5.3 小结68
第6章 挖掘建模69
6.1 分类与预测69
6.1.1 实现过程69
6.1.2 常用的分类与预测算法70
6.1.3 决策树71
6.1.4 Mahout中Random Forests算法的实现原理75
6.1.5 动手实践79
6.2 聚类分析83
6.2.1 常用聚类分析算法83
6.2.2 K-Means聚类算法84
6.2.3 Mahout中K-Means算法的实现原理88
6.2.4 动手实践90
6.3 关联规则93
6.3.1 常用的关联规则算法93
6.3.2 FP-Growth关联规则算法94
6.3.3 Mahout中Parallel Frequent Pattern Mining算法的实现原理98
6.3.4 动手实践100
6.4 协同过滤102
6.4.1 常用的协同过滤算法102
6.4.2 基于项目的协同过滤算法简介102
6.4.3 Mahout中Itembased Collaborative Filtering算法的实现原理103
第7章 法律咨询数据分析与服务推荐112
7.1 背景与挖掘目标112
7.2 分析方法与过程114
7.2.1 数据抽取120
7.2.2 数据探索分析120
7.2.3 数据预处理125
7.2.4 模型构建130
7.3 上机实验139
7.4 拓展思考140
7.5 小结145
第8章 电商产品评论数据情感分析146
8.1 背景与挖掘目标146
8.2 分析方法与过程146
8.2.1 评论数据采集147
8.2.2 评论预处理150
8.2.3 文本评论分词155
8.2.4 构建模型155
第9章 航空公司客户价值分析170
9.1 背景与挖掘目标170
9.2 分析方法与过程171
9.2.1 数据抽取174
9.2.2 数据探索分析174
9.2.3 数据预处理175
9.2.4 模型构建177
9.3 上机实验182
9.4 拓展思考183
9.5 小结183
第10章 基站定位数据商圈分析184
10.1 背景与挖掘目标184
10.2 分析方法与过程186
10.2.1 数据抽取186
10.2.2 数据探索分析187
10.2.3 数据预处理188
10.2.4 构建模型191
第11章 互联网电影智能推荐196
11.1 背景与挖掘目标196
11.2 分析方法与过程197
11.2.1 数据抽取199
11.2.2 构建模型199
11.3 上机实验201
第12章 家电故障备件储备预测分析204
12.1 背景与挖掘目标204
12.2 分析方法与过程206
12.2.1 数据探索分析207
12.2.2 数据预处理209
12.2.3 构建模型212
12.3 上机实验216
12.4 拓展思考217
12.5 小结217
第13章 市供水混凝投药量控制分析218
13.1 背景与挖掘目标218
13.2 分析方法与过程220
13.2.1 数据抽取221
13.2.2 数据探索分析221
13.2.3 数据预处理223
13.2.4 构建模型227
13.3 上机实验237
13.4 拓展思考238
13.5 小结239
第14章 基于图像处理的车辆压双黄线检测240
14.1 背景与挖掘目标240
14.2 分析方法与过程241
14.2.1 数据抽取242
14.2.2 数据探索分析242
14.2.3 数据预处理242
14.2.4 构建模型249
14.3 上机实验250
14.4 拓展思考250
14.5 小结251
第15章 基于Mahout的大数据挖掘开发254
15.1 概述254
15.2 环境配置255
15.3 基于Mahout算法接口的二次开发258
15.3.1 Mahout算法实例258
15.3.2 Mahout算法接口的二次开发示例259
15.4 小结271
第16章 基于TipDM-HB的数据挖掘二次开发272
16.1 概述272
16.1.1 TipDM-HB大数据挖掘建模平台服务接口272
16.1.2 Apache CXF简介276
16.2 TipDM-HB大数据挖掘建模平台服务开发实例277
16.2.1 环境配置277
1.1 什么是大数据
1.2 大数据的用途
1.3 并行计算
1.4 数据流
1.5 函数式程序设计与Lambda演算
1.6 MapReduce
1.7 大数据处理平台
1.8 Hadoop的由来和发展
1.9 Hadoop的MapReduce计算框架
1.10 Hadoop的分布式容错文件系统HDFS
第2章 研究方法
2.1 摘要卡片
2.2 情景分析
2.3 面向对象的程序设计
2.4 怎样阅读分析Hadoop的代码
第3章 Hadoop集群和YARN
3.1 Hadoop集群
3.2 Hadoop系统的结构
3.3 Hadoop的YARN框架
3.4 状态机
3.5 资源管理器ResourceManager
3.6 资源调度器ResourceScheduler
第4章 Hadoop的RPC机制
4.1 RPC与RMI
4.2 ProtoBuf
4.3 Java的Reflection机制
4.4 RM节点上的RPC服务
4.5 RPC客户端的创建
第5章 Hadoop作业的提交
5.1 从“地方”到“中央”
5.2 示例一:采用老API的ValueAggregatorJob
5.3 示例二:采用新API的WordCount
5.4 示例三:采用ToolRunner的QuasiMonteCarlo
5.5 从Job.submit()开始的第二段流程
5.6 YARNRunner和ResourceMgrDelegate
第6章 作业的调度与指派
6.1 作业的受理
6.2 NM节点的心跳和容器周转
6.3 容器的分配
第7章 NodeManager与任务投运
7.1 AMLauncher与任务投运
7.2 MRAppMaster或AM的创建
7.3 资源本地化
7.4 容器的投运
第8章 MRAppMaster与作业投运
8.1 MRAppMaster
8.2 App资源与容器
8.3 容器的跨节点投送和启动
8.4 目标节点上的容器投运
8.5 Uber模式下的本地容器分配与投运
8.6 任务的启动
8.7 MapTask的运行
8.8 ReduceTask的投运
第9章 YARN子系统的计算框架
9.1 MapReduce框架
9.2 Streaming框架
9.3 Chain框架
9.4 Client与ApplicationMaster
第10章 MapReduce框架中的数据流
10.1 数据流和工作流
10.2 Mapper的输入
10.3 Mapper的输出缓冲区MapOutputBuffer
10.4 作为Collector的MapOutputBuffer
10.5 环形缓冲区kvbuffer
10.6 对MapoutputBuffer的输出
10.7 Sort和Spill
10.8 Map计算的终结与Spill文件的合并
10.9 Reduce阶段
10.10 Merge
10.11 Reduce阶段的输入和输出
第11章 Hadoop的文件系统HDFS
11.1 文件的分布与容错
11.2 目录节点NameNode
11.3 FSNamesystem
11.4 文件系统目录FSDirectory
11.5 文件系统映像FsImage
11.6 文件系统更改记录FSEditLog
11.7 FSEditLog与Journal
11.8 EditLog记录的重演
11.9 版本升级与故障恢复
第12章 HDFS的DataNode
12.1 DataNode
12.2 数据块的存储
12.3 RamDisk复份的持久化存储
12.4 目录扫描线程DirectoryScanner
12.5 数据块扫描线程DataBlockScanner
第13章 DataNode与NameNode的互动
13.1 DataNode与NameNode的互动
13.2 心跳HeartBeat
13.3 BlockReport
第14章 DataNode间的互动
14.1 数据块的接收和存储
14.2 命令DNA_TRANSFER的执行
第15章 HDFS的文件访问
15.1 DistributedFileSystem和DFSClient
15.2 FsShell
15.3 HDFS的打开文件流程
15.4 HDFS的读文件流程
15.5 HDFS的创建文件流程
15.6 文件租约
15.7 HDFS的写文件流程
15.8 实例
第16章 Hadoop的容错机制
16.1 容错与高可用
16.2 HDFS的HA机制
16.3 NameNode的倒换
16.4 Zookeeper与自动倒换
16.5 YARN的HA机制
第17章 Hadoop的安全机制
17.1 大数据集群的安全问题
17.2 UGI、Token和ACL
17.3 UGI的来源和流转
17.4 Token的使用
第18章 Hadoop的人机界面
18.1 Hadoop的命令行界面
18.2 Hadoop的Web界面
18.3 Dependency Inject和Annotation
18.4 对网页的访问
第19章 Hadoop的部署和启动
19.1 Hadoop的运维脚本
19.2 Hadoop的部署与启动
19.3 Hadoop的日常使用
19.4 Hadoop平台的关闭
第20章 Spark的优化与改进
20.1 Spark与Hadoop
20.2 RDD与Stage——概念与思路
20.3 RDD的存储和引用
20.4 DStream
20.5 拓扑的灵活性和多样性
20.6 性能的提升
20.7 使用的方便性
20.8 几个重要的类及其作用
参考资料
第一部分 核心设计篇
第1章 HDFS的数据存储 2
1.1 HDFS内存存储 2
1.1.1 HDFS内存存储原理 2
1.1.2 Linux 虚拟内存盘 4
1.1.3 HDFS的内存存储流程分析 4
1.1.4 LAZY_PERSIST内存存储的使用 14
1.2 HDFS异构存储 15
1.2.1 异构存储类型 16
1.2.2 异构存储原理 17
1.2.3 块存储类型选择策略 22
1.2.4 块存储策略集合 24
1.2.5 块存储策略的调用 27
1.2.6 HDFS异构存储策略的不足之处 28
1.2.7 HDFS存储策略的使用 30
1.3 小结 31
第2章 HDFS的数据管理与策略选择 32
2.1 HDFS缓存与缓存块 32
2.1.1 HDFS物理层面缓存块 33
2.1.2 缓存块的生命周期状态 34
2.1.3 CacheBlock、UnCacheBlock场景触发 36
2.1.4 CacheBlock、UnCacheBlock缓存块的确定 38
2.1.5 系统持有的缓存块列表如何更新 39
2.1.6 缓存块的使用 40
2.1.7 HDFS缓存相关配置 40
2.2 HDFS中心缓存管理 42
2.2.1 HDFS缓存适用场景 43
2.2.2 HDFS缓存的结构设计 43
2.2.3 HDFS缓存管理机制分析 45
2.2.4 HDFS中心缓存疑问点 55
2.2.5 HDFS CacheAdmin命令使用 56
2.3 HDFS快照管理 58
2.3.1 快照概念 59
2.3.2 HDFS中的快照相关命令 59
2.3.3 HDFS内部的快照管理机制 60
2.3.4 HDFS的快照使用 71
2.4 HDFS副本放置策略 72
2.4.1 副本放置策略概念与方法 72
2.4.2 副本放置策略的有效前提 73
2.4.3 默认副本放置策略的分析 73
2.4.4 目标存储好坏的判断 82
2.4.5 chooseTargets的调用 83
2.4.6 BlockPlacementPolicyWithNodeGroup继承类 84
2.4.7 副本放置策略的结果验证 85
2.5 HDFS内部的认证机制 85
2.5.1 BlockToken认证 85
2.5.2 HDFS的Sasl认证 91
2.5.3 BlockToken认证与HDFS的Sasl认证对比 97
2.6 HDFS内部的磁盘目录服务 98
2.6.1 HDFS的三大磁盘目录检测扫描服务 98
2.6.2 DiskChecker:坏盘检测服务 99
2.6.3 DirectoryScanner:目录扫描服务 104
2.6.4 VolumeScanner:磁盘目录扫描服务 110
2.7 小结 116
第3章 HDFS的新颖功能特性 117
3.1 HDFS视图文件系统:ViewFileSystem 117
3.2 HDFS的Web文件系统:WebHdfsFileSystem 126
3.3 HDFS数据加密空间:Encryption zone 136
3.4 HDFS纠删码技术 145
3.5 HDFS对象存储:Ozone 152
3.6 小结 158
第二部分 细节实现篇
第4章 HDFS的块处理 160
4.1 HDFS块检查命令fsck 160
4.2 HDFS如何检测并删除多余副本块 171
4.3 HDFS数据块的汇报与处理 179
4.4 小结 193
第5章 HDFS的流量处理 194
5.1 HDFS的内部限流 194
5.2 数据平衡 204
5.3 HDFS节点内数据平衡 210
第6章 HDFS的部分结构分析 217
6.1 HDFS镜像文件的解析与反解析 217
6.2 DataNode数据处理中心DataXceiver 227
6.3 HDFS邻近信息块:BlockInfoContiguous 235
6.4 小结 246
第三部分 解决方案篇
第7章 HDFS的数据管理 248
7.1 HDFS的读写限流方案 248
7.2 HDFS数据资源使用量分析以及趋势预测 250
7.3 HDFS数据迁移解决方案 257
7.4 DataNode迁移方案 265
7.5 HDFS集群重命名方案 268
7.6 HDFS的配置管理方案 271
第8章 HDFS的数据读写 274
8.1 DataNode引用计数磁盘选择策略 274
8.2 Hadoop节点“慢磁盘”监控 282
第9章 HDFS的异常场景 288
9.1 DataNode慢启动问题 288
9.2 Hadoop中止下线操作后大量剩余复制块问题 295
9.3 DFSOutputStream的DataStreamer线程泄漏问题 306
9.4 小结 319
附录 如何向开源社区提交自己的代码 320
序 xi
前言 xii
第1 章 引言 1
1.1 安全概览 1
1.1.1 机密性 2
1.1.2 完整性 2
1.1.3 可用性 2
1.1.4 验证、授权和审计 3
1.2 Hadoop 安全:简史 5
1.3 Hadoop 组件和生态系统 5
1.3.1 Apache HDFS 6
1.3.2 Apache YARN 7
1.3.3 Apache MapReduce 8
1.3.4 Apache Hive 9
1.3.5 Cloudera Impala 9
1.3.6 Apache Sentry 10
1.3.7 Apache HBase 11
1.3.8 Apache Accumulo 11
1.3.9 Apache Solr.13
1.3.10 Apache Oozie 13
1.3.11 Apache ZooKeeper 13
1.3.12 Apache Flume .13
1.3.13 Apache Sqoop .14
vi | 目录
1.3.14 Cloudera Hue 14
1.4 小结 .14
第一部分 安全架构
第2 章 保护分布式系统 .16
2.1 威胁种类 17
2.1.1 非授权访问/伪装 17
2.1.2 内在威胁 .17
2.1.3 拒绝服务 .18
2.1.4 数据威胁 .18
2.2 威胁和风险评估 18
2.2.1 用户评估 .19
2.2.2 环境评估 .19
2.3 漏洞 .19
2.4 深度防御 20
2.5 小结 .21
第3 章 系统架构 22
3.1 运行环境 22
3.2 网络安全 23
3.2.1 网络划分 .23
3.2.2 网络防火墙 24
3.2.3 入侵检测和防御 .25
3.3 Hadoop 角色和隔离策略 27
3.3.1 主节点 28
3.3.2 工作节点 .29
3.3.3 管理节点 .29
3.3.4 边界节点 .30
3.4 操作系统安全 31
3.4.1 远程访问控制 31
3.4.2 主机防火墙 31
3.4.3 SELinux 33
3.5 小结 .34
第4 章 Kerberos 35
4.1 为什么是Kerberos .35
4.2 Kerberos 概览 36
4.3 Kerberos 工作流:一个简单示例 .37
目录 | vii
4.4 Kerberos 信任 38
4.5 MIT Kerberos .39
4.5.1 服务端配置 41
4.5.2 客户端配置 44
4.6 小结 .46
第二部分 验证、授权和审计
第5 章 身份和验证 .48
5.1 身份 .48
5.1.1 将Kerberos 主体映射为用户名 .49
5.1.2 Hadoop 用户到组的映射 50
5.1.3 Hadoop 用户配置 54
5.2 身份验证 54
5.2.1 Kerberos 55
5.2.2 用户名和密码验证 56
5.2.3 令牌 56
5.2.4 用户模拟 .59
5.2.5 配置 60
5.3 小结 .70
第6 章 授权 71
6.1 HDFS 授权 71
HDFS 扩展ACL .72
6.2 服务级授权 .74
6.3 MapReduce 和YARN 的授权 .85
6.3.1 MapReduce(MR1) 86
6.3.2 YARN (MR2) 87
6.6 HBase 和Accumulo 的授权 95
6.6.1 系统、命名空间和表级授权 95
6.6.2 列级别和单元级别授权 .99
6.7 小结 .99
第7 章 Apache Sentry(孵化中) 100
7.1 Sentry 概念 100
7.2 Sentry 服务 102
7.3 Hive 授权 105
7.4 Impala 授权 110
7.5 Solr 授权 112
viii | 目录
7.6 Sentry 特权模型 113
7.6.1 SQL 特权模型 114
7.6.2 Solr 特权模型 .116
7.7 Sentry 策略管理 118
7.7.1 SQL 命令 118
7.7.2 SQL 策略文件 121
7.7.3 Solr 策略文件 .123
7.7.4 策略文件的验证和校验 124
7.7.5 从策略文件迁移 126
7.8 小结 127
第8 章 审计 .128
8.1 HDFS 审计日志 .129
8.2 MapReduce 审计日志 .130
8.3 YARN 审计日志132
8.4 Hive 审计日志 134
8.5 Cloudera Impala 审计日志 134
8.6 HBase 审计日志 135
8.7 Accumulo 审计日志 137
8.8 Sentry 审计日志 139
8.9 日志聚合 140
8.10 小结 141
第三部分 数据安全
第9 章 数据保护 .144
9.1 加密算法 144
9.2 静态数据加密 .145
9.2.1 加密和密钥管理 146
9.2.2 HDFS 静态数据加密 .146
9.2.3 MapReduce2 中间数据加密 151
9.2.4 Impala 磁盘溢出加密 152
9.2.5 全盘加密 152
9.2.6 文件系统加密 154
9.2.7 Hadoop 中重要数据的安全考虑 .155
9.3 动态数据加密 .156
9.3.1 传输层安全 .156
9.3.2 Hadoop 动态数据加密 157
目录 | ix
9.4 数据销毁和删除 162
9.5 小结 163
第10 章 数据导入安全 .164
10.1 导入数据的完整性 165
10.2 数据导入的机密性 166
10.2.1 Flume 加密 167
10.2.2 Sqoop 加密 173
10.3 导入工作流 178
10.4 企业架构 .179
10.5 小结 180
第11 章 数据提取和客户端访问安全 181
11.1 Hadoop 命令行接口 .182
11.2 保护应用安全 183
11.3 HBase 184
11.3.1 HBase shell 184
11.3.2 HBase REST 网关 186
11.3.3 HBase Thrift 网关 189
11.4 Accumulo 190
11.4.1 Accumulo shell 190
11.4.2 Accumulo 代理服务 192
11.5 Oozie .192
11.6 Sqoop .194
11.7 SQL 访问 195
11.7.1 Impala .195
11.7.2 Hive .200
11.8 WebHDFS/HttpFS 208
11.9 小结 209
第12 章 Cloudera Hue .210
12.1 Hue HTTPS 211
12.2 Hue 身份验证 212
12.2.1 SPNEGO 后端 212
12.2.2 SAML 后端 .213
12.2.3 LDAP 后端 .215
12.3 Hue 授权 .218
12.4 Hue SSL 客户端配置 219
12.5 小结 219
x | 目录
第四部分 综合应用
第13 章 案例分析 .222
13.1 案例分析:Hadoop 数据仓库 222
13.1.1 环境搭建 223
13.1.2 用户体验 226
13.1.3 小结 .229
13.2 案例分析:交互式HBase Web 应用 .230
13.2.1 设计与架构 .230
13.2.2 安全需求 231
13.2.3 集群配置 232
13.2.4 实现中的注意事项 .236
13.2.5 小结 .237
后记 .238
关于作者 .240
关于封面 .240
第1章 绪论 3
1.1 时代背景 3
1.1.1 全球大数据浪潮 3
1.1.2 我国的大数据国家战略 5
1.2 大数据的概念 7
1.2.1 概念 7
1.2.2 特征 8
1.3 技术支撑体系 9
1.3.1 概览 9
1.3.2 大数据采集层 9
1.3.3 大数据存储层 10
1.3.4 大数据分析(处理与服务)层 11
1.3.5 大数据应用层 11
1.3.6 垂直视图 13
1.4 大数据人才及其能力要求 14
1.4.1 首席数据官 14
1.4.2 数据科学家(数据分析师) 15
1.4.3 大数据开发工程师 16
1.4.4 大数据运维工程师 17
1.5 本章小结 17
第2章 Hadoop大数据关键技术 19
2.1 Hadoop生态系统 19
2.1.1 架构的基本理论 19
2.1.2 主要组件及其关系 21
2.2 数据采集 24
2.2.1 结构化数据采集工具 24
2.2.2 日志文件采集工具与技术 25
2.3 大数据存储技术 29
2.3.1 相关概念 29
2.3.2 分布式文件存储系统 34
2.3.3 数据库与数据仓库 38
2.4 分布式计算框架 43
2.4.1 离线计算框架 43
2.4.2 实时流计算平台 50
2.5 数据分析平台与工具 57
2.5.1 面向大数据的数据挖掘与分析工具 57
2.5.2 机器学习 61
2.6 本章小结 66
第二篇 Hadoop大数据平台搭建与基本应用
第3章 Linux操作系统与集群搭建 69
3.1 Linux操作系统 69
3.1.1 概述 69
3.1.2 特点 70
3.1.3 Linux的组成 72
3.2 Linux安装与集群搭建 75
3.2.1 安装VMware Workstation 75
3.2.2 在VMware上安装Linux(CentOS7) 79
3.3 集群的配置 91
3.3.1 设置主机名 91
3.3.2 网络设置 93
3.3.3 关闭防火墙 98
3.3.4 安装JDK 99
3.3.5 免密钥登录配置 102
3.4 Linux基本命令 105
3.5 本章小结 112
第4章 HDFS安装与基本应用 113
4.1 HDFS概述 113
4.1.1 特点 113
4.1.2 主要组件与架构 114
4.2 HDFS架构分析 114
4.2.1 数据块 114
4.2.2 NameNode 115
4.2.3 DataNode 116
4.2.4 SecondaryNameNode 117
4.2.5 数据备份 117
4.2.6 通信协议 118
4.2.7 可靠性保证 118
4.3 文件操作过程分析 119
4.3.1 读文件 119
4.3.2 写文件 120
4.3.3 删除文件 122
4.4 Hadoop HDFS安装与配置 122
4.4.1 解压Hadoop安装包 122
4.4.2 配置Hadoop环境变量 123
4.4.3 配置Yarn环境变量 124
4.4.4 配置核心组件文件 125
4.4.5 配置文件系统 125
4.4.6 配置yarn-site.xml文件 126
4.4.7 配置MapReduce计算框架文件 128
4.4.8 配置Master的slaves文件 129
4.4.9 复制Master上的Hadoop到Slave节点 129
4.5 Hadoop集群的启动 130
4.5.1 配置操作系统环境变量 130
4.5.2 创建Hadoop数据目录 131
4.5.3 格式化文件系统 132
4.5.4 启动和关闭Hadoop 133
4.5.5 验证Hadoop是否启动成功 133
4.6 Hadoop集群的基本应用 136
4.6.1 HDFS基本命令 136
4.6.2 在Hadoop集群中运行程序 139
4.7 本章小结 141
第5章 MapReduce与Yarn 143
5.1 MapReduce程序的概念 143
5.1.1 基本编程模型 143
5.1.2 计算过程分析 144
5.2 深入理解Yarn 147
5.2.1 Yarn的基本架构 147
5.2.2 Yarn的工作流程 151
5.3 在Linux平台安装Eclipse 152
5.3.1 Eclipse简介 153
5.3.2 安装并启动Eclipse 154
5.4 开发MapReduce程序的基本方法 155
5.4.1 为Eclipse安装Hadoop插件 156
5.4.2 WordCount:第一个MapReduce程序 160
5.5 本章小结 175
第6章 Hive和HBase的安装与应用 177
6.1 在CentOS7下安装MySQL 177
6.1.1 下载或复制MySQL安装包 177
6.1.2 执行安装命令 178
6.1.3 启动MySQL 179
6.1.4 登录MySQL 179
6.1.5 使用MySQL 181
6.1.6 问题与解决办法 182
6.2 Hive安装与应用 183
6.2.1 下载并解压Hive安装包 183
6.2.2 配置Hive 184
6.2.3 启动并验证Hive 187
6.2.4 Hive的基本应用 189
6.3 ZooKeeper集群安装 190
6.3.1 ZooKeeper简介 190
6.3.2 安装ZooKeeper 191
6.3.3 配置ZooKeeper 191
6.3.4 启动和测试 193
6.4 HBase的安装与应用 195
6.4.1 解压并安装HBase 195
6.4.2 配置HBase 196
6.4.3 启动并验证HBase 199
6.4.4 HBase的基本应用 200
6.4.5 应用HBase中常见问题及其解决办法 203
6.5 本章小结 204
第7章 Sqoop和Kafka的安装与应用 205
7.1 安装部署Sqoop 205
7.1.1 下载或复制Sqoop安装包 205
7.1.2 解压并安装Sqoop 206
7.1.3 配置Sqoop 206
7.1.4 启动并验证Sqoop 208
7.1.5 测试Sqoop与MySQL的连接 209
7.2 安装部署Kafka集群 211
7.2.1 下载或复制Kafka安装包 211
7.2.2 解压缩Kafka安装包 211
7.2.3 配置Kafka集群 211
7.2.4 Kafka的初步应用 213
7.3 本章小结 218
第8章 Spark集群安装与开发环境配置 219
8.1 深入理解Spark 219
8.1.1 Spark系统架构 219
8.1.2 关键概念 221
8.2 安装与配置Scala 224
8.2.1 下载Scala安装包 225
8.2.2 安装Scala 225
8.2.3 启动并应用Scala 226
8.3 Spark集群的安装与配置 226
8.3.1 安装模式 226
8.3.2 Spark的安装 227
8.3.3 启动并验证Spark 230
8.3.4 几点说明 234
8.4 开发环境安装与配置 236
8.4.1 IDEA简介 236
8.4.2 IDEA的安装 236
8.4.3 IDEA的配置 238
8.5 本章小结 243
第9章 Spark应用基础 245
9.1 Spark程序的运行模式 245
9.1.1 Spark on Yarn-cluster 245
9.1.2 Spark on Yarn-client 246
9.2 Spark应用设计 247
9.2.1 分布式估算圆周率 248
9.2.2 基于Spark MLlib的贷款风险预测 265
9.3 本章小结 285
第三篇 数据处理与项目开发术
第10章 交互式数据处理 289
10.1 数据预处理 289
10.1.1 查看数据 289
10.1.2 数据扩展 291
10.1.3 数据过滤 292
10.1.4 数据上传 293
10.2 创建数据仓库 294
10.2.1 创建Hive数据仓库的基本命令 294
10.2.2 创建Hive分区表 296
10.3 数据分析 299
10.3.1 基本统计 299
10.3.2 用户行为分析 301
10.3.3 实时数据 303
10.4 本章小结 304
第11章 协同过滤推荐系统 305
11.1 推荐算法概述 305
11.1.1 基于人口统计学的推荐 305
11.1.2 基于内容的推荐 306
11.1.3 协同过滤推荐 307
11.2 协同过滤推荐算法分析 308
11.2.1 基于用户的协同过滤推荐 308
11.2.2 基于物品的协同过滤推荐 310
11.3 Spark MLlib推荐算法应用 312
11.3.1 ALS算法原理 312
11.3.2 ALS的应用设计 315
11.4 本章小结 329
第12章 销售数据分析系统 331
12.1 数据采集 331
12.1.1 在Windows下安装JDK 331
12.1.2 在Windows下安装Eclipse 334
12.1.3 将WebCollector项目导入Eclipse 335
12.1.4 在Windows下安装MySQL 336
12.1.5 连接JDBC 339
12.1.6 运行爬虫程序 340
12.2 在HBase集群上准备数据 342
12.2.1 将数据导入到MySQL 342
12.2.2 将MySQL表中的数据导入到HBase表中 344
12.3 安装Phoenix中间件 347
12.3.1 Phoenix架构 347
12.3.2 解压安装Phoenix 348
12.3.3 Phoenix环境配置 349
12.3.4 使用Phoenix 350
12.4 基于Web的前端开发 353
12.4.1 将Web前端项目导入Eclipse 353
12.4.2 安装Tomcat 355
12.4.3 在Eclipse中配置Tomcat 355
12.4.4 在Web浏览器中查看执行结果 359
12.5 本章小结 361
任 务 命 令
3.1 脚 本 配 置
3.1.1 Shell脚本
Shell是用C语言编写的程序,它是用户使用Linux内核的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell应用程序提供了一个界面,用户通过这个界面可以访问操作内核的服务。关于Shell的讲解视频可扫描二维码观看。
Shell脚本(Shell Script)是一种为Shell编写的脚本程序。业界所说的Shell通常是指Shell脚本,但Shell和Shell Script是两个不同的概念。
Shell编程跟Java、PHP编程一样,只需要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器。
Linux的Shell种类众多,常见的有:
* Bourne Shell(/usr/bin/sh或/bin/sh)
* Bourne Again Shell(/bin/bash)
* C Shell(/usr/bin/csh)
* K Shell(/usr/bin/ksh)
* Shell for Root(/sbin/sh)
…
3.1.2 Shell变量
关于Shell变量的讲解视频可扫描二维码观看。
Linux的Shell编程是一种非常成熟的编程语言,它支持各种类型的变量。有三种主要的变量类型:环境变量、局部变量和Shell变量。
环境变量:所有的程序,包括Shell启动程序,都能访问环境变量。有些程序需要环境变量来保证其正常运行,必要的时候Shell脚本也可以自定义环境变量。
局部变量:局部变量是在脚本或命令中定义,仅在当前Shell实例中有效,其他Shell程序不能访问的局部变量。
Shell变量:Shell变量是由Shell程序设置的特殊变量。Shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了Shell的正常运行。
Shell编程和其他编程语言的主要不同之处是:在Shell编程中,变量是非类型性质的,不必指定变量是数字类型还是字符串类型。
1.局部变量
Shell编程中,使用局部变量无须事先声明,同时变量名的命名须遵循如下规则:
* 首个字符必须为字母(a~z,A~Z)。
* 中间不能有空格,可以使用下画线(_)。
* 不能使用标点符号。
* 不能使用bash中的关键字(可以用help命令查看保留关键字)。
2.局部变量赋值
变量赋值的格式:
变量名=值
访问变量值:取用一个变量的值,只需在变量名前面加一个$。
示例如下:
#!/bin/bash
# 对变量赋值:
a="hello world" #等号两边均不能有空格存在
# 打印变量a的值:
echo -e "A is: $a\n"
备注:bash中变量赋值,等号两边均不能有空格存在。
可以使用自己喜欢的编辑器,输入上述内容,并保存为文件test_hello.bsh,然后执行 chmod +x test_hello.bsh使其具有执行权限,最后输入“./test_hello”或“bash test_hello.bsh”执行该脚本。
程序运行结果:
A is: hello world
有时候变量名可能会和其他文字混淆,例如:
num=1
echo "this is the $numst"
上述脚本并不会输出"this is the 1st"而是"this is the ",这是由于Shell会去搜索变量 numst的值,而实际上这个变量并未赋值,可以用大括号来告诉 Shell 把 num 变量跟其他部分 分开。num=1
echo "this is the ${num}st"
程序运行结果:
this is the 1st
3.1.3 Shell传递参数
关于Shell传递参数的讲解视频可扫描二维码观看。
1.普通字符
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n。n代表一个数据,n=1为执行脚本的第一个参数,n=2为执行脚本的第二个参数,以此类推。
示例如下:以下代码向脚本传递三个参数,并分别输出。
#!/bin/bash
echo “Shell传递参数实例!”;
echo “第一个参数为$1”;
echo “第二个参数为$2”;
echo “第三个参数为$3”;
为脚本设置可执行权限后,并执行脚本,输出结果如下所示:
[root@localhost ~]# chmod u+x test.sh
[root@localhost ~]# ./test.sh 1 8 89
打印结果:
Shell传递参数实例!
第一个参数为:1
第二个参数为:8
第三个参数为:89
第Ⅰ部分 Hadoop架构与Hadoop集群介绍
第1章 Hadoop与Hadoop环境介绍............................................................................... 3
Hadoop简介.........................................................................................................................4
Hadoop 的特性............................................................................................................5
Hadoop 与大数据........................................................................................................5
Hadoop 的典型应用场景............................................................................................6
传统数据库系统..........................................................................................................7
数据湖..........................................................................................................................9
大数据、数据科学和Hadoop ..................................................................................10
Hadoop集群与集群计算................................................................................................... 11
集群计算.................................................................................................................... 11
Hadoop 集群..............................................................................................................12
Hadoop组件和Hadoop生态..............................................................................................14
Hadoop管理员需要做些什么...........................................................................................16
Hadoop 管理—新的范式......................................................................................17
关于Hadoop 管理你需要知道的.............................................................................18
Hadoop 管理员的工具集..........................................................................................19
Hadoop 1和Hadoop 2的关键区别....................................................................................19
架构区别....................................................................................................................20
高可用性....................................................................................................................20
多计算引擎................................................................................................................21
xiv 目录
分离处理和调度........................................................................................................21
Hadoop 1 和Hadoop 2 中的资源分配.....................................................................22
分布式数据处理:MapReduce和Spark、Hive、Pig ......................................................22
MapReduce ................................................................................................................22
Apache Spark .............................................................................................................23
Apache Hive ...............................................................................................................24
Apache Pig .................................................................................................................24
数据整合:Apache Sqoop、Apache Flume和Apache Kafka ..........................................25
Hadoop管理中的关键领域...............................................................................................26
集群存储管理............................................................................................................26
集群资源分配............................................................................................................26
作业调度....................................................................................................................27
Hadoop 数据安全......................................................................................................27
总结....................................................................................................................................28
第2章 Hadoop架构介绍............................................................................................. 31
Hadoop与分布式计算..................................
1.2数据的存储与分析5
1.3查询所有数据6
1.5相较于其他系统的优势8
1.6ApacheHadoop发展简史12
第2章关于MapReduce19
2.1气象数据集19
2.2使用Unix工具来分析数据21
2.3使用Hadoop来分析数据22
2.4横向扩展31
2.5HadoopStreaming37
第3章Hadoop分布式文件系统42
3.1HDFS的设计42
3.2HDFS的概念44
3.3命令行接口50
3.4Hadoop文件系统52
3.5Java接口56
3.6数据流68
3.7通过distcp并行复制76
第4章关于YARN78
4.1剖析YARN应用运行机制79
4.2YARN与MapReduce1相比82
4.3YARN中的调度85
4.4延伸阅读95
第5章Hadoop的I/O操作96
5.1数据完整性96
5.2压缩99
5.3序列化109
5.4基于文件的数据结构127
第Ⅱ部分关于MapReduce
第6章MapReduce应用开发141
6.1用于配置的API142
6.2配置开发环境144
6.3用MRUnit来写单元测试152
6.4本地运行测试数据156
6.5在集群上运行160
6.6作业调优174
6.7MapReduce的工作流176
第7章MapReduce的工作机制184
7.1剖析MapReduce作业运行
机制184
7.2失败191
7.3shuffle和排序195
7.4任务的执行201
第8章MapReduce的
类型与格式207
8.1MapReduce的类型207
8.2输入格式218
8.3输出格式236
第9章MapReduce的特性243
9.1计数器243
9.2排序252
9.3连接264
9.4边数据分布270
9.5MapReduce库类276
第Ⅲ部分Hadoop的操作
第10章构建Hadoop集群279
10.1集群规范280
10.2集群的构建和安装284
10.3Hadoop配置288