Skip to content

Commit 2a9f7bd

Browse files
committed
modify big backend and cache
1 parent 3c3f669 commit 2a9f7bd

File tree

32 files changed

+369
-607
lines changed

32 files changed

+369
-607
lines changed

docs/big-backEnd/Hadoop生态总结.md

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,7 @@
1-
# 目录
2-
3-
* [Hadoop生态](#hadoop生态)
4-
5-
* [hdfs](#hdfs)
6-
* [架构](#架构)
7-
* [读写](#读写)
8-
* [高可用](#高可用)
9-
* [MapReduce](#mapreduce)
10-
* [架构和流程](#架构和流程)
11-
* [wordcount](#wordcount)
12-
* [hive](#hive)
13-
* [hbase](#hbase)
14-
* [简介](#简介)
15-
* [存储](#存储)
16-
* [zk](#zk)
17-
* [sqoop](#sqoop)
18-
* [yarn](#yarn)
19-
* [kafka](#kafka)
20-
* [flume](#flume)
21-
* [ambari](#ambari)
22-
* [spark](#spark)
23-
* [storm](#storm)
24-
* [微信公众号](#微信公众号)
25-
* [Java技术江湖](#java技术江湖)
26-
* [个人公众号:黄小斜](#个人公众号:黄小斜)
27-
28-
29-
30-
---
31-
32-
title: Hadoop生态学习总结
33-
date: 2018-07-08 22:15:53
34-
tags:
35-
36-
- Hadoop
37-
categories:
38-
- 后端
39-
- 技术总结
40-
41-
---
1+
[toc]
422

433
这篇总结主要是基于我之前Hadoop生态基础系列文章而形成的的。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢
444

45-
更多详细内容可以查看我的专栏文章:Hadoop生态学习
46-
47-
https://blog.csdn.net/a724888/article/category/7779280
485
<!-- more -->
496

507
# Hadoop生态

docs/big-backEnd/后端技术杂谈10:Docker 核心技术与实现原理.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
Linux 的命名空间机制提供了以下七种不同的命名空间,包括`CLONE_NEWCGROUP``CLONE_NEWIPC``CLONE_NEWNET``CLONE_NEWNS``CLONE_NEWPID``CLONE_NEWUSER``CLONE_NEWUTS`,通过这七个选项我们能在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。
4545

46-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E8%BF%9B%E7%A8%8B)进程
46+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E8%BF%9B%E7%A8%8B)进程
4747

4848
进程是 Linux 以及现在操作系统中非常重要的概念,它表示一个正在执行的程序,也是在现代分时系统中的一个任务单元。在每一个 *nix 的操作系统上,我们都能够通过`ps`命令打印出当前操作系统中正在执行的进程,比如在 Ubuntu 上,使用该命令就能得到以下的结果:
4949

@@ -100,7 +100,7 @@ daemon.containerd.Create(context.Background(), container.ID, spec, createOptions
100100

101101
所有与命名空间的相关的设置都是在上述的两个函数中完成的,Docker 通过命名空间成功完成了与宿主机进程和网络的隔离。
102102

103-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E7%BD%91%E7%BB%9C)网络
103+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E7%BD%91%E7%BB%9C)网络
104104

105105
如果 Docker 的容器通过 Linux 的命名空间完成了与宿主机进程的网络隔离,但是却有没有办法通过宿主机的网络与整个互联网相连,就会产生很多限制,所以 Docker 虽然可以通过命名空间创建一个隔离的网络环境,但是 Docker 中的服务仍然需要与外界相连才能发挥作用。
106106

@@ -151,7 +151,7 @@ $ redis-cli -h 127.0.0.1 -p 6379 pingPONG
151151

152152
Docker 通过 Linux 的命名空间实现了网络的隔离,又通过 iptables 进行数据包转发,让 Docker 容器能够优雅地为宿主机器或者其他容器提供服务。
153153

154-
#### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#libnetwork)libnetwork
154+
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#libnetwork)libnetwork
155155

156156
整个网络部分的功能都是通过 Docker 拆分出来的 libnetwork 实现的,它提供了一个连接不同容器的实现,同时也能够为应用给出一个能够提供一致的编程接口和网络层抽象的容器网络模型。
157157

@@ -165,7 +165,7 @@ libnetwork 中最重要的概念,容器网络模型由以下的几个主要组
165165

166166
> 想要获得更多与 libnetwork 或者容器网络模型相关的信息,可以阅读[Design · libnetwork](https://github.com/docker/libnetwork/blob/master/docs/design.md)了解更多信息,当然也可以阅读源代码了解不同 OS 对容器网络模型的不同实现。
167167
168-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E6%8C%82%E8%BD%BD%E7%82%B9)挂载点
168+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E6%8C%82%E8%BD%BD%E7%82%B9)挂载点
169169

170170
虽然我们已经通过 Linux 的命名空间解决了进程和网络隔离的问题,在 Docker 进程中我们已经没有办法访问宿主机器上的其他进程并且限制了网络的访问,但是 Docker 容器中的进程仍然能够访问或者修改宿主机器上的其他目录,这是我们不希望看到的。
171171

@@ -189,7 +189,7 @@ libnetwork 中最重要的概念,容器网络模型由以下的几个主要组
189189

190190
> 这一部分的内容是作者在 libcontainer 中的[SPEC.md](https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md)文件中找到的,其中包含了 Docker 使用的文件系统的说明,对于 Docker 是否真的使用`chroot`来确保当前的进程无法访问宿主机器的目录,作者其实也没有确切的答案,一是 Docker 项目的代码太多庞大,不知道该从何入手,作者尝试通过 Google 查找相关的结果,但是既找到了无人回答的[问题](https://forums.docker.com/t/does-the-docker-engine-use-chroot/25429),也得到了与 SPEC 中的描述有冲突的[答案](https://www.quora.com/Do-Docker-containers-use-a-chroot-environment),如果各位读者有明确的答案可以在博客下面留言,非常感谢。
191191
192-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#chroot)chroot

192+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#chroot)chroot

193193
在这里不得不简单介绍一下`chroot`(change root),在 Linux 系统中,系统默认的目录就都是以`/`也就是根目录开头的,`chroot`的使用能够改变当前的系统根目录结构,通过改变当前系统的根目录,我们能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构个文件,也就建立了一个与原系统完全隔离的目录结构。
194194

195195
> 与 chroot 的相关内容部分来自[理解 chroot](https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/index.html)一文,各位读者可以阅读这篇文章获得更详细的信息。
@@ -255,7 +255,7 @@ $ docker export $(docker create busybox) | tar -C rootfs -xvf -$ lsbin dev etc
255255

256256
你可以看到这个 busybox 镜像中的目录结构与 Linux 操作系统的根目录中的内容并没有太多的区别,可以说Docker 镜像就是一个文件。
257257

258-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)存储驱动
258+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)存储驱动
259259

260260
Docker 使用了一系列不同的存储驱动管理镜像内的文件系统并运行容器,这些存储驱动与 Docker 卷(volume)有些不同,存储引擎管理着能够在多个容器之间共享的存储。
261261

@@ -275,7 +275,7 @@ FROM ubuntu:15.04COPY . /appRUN make /appCMD python /app/app.py
275275

276276
![docker-images-and-container](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/2017-12-06-docker-images-and-container.png)
277277

278-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#aufs)AUFS
278+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#aufs)AUFS
279279

280280
UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文件系统服务。而 AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀的性能和效率。
281281

@@ -295,7 +295,7 @@ $ ls /var/lib/docker/aufs/diff/00adcccc1a55a36a610a6ebb3e07cc35577f2f5a3b671be3d
295295

296296
上面的这张图片非常好的展示了组装的过程,每一个镜像层都是建立在另一个镜像层之上的,同时所有的镜像层都是只读的,只有每个容器最顶层的容器层才可以被用户直接读写,所有的容器都建立在一些底层服务(Kernel)上,包括命名空间、控制组、rootfs 等等,这种容器的组装方式提供了非常大的灵活性,只读的镜像层通过共享也能够减少磁盘的占用。
297297

298-
### [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%85%B6%E4%BB%96%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)其他存储驱动
298+
## [](https://draveness.me/docker?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io#%E5%85%B6%E4%BB%96%E5%AD%98%E5%82%A8%E9%A9%B1%E5%8A%A8)其他存储驱动
299299

300300
AUFS 只是 Docker 使用的存储驱动的一种,除了 AUFS 之外,Docker 还支持了不同的存储驱动,包括`aufs``devicemapper``overlay2``zfs``vfs`等等,在最新的 Docker 中,`overlay2`取代了`aufs`成为了推荐的存储驱动,但是在没有`overlay2`驱动的机器上仍然会使用`aufs`作为 Docker 的默认驱动。
301301

docs/big-backEnd/后端技术杂谈11:十分钟理解Kubernetes核心概念.md

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,4 @@
1-
# 目录
2-
3-
* [十分钟带你理解Kubernetes核心概念](#十分钟带你理解kubernetes核心概念)
4-
* [什么是Kubernetes?](#什么是kubernetes?)
5-
* [集群](#集群)
6-
* [Pod](#pod)
7-
* [Lable](#lable)
8-
* [Replication Controller](#replication-controller)
9-
* [Service](#service)
10-
* [Node](#node)
11-
* [Kubernetes Master](#kubernetes-master)
12-
* [下一步](#下一步)
13-
14-
1+
[toc]
152
本文转自互联网,侵删
163

174
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
@@ -38,7 +25,7 @@
3825
3926
这就开始吧。
4027

41-
### 什么是Kubernetes?
28+
## 什么是Kubernetes?
4229

4330
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。
4431
使用Kubernetes可以:
@@ -58,7 +45,7 @@ $ kubectl create -f single-config-file.yaml
5845

5946
kubectl是和Kubernetes API交互的命令行程序。现在介绍一些核心概念。
6047

61-
### 集群
48+
## 集群
6249

6350
集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。下图展示这样的集群。注意该图为了强调核心概念有所简化。[这里](http://kubernetes.io/v1.1/docs/design/architecture.html)可以看到一个典型的Kubernetes架构图。
6451

@@ -84,19 +71,19 @@ kubectl是和Kubernetes API交互的命令行程序。现在介绍一些核心
8471
* Node(节点)
8572
* Kubernetes Master(Kubernetes主节点)
8673

87-
### Pod
74+
## Pod
8875

8976
[Pod](http://kubernetes.io/v1.1/docs/user-guide/pods.html)(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题:
9077

9178
* 如果Pod是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢? 是的,Kubernetes支持[](http://kubernetes.io/v1.1/docs/user-guide/volumes.html)的概念,因此可以使用持久化的卷类型。
9279
* 是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。
9380
* 如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service,下文会详细介绍。
9481

95-
### Lable
82+
## Label
9683

9784
正如图所示,一些Pod有Label。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label(**tier=frontend, app=myapp**)来标记前端Pod容器,使用Label(**tier=backend, app=myapp**)标记后台Pod。然后可以使用[Selectors](http://kubernetes.io/v1.1/docs/user-guide/labels.html#label-selectors)选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面。
9885

99-
### Replication Controller
86+
## Replication Controller
10087

10188
_是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?_
10289

@@ -112,7 +99,6 @@ Replication Controller确保任意时间都有指定数量的Pod“副本”在
11299

113100

114101

115-
[2.gif](http://dockone.io/uploads/article/20151230/5e2bad1a25e33e2d155da81da1d3a54b.gif)
116102

117103
如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动[升级](https://cloud.google.com/container-engine/docs/replicationcontrollers/#rolling_updates)时很有用。
118104

@@ -123,13 +109,13 @@ Replication Controller确保任意时间都有指定数量的Pod“副本”在
123109

124110
现在已经创建了Pod的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是Service。
125111

126-
### Service
112+
## Service
127113

128114
_如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能从前端容器正确可靠地指向后台容器呢?_
129115

130116
[Service](http://kubernetes.io/v1.1/docs/user-guide/services.html)是定义一系列Pod以及访问这些Pod的策略的一层**抽象**。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在,这也就让这一概念更难以理解。
131117

132-
现在,假定有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为(**tier=backend, app=myapp**)。_backend-service_ 的Service会完成如下两件重要的事情:
118+
现在,假定有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为(**tier=backend, app=myapp**)。_backend-service_##的Service会完成如下两件重要的事情:
133119

134120
* 会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。
135121
* 现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成。[这里](http://kubernetes.io/v1.1/docs/user-guide/services.html#virtual-ips-and-service-proxies)有更多技术细节。
@@ -150,21 +136,21 @@ _如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能
150136

151137
有一个特别类型的Kubernetes Service,称为'[LoadBalancer](http://kubernetes.io/v1.1/docs/user-guide/services.html#type-loadbalancer)',作为外部负载均衡器使用,在一定数量的Pod之间均衡流量。比如,对于负载均衡Web流量很有用。
152138

153-
### Node
139+
## Node
154140

155141
节点(上图橘色方框)是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件:
156142

157143
* Kubelet:是主节点代理。
158144
* Kube-proxy:Service使用其将链接路由到Pod,如上文所述。
159145
* Docker或Rocket:Kubernetes使用的容器技术来创建容器。
160146

161-
### Kubernetes Master
147+
## Kubernetes Master
162148

163149
集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。
164150

165-
### 下一步
151+
## 下一步
166152

167-
现在我们已经了解了Kubernetes核心概念的基本知识,你可以进一步阅读Kubernetes [用户手册](http://kubernetes.io/v1.1/docs/user-guide/README.html)。用户手册提供了快速并且完备的学习文档。
153+
现在我们已经了解了Kubernetes核心概念的基本知识,你可以进一步阅读Kubernetes##[用户手册](http://kubernetes.io/v1.1/docs/user-guide/README.html)。用户手册提供了快速并且完备的学习文档。
168154
如果迫不及待想要试试Kubernetes,可以使用[Google Container Engine](https://cloud.google.com/container-engine/docs/)。Google Container Engine是托管的Kubernetes容器环境。简单注册/登录之后就可以在上面尝试示例了。
169155

170156
**原文链接:[Learn the Kubernetes Key Concepts in 10 Minutes](http://omerio.com/2015/12/18/learn-the-kubernetes-key-concepts-in-10-minutes/)(翻译:崔婧雯)**

docs/big-backEnd/后端技术杂谈12:捋一捋大数据研发的基本概念.md

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
1-
# 目录
2-
3-
* [0x00 前言](#0x00-前言)
4-
* [0x01 数据?数据!](#0x01-数据?数据!)
5-
* [0x02 概览](#0x02-概览)
6-
* [0x03 关于内容](#0x03-关于内容)
7-
* [0xFF 总结](#0xff-总结)
8-
1+
[toc]
92

103
本文作者:[**木东居士**]
114

12-
转自个人主页[http://www.mdjs.info](https://link.jianshu.com/?t=http%3A%2F%2Fwww.mdjs.info)
5+
转自[http://www.mdjs.info](https://link.jianshu.com/?t=http%3A%2F%2Fwww.mdjs.info)
136

147
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
158
> https://github.com/h2pl/Java-Tutorial

0 commit comments

Comments
 (0)