CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng trên blog CFSDN này là hướng dẫn xây dựng cụm Hadoop có tính khả dụng cao dựa trên ZooKeeper. Tác giả đã thu thập và biên soạn hướng dẫn. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.
Mục lục.
- 1. Giới thiệu về tính khả dụng cao
- 1.1 Kiến trúc tổng thể có tính khả dụng cao
- 1.2 Phân tích cơ chế đồng bộ dữ liệu của hệ thống lưu trữ chia sẻ dựa trên QJM
- 1.3 Chuyển đổi NameNode Active/Slave
- 1.4 YARN Tính khả dụng cao
- 2. Lập kế hoạch cụm
- 3. Điều kiện tiên quyết JDK được cài đặt trên tất cả các máy chủ. Để biết các bước cài đặt, hãy xem: Cài đặt JDK trên Linux; Cụm ZooKeeper được xây dựng. Để biết các bước xây dựng, hãy xem: Môi trường độc lập Zookeeper và xây dựng môi trường cụm. Đăng nhập SSH không cần mật khẩu được cấu hình giữa tất cả các máy chủ.
- 4. Cấu hình cụm
- 4.1 Tải xuống và giải nén
- 4.3 Sửa đổi cấu hình
- 4.4 Thủ tục phân phối
- 5.1 Khởi động ZooKeeper
- 5.2 Bắt đầu Journalnode
- 5.3 Khởi tạo NameNode
- 5.4 Khởi tạo trạng thái HA
- 5.5 Khởi động HDFS
- 5.6 Sợi len bắt đầu
- 6. Xem cụm
- 6.1 Xem Quy trình
- 6.2 Xem Giao diện người dùng web
- 7. Khởi động thứ cấp của cụm
1. Giới thiệu về tính khả dụng cao
.
Hadoop high availability được chia thành HDFS high availability và YARN high availability. Việc triển khai hai loại này về cơ bản là giống nhau, nhưng HDFS NameNode có yêu cầu cao hơn nhiều về lưu trữ dữ liệu và tính nhất quán so với YARN ResourceManager, do đó việc triển khai của nó phức tạp hơn. Do đó, chúng tôi sẽ giải thích trước:
1.1 Kiến trúc tổng thể có tính khả dụng cao.
Kiến trúc tính khả dụng cao của HDFS như sau:
Hình ảnh được trích dẫn từ: https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/.
Kiến trúc tính khả dụng cao của HDFS chủ yếu bao gồm các thành phần sau:
- Namenode đang hoạt động và namenode dự phòng:Hai namenode tạo thành sao lưu lẫn nhau, một ở trạng thái hoạt động, là namenode chính, và một ở trạng thái chờ, là namenode dự phòng. Chỉ có namenode chính mới có thể cung cấp dịch vụ đọc và ghi cho thế giới bên ngoài.
- Bộ điều khiển chuyển mạch chủ động/chờ zkfailovercontroller: zkfailovercontroller chạy như một tiến trình độc lập và thực hiện kiểm soát toàn diện việc chuyển đổi chủ/tớ của namenode. zkfailovercontroller có thể phát hiện trạng thái sức khỏe của namenode kịp thời và sử dụng zookeeper để thực hiện bầu chọn và chuyển đổi master-slave tự động khi namenode master bị lỗi. Tất nhiên, namenode hiện cũng hỗ trợ chuyển đổi master-slave thủ công không phụ thuộc vào zookeeper.
- Cụm người trông coi sở thú: Cung cấp hỗ trợ bầu cử chủ động/chờ cho bộ điều khiển chuyển mạch chủ động/chờ.
- Hệ thống lưu trữ chia sẻ:Hệ thống lưu trữ chia sẻ là phần quan trọng nhất để đạt được tính khả dụng cao của NameNode. Hệ thống lưu trữ chia sẻ lưu siêu dữ liệu HDFS do NameNode tạo ra trong quá trình hoạt động của nó. Namenode chính và namenode đồng bộ hóa siêu dữ liệu thông qua hệ thống lưu trữ được chia sẻ. Khi thực hiện chuyển đổi chủ-tớ, namenode chủ mới chỉ có thể tiếp tục cung cấp dịch vụ sau khi xác nhận rằng siêu dữ liệu đã được đồng bộ hóa hoàn toàn.
- nút dữ liệu:Ngoài việc chia sẻ thông tin siêu dữ liệu HDFS thông qua hệ thống lưu trữ dùng chung, namenode chính và namenode dự phòng cũng cần chia sẻ mối quan hệ ánh xạ giữa các khối dữ liệu HDFS và datanode. Datanode sẽ báo cáo thông tin vị trí của khối dữ liệu cho namenode chính và namenode dự phòng cùng một lúc.
1.2 Phân tích cơ chế đồng bộ dữ liệu của hệ thống lưu trữ chia sẻ dựa trên qjm.
Hiện tại, Hadoop hỗ trợ sử dụng trình quản lý nhật ký số (qjm) hoặc hệ thống tệp mạng (nfs) làm hệ thống lưu trữ chia sẻ. Ở đây, chúng tôi lấy cụm qjm làm ví dụ: nút tên hoạt động trước tiên gửi nhật ký chỉnh sửa đến cụm nút tên nhật ký, sau đó nút tên dự phòng đồng bộ hóa nhật ký chỉnh sửa từ cụm nút tên nhật ký theo định kỳ. Khi nút tên hoạt động ngừng hoạt động, nút tên dự phòng có thể cung cấp các dịch vụ bên ngoài sau khi xác nhận rằng siêu dữ liệu đã được đồng bộ hóa hoàn toàn.
Cần lưu ý rằng việc ghi editlog vào cụm journalnode tuân theo chiến lược "thành công nếu hơn một nửa số mục được ghi", do đó bạn phải có ít nhất 3 nút journalnode. Tất nhiên, bạn có thể tiếp tục tăng số lượng nút, nhưng tổng số nút phải là số lẻ. Đồng thời, nếu có 2n+1 journalnode, thì theo nguyên tắc ghi đa số, chỉ có thể chấp nhận tối đa n journalnode bị lỗi.
1.3 Chuyển đổi chủ/tớ của Namenode.
Quá trình thực hiện chuyển mạch chủ động/chờ của namenode được thể hiện trong hình bên dưới:
-
Sau khi healthmonitor được khởi tạo, nó sẽ bắt đầu một luồng nội bộ để định kỳ gọi phương thức giao diện rpc haserviceprotocol của namenode tương ứng để phát hiện trạng thái hoạt động của namenode.
-
Nếu healthmonitor phát hiện trạng thái hoạt động của namenode đã thay đổi, nó sẽ gọi lại phương thức tương ứng đã được zkfailovercontroller đăng ký để xử lý.
-
Nếu zkfailovercontroller xác định cần có công tắc chủ-tớ, trước tiên nó sẽ sử dụng activestandbyelector để tự động bầu chọn chủ-tớ.
-
ActiveStandbyElector tương tác với Zookeeper để hoàn tất việc bầu chọn chủ-tớ tự động.
-
Sau khi bộ bầu cử dự phòng chủ động hoàn tất cuộc bầu cử dự phòng chính, nó sẽ gọi lại phương thức tương ứng của zkfailovercontroller để thông báo cho namenode hiện tại trở thành namenode chính hoặc namenode dự phòng.
-
zkfailovercontroller gọi phương thức giao diện rpc haserviceprotocol của namenode tương ứng để chuyển đổi namenode sang trạng thái hoạt động hoặc trạng thái chờ.
1.4 YARN có tính khả dụng cao
Tính khả dụng cao của yarn resourcemanager tương tự như hdfs namenode, nhưng không giống như namenode, resourcemanager không có nhiều thông tin siêu dữ liệu để duy trì, do đó thông tin trạng thái của nó có thể được ghi trực tiếp vào zookeeper và dựa vào zookeeper để bầu chọn chủ-tớ.
2. Lập kế hoạch cụm
.
Theo mục tiêu thiết kế tính khả dụng cao: cần đảm bảo có ít nhất hai namenode (một hoạt động và một dự phòng) và hai resourcemanager (một hoạt động và một dự phòng). Đồng thời, để đáp ứng nguyên tắc "hơn một nửa số lần ghi thành công", phải có ít nhất 3 nút journalnode. Có ba máy chủ được sử dụng ở đây để xây dựng và quy hoạch cụm như sau:
3. Điều kiện tiên quyết
.
- Tất cả các máy chủ đều được cài đặt JDK. Để biết các bước cài đặt, hãy xem: Cài đặt JDK trên Linux;
- Xây dựng một cụm người quản lý sở thú. Để biết các bước xây dựng, hãy tham khảo: Xây dựng một môi trường độc lập của người quản lý sở thú và một môi trường cụm
- Cấu hình đăng nhập SSH không cần mật khẩu giữa tất cả các máy chủ.
4. Cấu hình cụm
.
4.1 Tải xuống và giải nén.
Tải hadoop. Ở đây tôi tải xuống phiên bản cdh của hadoop, địa chỉ tải xuống là: http://archive.cloudera.com/cdh5/cdh/5/.
?
1
|
# tar -zvxf hadoop-2.6.0-cdh5.15.2.tar.gz
|
4.2 Cấu hình biến môi trường.
Chỉnh sửa tệp hồ sơ:
Thêm cấu hình sau:
?
1
2
|
xuất hadoop_home=/usr/app/hadoop-2.6.0-cdh5.15.2
đường dẫn xuất khẩu = $ {hadoop_home} / bin: $ đường dẫn
|
Thực hiện lệnh nguồn để cấu hình có hiệu lực ngay lập tức:
4.3 Sửa đổi cấu hình.
Đi tới thư mục ${hadoop_home}/etc/hadoop và sửa đổi tệp cấu hình. Nội dung của mỗi tệp cấu hình như sau:
1. hadoop-env.sh
?
1
2
|
#Chỉ định vị trí cài đặt jdk
xuất java_home=/usr/java/jdk1.8.0_201/
|
2. core-site.xml
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
|
<
tên
>fs.mặc địnhfs
tên
>
hdfs://hadoop001:8020
<
tên
>hadoop.tmp.dir
tên
>
/trang chủ/hadoop/tmp
<
tên
>ha.zookeeper.quorum
tên
>
hadoop001:2181,hadoop002:2181,hadoop002:2181
<
tên
>ha.zookeeper.session-timeout.ms
tên
>
10000
|
3. hdfs-site.xml
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
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
|
<
tên
>dfs.replication
tên
>
3
<
tên
>dfs.namenode.
tên
.dir
tên
>
/trang chủ/hadoop/tên_nút/dữ_liệu
<
tên
>dfs.datanode.data.dir
tên
>
/trang chủ/hadoop/datanode/dữ liệu
<
tên
>dfs.nameservices
tên
>
cụm của tôi
<
tên
>dfs.ha.namenodes.mycluster
tên
>
nn1,nn2
<
tên
>dfs.namenode.rpc-address.mycluster.nn1
tên
>
hadoop001:8020
<
tên
>dfs.namenode.rpc-address.mycluster.nn2
tên
>
hadoop002:8020
<
tên
>dfs.namenode.http-address.mycluster.nn1
tên
>
hadoop001:50070
<
tên
>dfs.namenode.http-address.mycluster.nn2
tên
>
hadoop002:50070
<
tên
>dfs.namenode.shared.edits.dir
tên
>
qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster
<
tên
>dfs.journalnode.edits.dir
tên
>
/trang chủ/hadoop/journalnode/dữ liệu
<
tên
>dfs.ha.fencing.methods
tên
>
sshfence
<
tên
>dfs.ha.fencing.ssh.private-
chìa khóa
-tập tin
tên
>
/root/.ssh/id_rsa
<
tên
>dfs.ha.fencing.ssh.
kết nối
-hết giờ
tên
>
30000
<
tên
>dfs.client.failover.proxy.provider.mycluster
tên
>
org.apache.hadoop.hdfs.server.namenode.ha.configuredfailoverproxyprovider
<
tên
>dfs.ha.automatic-failover.enabled
tên
>
ĐÚNG VẬY
|
4. trang web sợi.xml
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
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
|
<
tên
>yarn.nodemanager.aux-services
tên
>
mapreduce_shuffle
<
tên
>yarn.log-aggregation-enable
tên
>
ĐÚNG VẬY
<
tên
>yarn.log-aggregation.retain-giây
tên
>
86400
<
tên
>yarn.resourcemanager.ha.enabled
tên
>
ĐÚNG VẬY
<
tên
>yarn.resourcemanager.cluster-id
tên
>
cụm-sợi-của-tôi
<
tên
>yarn.resourcemanager.ha.rm-ids
tên
>
rm1,rm2
<
tên
>yarn.resourcemanager.hostname.rm1
tên
>
hadoop002
<
tên
>yarn.resourcemanager.hostname.rm2
tên
>
hadoop003
<
tên
>yarn.resourcemanager.webapp.address.rm1
tên
>
hadoop002:8088
<
tên
>yarn.resourcemanager.webapp.address.rm2
tên
>
hadoop003:8088
<
tên
>yarn.resourcemanager.zk-địa chỉ
tên
>
hadoop001:2181,hadoop002:2181,hadoop003:2181
<
tên
>yarn.resourcemanager.recovery.enabled
tên
>
ĐÚNG VẬY
<
tên
>yarn.resourcemanager.store.class
tên
>
org.apache.hadoop.yarn.server.resourcemanager.recovery.zkrmstatestore
|
5. mapred-site.xml
?
1
2
3
4
5
6
7
|
<
tên
>mapreduce.framework.
tên
tên
>
sợi
|
5. Nô lệ
Cấu hình tên máy chủ hoặc địa chỉ IP của tất cả các nút phụ, mỗi nút một dòng. Dịch vụ datanode và dịch vụ nodemanager trên tất cả các nút phụ sẽ được khởi động.
?
1
2
3
|
hadoop001
hadoop002
hadoop003
|
4.4 Thủ tục phân phối.
Phân phối gói cài đặt hadoop cho hai máy chủ khác. Sau khi phân phối, nên cấu hình các biến môi trường hadoop trên hai máy chủ này.
?
1
2
3
4
|
# Phân phối gói cài đặt cho hadoop002
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/
# Phân phối gói cài đặt cho hadoop003
scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/
|
5. Bắt đầu cụm
.
5.1 Khởi động ZooKeeper.
Khởi động dịch vụ zookeeper trên ba máy chủ tương ứng:
5.2 Khởi động journalnode.
Đi tới thư mục ${hadoop_home}/sbin của ba máy chủ tương ứng và bắt đầu quy trình journalnode:
?
1
|
hadoop-daemon.sh bắt đầu journalnode
|
5.3 Khởi tạo namenode.
Thực hiện lệnh khởi tạo namenode trên hadop001:
Sau khi thực hiện lệnh khởi tạo, bạn cần sao chép nội dung của thư mục siêu dữ liệu namenode sang các namenode chưa định dạng khác. Thư mục lưu trữ siêu dữ liệu là thư mục chúng tôi đã chỉ định bằng thuộc tính dfs.namenode.name.dir trong hdfs-site.xml. Ở đây chúng ta cần sao chép nó vào hadoop002:
?
1
|
scp -r /home/hadoop/namenode/dữ liệu hadoop002:/home/hadoop/namenode/
|
5.4 Khởi tạo trạng thái ha.
Sử dụng lệnh sau trên bất kỳ namenode nào để khởi tạo trạng thái ha trong zookeeper:
5.5 Khởi động hdfs.
Đi tới thư mục ${hadoop_home}/sbin của hadoop001 và khởi động hdfs. Tại thời điểm này, các dịch vụ namenode trên hadoop001 và hadoop002, và các dịch vụ datanode trên ba máy chủ sẽ được khởi động:
5.6 Bắt đầu sợi len.
Đi tới thư mục ${hadoop_home}/sbin của hadoop002 và khởi động yarn. Vào thời điểm này, dịch vụ resourcemanager trên hadoop002 và dịch vụ nodemanager trên ba máy chủ sẽ được khởi động:
Cần lưu ý rằng dịch vụ resourcemanager trên hadoop003 thường không được khởi động vào thời điểm này và cần phải được khởi động thủ công:
?
1
|
yarn-daemon.sh khởi động trình quản lý tài nguyên
|
6. Xem cụm
.
6.1 Xem quy trình.
Sau khi khởi động thành công, quy trình trên mỗi máy chủ sẽ như sau:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
|
[root@hadoop001 sbin]# jps
4512 dfszkfailovercontroller
3714 nhật kýnode
4114 nút tên
3668 số đại biểu chính
5012 nút dữ liệu
4639 người quản lý nút
[root@hadoop002 sbin]# jps
4499 quản lý tài nguyên
4595 người quản lý nút
3465 quorumpeermain
3705 nút tên
3915 dfszkfailovercontroller
5211 nút dữ liệu
3533 nhật kýnode
[root@hadoop003 sbin]# jps
3491 nhật kýnode
3942 quản lý nút
4102 quản lý tài nguyên
4201 nút dữ liệu
3435 quorumpeermain
|
6.2 Xem giao diện web.
Số cổng của hdfs và yarn lần lượt là 50070 và 8080. Giao diện phải như sau:
Vào thời điểm này, namenode trên hadoop001 đang ở trạng thái khả dụng:
Namenode trên hadoop002 đang ở trạng thái chờ:
.
.
Trình quản lý tài nguyên trên hadoop002 đang ở trạng thái khả dụng:
.
.
Trình quản lý tài nguyên trên hadoop003 đang ở trạng thái chờ:
.
.
Đồng thời, giao diện cũng có thông tin liên quan về người quản lý tạp chí:
.
7. Khởi động thứ cấp của cụm
.
Quá trình khởi động ban đầu của cụm trên bao gồm một số hoạt động khởi tạo cần thiết, do đó quá trình này hơi phức tạp. Tuy nhiên, sau khi cụm được xây dựng, bạn có thể bật lại cụm đó. Các bước như sau (trước tiên hãy đảm bảo cụm zookeeper đã được khởi động):
Khởi động hdfs trong hadoop001. Lúc này, tất cả các dịch vụ liên quan đến tính khả dụng cao của hdfs sẽ được khởi động, bao gồm namenode, datanode và journalnode:
Bắt đầu yarn trong hadoop002:
Vào thời điểm này, dịch vụ resourcemanager trên hadoop003 thường không được khởi động và cần phải được khởi động thủ công:
?
1
|
yarn-daemon.sh khởi động trình quản lý tài nguyên
|
Tài liệu tham khảo
.
Các bước xây dựng ở trên chủ yếu được tham khảo từ tài liệu chính thức:
- Tính khả dụng cao của HDFS sử dụng trình quản lý nhật ký số
- ResourceManager có tính khả dụng cao
Tóm tắt.
Trên đây là sơ đồ hướng dẫn xây dựng cụm có tính khả dụng cao dựa trên ZooKeeper do biên tập viên giới thiệu. Tôi hy vọng nó sẽ hữu ích với mọi người. Nếu bạn có bất kỳ câu hỏi nào, vui lòng để lại tin nhắn cho tôi và biên tập viên sẽ trả lời bạn kịp thời. Cảm ơn bạn rất nhiều vì đã ủng hộ trang web của tôi! Nếu bạn thấy bài viết này hữu ích, bạn có thể đăng lại. Vui lòng ghi rõ nguồn. Cảm ơn bạn! .
Liên kết gốc: https://www.cnblogs.com/heibaiying/archive/2019/06/23/11071857.html.
Cuối cùng, bài viết này về sơ đồ hướng dẫn xây dựng cụm Hadoop có tính khả dụng cao dựa trên ZooKeeper đã kết thúc. Nếu bạn muốn biết thêm về sơ đồ hướng dẫn xây dựng cụm Hadoop có tính khả dụng cao dựa trên ZooKeeper, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!