Bu məqalədə sizlərə Linux üzərindən VirtualBox istifadə etməklə bir neçə node-dan ibarət Hadoop klaster qurulmasını göstərəcəm.
Bunun üçün ilk öncə Linux əməliyyat sistemini endirmək lazımdır. Mən testlərimdə Oracle Enterprise Linux (OEL) istifadə edirəm. Bu installation üçün istənilən Linux distribyutoru istifadə edilə bilər. OEL endirmək üçün http://edilivery.oracle.com səhifəsindən istifadə edə bilərsiniz. Mən testlərimdə OEL 7.6 istifadə etmişəm.
Linux əməliyyat sistemi endirildikdən sonra VirtualBox endirlib qurulduqdan sonra yeni virtual machine yaradılır.
Virtual Machine adı verilir və fayllarının yaradılması üçün qovluq seçilir. Əməliyyat sisteminin tipi və versiyası seçildikdən sonra uyğun RAM verilir.
Yaddaş hissəsi olaraq VDİ (VirtualBox Disk İmage) seçib Next düyməsini basırıq.
Yaddaş faylının yaradılması üçün uyğun qovluq seçib ölçüsünü göstəririk.
Virtual Machine yaradıldıqdan sonra endiryimiz Linux installation .iso faylını tanıdırıq.
Daha sonra şəbəkə konfiqurasiyasını Host-only Adapter olaraq təyin edirik.
Sonra virtual machine-i açırıq. Linux əməliyyat sisteminin Software Selection bölümündən “Minimal install” seçib sağ tərəfdə “Compatibility Libraries”, “Development Tools” and “System Administration Tools” seçənəklərini seçirik.
Şəbəkə hissəsinə gəlib host-un adını təyin edirik. Daha sonra Configure düyməsini basıb virtual machine üçün ip təyin edirik
İP – 192.168.56.100
Netmask – 255.255.255.0
Şəbəkə konfiqurasiyası bitdiksən sonra installation başlayır. İnstallation bitdikdən sonra əməliyyat sisteminə root istifadəçisi ilə daxil oluruq. “nmtui” proqramı vasitəsilə şəbəkə kartı hissəsinə daxil oluruq
Burdan İP və digər parametrləri rahatlıqla dəyişə bilərik. Biz “Edit connection” hissəsindən uyğun şəbəkə kartına daxil olub “Automatically connect” seçib proqramdan çıxırıq.
Daha sonra /etc/hosts faylına uyğun dəyişikliyi ediirk
192.168.56.100 namenode namenode
Əməliyyat sisteminə daxil olub “ip addr show” əmrini çalışdırıb təyin etdiyimiz İP-ni görə bilərik
Sonra, SELinux funksionallığını söndürürük. Bunun üçün /etc/selinux/config faylını aşağıdakı kimi dəyişirik. Bu fayl dəyişdikdən sonra sistem söndürülüb yandırılmalıdır
Əməliyyat sisteminin konfiqurasiya işləri bitdikdən sonra Java və Hadoop proqram təminatlarını endiririk. Java-nı endirmək üçün aşağıdakı səhifəyə daxil olmaq lazımdır:
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Aşağıdakı faylı endiririk:
Hadoop-u aşağıdakı ünvandan endiririk
https://hadoop.apache.org/releases.html
Daha sonra hər iki faylı WinSCP proqramı vasitaəsilə virtual machine-ə aıtırıq. WinSCP proqramını endirmək üçün aşağıdakı ünvandan istifadə etmək olar.
https://winscp.net/eng/download.php
Proqram təminatını çalışdırıb az öncə təyin etdiyimiz İP vasitəsilə Linux əməliyyat sistmeinə qoşuluruq.
Və daha sonra faylları /tmp qovluğuna köçürürük.
/tmp qovluğuna keçib rpm -Uvh əmrini çalışdırıb Java-nı qururuq
Sonra Hadoop-u yükləyirik. Mən adətən hadoop-u /usr/local qovluğuna yükləyirəm. Endirdyinz zip faylını bu qovluğa daşıyıb faylı açırıq
tar xzvf hadoop-3.1.2.tar.gz
mv hadoop-3.1.2 hadoop
Yeni hadoop istifadəçisi yaradıb parolunu təyin edirik və qovluğun sahibini dəyişirik
useradd hadoop
passwd hadoop
chown -R hadoop hadoop
Sonra, java-nın yerləşdiyi qovluğu tapıb onu hadoop-env.sh faylında təyin edirik
readlink -f /usr/bin/java | sed "s:bin/java::"
/usr/java/jdk1.8.0_201-amd64/jre/
Yuxarıdakı nəticəni hadoop-env.sh faylındakı export JAVA_HOME hissəsinə qoyuruq:
export JAVA_HOME= /usr/java/jdk1.8.0_201-amd64/jre/
Əgər sizin virtual machine-də internet bağlantı varsa, o zaman bizə lazım olaln proqramları rahatlıqla yükləyə bilərsiniz. Əgər internet bağlantısı yoxdursa, o zaman Linux .iso faylını bir daha mount edib yum-un repository-sini dəyişirik və proqramları yükləyirik
mkdir /media/cdrom
mount /dev/cdrom /media/cdrom/
cd /etc/yum.repos.d
mkdir /tmp/old.yum.repos.d
mv * /tmp/old.yum.repos.d
cat < ol7.repo
[OL7]
name=Oracle Linux 7
baseurl=file:///media//cdrom
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
EOF
Hadoop ilə gələcəkdə çalışmağımız üçün lazım olacaq bəzi application-lar yüklənilir. Bu application-lar əsasən bəzi konfiqurasiya işlərində bizə lazım ola bilər.
yum install -y wget httpd bind-utils net-tools mlocate
Daha sonra hadoop istifadəçisinin parol soruşmadan digər hostlara daxil ola bilməsi üçün authorized_keys faylı yaradılıb uyğun hostlarla paylaşılır. Bu halda ancaq bu host-dan ssh bağlantlı gəlsə, parolsuz sistemə daxil edilməsi təmin edilir.
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
Daha sonra firewall durdurulub söndürülür. Production mühitində firewall-u durdurmaq məsləhətli deyil. əksinə orda bəzi qaydalar təyin edib onu açıq saxlamaq lazımdır
systemctl stop firewalld
systemctl disable firewalld
Daha sonra hadoop istifadəçisi üçün Hadoop-dan istifadə etməsinə görə .bashrc faylında mühit dəyişkənləri təyin edilir
su - hadoop
vi .bashrc
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HDFS_NAMENODE_USER="hadoop"
export HDFS_DATANODE_USER="hadoop"
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_RESOURCEMANAGER_USER="hadoop"
export YARN_NODEMANAGER_USER="hadoop"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
Sonra Hadoop-un $HADOOP_CONF_DIR qovluğunda bəzi .xml konfiqurasiya faylları dəyişdirilir
core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
Daha sonra namenode və datanode məlumatlarını özündə saxlayacaq bir qovluq yaradılır və hdfs-site.xml faylı ona uyğun olaraq dəyişdirilir:
[root@hadoop /]# mkdir /hdfs
[root@hadoop /]# chown -R hadoop hdfs
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/hdfs/datanode</value>
</property>
</configuration>
mapred-site.xml faylı aşağıdakı kimi dəyişdirilir:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml faylı aşağıdakı kimi dəyişdirilir:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
Sonra namenode format edilir və /hdfs qovluğunun altında hdfs metadata-nı özündə saxlayacaq namenode qovluğu yaradılır
[hadoop@hadoop ~]$ hdfs namenode -format
[hadoop@namenode ~]$ cd /hdfs
[hadoop@namenode hdfs]$ ls
namenode
[hadoop@namenode hdfs]$
Daha sonra namenode və datanode proseslərini başlatmaq üçün start-dfs.sh scripti çalışdırılır:
[hadoop@namenode hdfs]$ start-dfs.sh
Starting namenodes on [namenode]
Starting datanodes
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Starting secondary namenodes [namenode]
Sonra aktiv çalışan java proseslərinin siyahısını almaq üçün jps əmri çalışdırılır:
[hadoop@namenode hdfs]$ jps
20531 DataNode
20422 NameNode
21208 Jps
20715 SecondaryNameNode
[hadoop@namenode hdfs]$
Göründüyü kimi namenode və datanode prosesləri aktivdir. HDFS sistemi barədə daha detallı məlumat və statistika əldə etmək üçün aşağıdakı əmri çalışdırırıq:
[hadoop@namenode hdfs]$ hdfs dfsadmin -report
Configured Capacity: 27899465728 (25.98 GB)
Present Capacity: 24066150400 (22.41 GB)
DFS Remaining: 24066146304 (22.41 GB)
DFS Used: 4096 (4 KB)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (1):
Name: 192.168.56.100:9866 (namenode)
Hostname: namenode
Decommission Status : Normal
Configured Capacity: 27899465728 (25.98 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3833315328 (3.57 GB)
DFS Remaining: 24066146304 (22.41 GB)
DFS Used%: 0.00%
DFS Remaining%: 86.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon May 27 06:53:40 EDT 2019
Last Block Report: Mon May 27 06:46:31 EDT 2019
Num of Blocks: 0
Burdan göründüyü kimi bizim bir aktiv node-umuz var. HDFS-in ümumi həcmi 25.98G, boş yer 22.4G-dır. HDFS üçün /hdfs qovluğu təyin edildiyinə görə eyni rəqəmləri du -kh əmrini çalışdıraraq da görə bilərik:
[root@namenode ~]# df -kh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ol-root 26G 3.6G 23G 14% /
[root@namenode ~]#
HDFS işlək vəziyyətdə olduqdan sonra orda istədiyimiz qovluğu yaradıb istənilən faylları ora köçürə bilərik. Aşağıdakı misalda mystorage adında qovluq yaradıb ora core-site.xml faylını köçürdürük:
[hadoop@namenode hdfs]$ hdfs dfs -mkdir /mystorage
[hadoop@namenode hdfs]$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/core-site.xml /mystorage
[hadoop@namenode hdfs]$ hdfs dfs -ls /mystorage
Found 1 items
-rw-r--r-- 1 hadoop supergroup 862 2019-05-27 06:55 /mystorage/core-site.xml
[hadoop@namenode hdfs]$
Namenode hazır olduqdan sonra gəlin ikinci node-u da datanode olaraq Hadoop klasterinə əlavə edək. Bunun üçün namenode hostunu söndürüb onun nüsxəsini çıxarırırq. Bunun üçün VirtualBox-da virtual machine üzərində sağ düyməni basıb Clone menusunu seçə bilərik:
Clone bitdikdən sonra virtual machine açırıq. Əməliyyat sisteminə daxil olub nmtui proqramı vasitəsilə İP-ni 192.168.56.101 olaraq, host-un adını datanode olaraq dəyişirik. Daha sonra birinci host-u (namenode) açıb /etc/hosts faylına datanode barədə məlumatı əlavə edirik və onu datanode hostuna da köçürdürük.
root@namenode ~]# more /etc/hosts
192.168.56.100 namenode namenode
192.168.56.101 datanode datanode
[root@namenode ~]# scp /etc/hosts datanode:/etc
hadoop istifadəçisi ilə namenode-dan datanode-a ssh etdikdə parolun soruşulmadığına əmin olmaq lazımdır. Sonra datanode-a keçib /hdfs qovluğunu təmizləyirik və datanode-u başladırıq
rm -rf /hdfs/*
hadoop-daemon.sh start datanode
Və namenode-dan sistem barədə növbəti məlumatı alırıq. Nəticə olaraq datanode-un əlavə edildiyini və HDFS yaddaş hissəsinin iki dəfə artığını görmüş olacağıq:
[hadoop@namenode ~]$ hdfs dfsadmin -report
Configured Capacity: 55798931456 (51.97 GB)
Present Capacity: 48102322176 (44.80 GB)
DFS Remaining: 48102301696 (44.80 GB)
DFS Used: 20480 (20 KB)
DFS Used%: 0.00%
Replicated Blocks:
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
Erasure Coded Block Groups:
Low redundancy block groups: 0
Block groups with corrupt internal blocks: 0
Missing block groups: 0
Low redundancy blocks with highest priority to recover: 0
Pending deletion blocks: 0
-------------------------------------------------
Live datanodes (2):
Name: 192.168.56.100:9866 (namenode)
Hostname: namenode
Decommission Status : Normal
Configured Capacity: 27899465728 (25.98 GB)
DFS Used: 16384 (16 KB)
Non DFS Used: 3833569280 (3.57 GB)
DFS Remaining: 24065880064 (22.41 GB)
DFS Used%: 0.00%
DFS Remaining%: 86.26%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon May 27 07:14:49 EDT 2019
Last Block Report: Mon May 27 07:14:17 EDT 2019
Num of Blocks: 1
Name: 192.168.56.101:9866 (datanode)
Hostname: datanode
Decommission Status : Normal
Configured Capacity: 27899465728 (25.98 GB)
DFS Used: 4096 (4 KB)
Non DFS Used: 3863040000 (3.60 GB)
DFS Remaining: 24036421632 (22.39 GB)
DFS Used%: 0.00%
DFS Remaining%: 86.15%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon May 27 07:14:49 EDT 2019
Last Block Report: Mon May 27 07:14:14 EDT 2019
Num of Blocks: 0
[hadoop@namenode ~]$
Bu məlumatı daha oxunaqlı formada qrafik olaraq aşağıdakı linkdən əldə etmək mümkündür:
Və beləliklə biz virtual mühitdə Linux əməliyyat sisteminin üzərinə 2 node Hadoop klasterini uğurla qurmuş olduq! Əlavə suallarınız varsa, comment-də göstərə bilərsiniz.
Uğurlar!