Hadoop - คลัสเตอร์หลายโหนด
บทนี้อธิบายการตั้งค่าคลัสเตอร์ Hadoop Multi-Node บนสภาพแวดล้อมแบบกระจาย
เนื่องจากไม่สามารถแสดงคลัสเตอร์ทั้งหมดได้เรากำลังอธิบายสภาพแวดล้อมคลัสเตอร์ Hadoop โดยใช้ระบบสามระบบ (หนึ่งมาสเตอร์และสองทาส) ด้านล่างนี้คือที่อยู่ IP ของพวกเขา
- Hadoop มาสเตอร์: 192.168.1.15 (hadoop-master)
- Hadoop Slave: 192.168.1.16 (hadoop-slave-1)
- Hadoop Slave: 192.168.1.17 (hadoop-slave-2)
ทำตามขั้นตอนด้านล่างเพื่อตั้งค่าคลัสเตอร์ Hadoop Multi-Node
การติดตั้ง Java
Java เป็นข้อกำหนดเบื้องต้นหลักสำหรับ Hadoop ก่อนอื่นคุณควรตรวจสอบการมีอยู่ของ java ในระบบของคุณโดยใช้ "java -version" ไวยากรณ์ของคำสั่งเวอร์ชัน java ได้รับด้านล่าง
$ java -version
หากทุกอย่างทำงานได้ดีจะให้ผลลัพธ์ดังต่อไปนี้
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
หากไม่ได้ติดตั้ง java ในระบบของคุณให้ทำตามขั้นตอนที่กำหนดสำหรับการติดตั้ง java
ขั้นตอนที่ 1
ดาวน์โหลด java (JDK <เวอร์ชันล่าสุด> - X64.tar.gz) โดยไปที่ลิงค์ต่อไปนี้www.oracle.com
แล้ว jdk-7u71-linux-x64.tar.gz จะถูกดาวน์โหลดลงในระบบของคุณ
ขั้นตอนที่ 2
โดยทั่วไปคุณจะพบไฟล์ java ที่ดาวน์โหลดมาในโฟลเดอร์ Downloads ตรวจสอบและแตกไฟล์jdk-7u71-linux-x64.gz ไฟล์โดยใช้คำสั่งต่อไปนี้
$ cd Downloads/
$ ls
jdk-7u71-Linux-x64.gz
$ tar zxf jdk-7u71-Linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz
ขั้นตอนที่ 3
เพื่อให้ผู้ใช้ทุกคนสามารถใช้ java ได้คุณต้องย้ายไปที่ตำแหน่ง“ / usr / local /” เปิดรูทและพิมพ์คำสั่งต่อไปนี้
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
ขั้นตอนที่ 4
สำหรับการตั้งค่า PATH และ JAVA_HOME ตัวแปรเพิ่มคำสั่งต่อไปนี้ ~/.bashrc ไฟล์.
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin
ตอนนี้ตรวจสอบไฟล์ java -versionคำสั่งจากเทอร์มินัลตามที่อธิบายไว้ข้างต้น ทำตามขั้นตอนข้างต้นและติดตั้ง java ในโหนดคลัสเตอร์ทั้งหมดของคุณ
การสร้างบัญชีผู้ใช้
สร้างบัญชีผู้ใช้ระบบทั้งระบบหลักและระบบทาสเพื่อใช้การติดตั้ง Hadoop
# useradd hadoop
# passwd hadoop
การแมปโหนด
คุณต้องแก้ไข hosts ไฟล์ใน /etc/ โฟลเดอร์บนโหนดทั้งหมดระบุที่อยู่ IP ของแต่ละระบบตามด้วยชื่อโฮสต์
# vi /etc/hosts
enter the following lines in the /etc/hosts file.
192.168.1.109 hadoop-master
192.168.1.145 hadoop-slave-1
192.168.56.1 hadoop-slave-2
การกำหนดค่าการเข้าสู่ระบบโดยใช้คีย์
ตั้งค่า ssh ในทุกโหนดเพื่อให้สามารถสื่อสารกันได้โดยไม่ต้องแจ้งรหัสผ่าน
# su hadoop
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tutorialspoint@hadoop-master
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2
$ chmod 0600 ~/.ssh/authorized_keys
$ exit
การติดตั้ง Hadoop
ในเซิร์ฟเวอร์หลักให้ดาวน์โหลดและติดตั้ง Hadoop โดยใช้คำสั่งต่อไปนี้
# mkdir /opt/hadoop
# cd /opt/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz
# tar -xzf hadoop-1.2.0.tar.gz
# mv hadoop-1.2.0 hadoop
# chown -R hadoop /opt/hadoop
# cd /opt/hadoop/hadoop/
การกำหนดค่า Hadoop
คุณต้องกำหนดค่าเซิร์ฟเวอร์ Hadoop โดยทำการเปลี่ยนแปลงต่อไปนี้ตามที่ระบุด้านล่าง
core-site.xml
เปิด core-site.xml ไฟล์และแก้ไขตามที่แสดงด้านล่าง
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop-master:9000/</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
hdfs-site.xml
เปิด hdfs-site.xml ไฟล์และแก้ไขตามที่แสดงด้านล่าง
<configuration>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hadoop/dfs/name/data</value>
<final>true</final>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hadoop/dfs/name</value>
<final>true</final>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml
เปิด mapred-site.xml ไฟล์และแก้ไขตามที่แสดงด้านล่าง
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hadoop-master:9001</value>
</property>
</configuration>
hadoop-env.sh
เปิด hadoop-env.sh ไฟล์และแก้ไข JAVA_HOME, HADOOP_CONF_DIR และ HADOOP_OPTS ดังที่แสดงด้านล่าง
Note - ตั้งค่า JAVA_HOME ตามการกำหนดค่าระบบของคุณ
export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf
การติดตั้ง Hadoop บนเซิร์ฟเวอร์ Slave
ติดตั้ง Hadoop บนเซิร์ฟเวอร์ทาสทั้งหมดโดยทำตามคำสั่งที่กำหนด
# su hadoop
$ cd /opt/hadoop
$ scp -r hadoop hadoop-slave-1:/opt/hadoop
$ scp -r hadoop hadoop-slave-2:/opt/hadoop
การกำหนดค่า Hadoop บนเซิร์ฟเวอร์หลัก
เปิดเซิร์ฟเวอร์หลักและกำหนดค่าโดยทำตามคำสั่งที่กำหนด
# su hadoop
$ cd /opt/hadoop/hadoop
การกำหนดค่าโหนดหลัก
$ vi etc/hadoop/masters
hadoop-master
การกำหนดค่า Slave Node
$ vi etc/hadoop/slaves
hadoop-slave-1
hadoop-slave-2
Format Name Node บน Hadoop Master
# su hadoop
$ cd /opt/hadoop/hadoop
$ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop-master/192.168.1.109
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.0
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013
STARTUP_MSG: java = 1.7.0_71
************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
………………………………………………….
11/10/14 10:58:08 INFO common.Storage: Storage directory
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode:
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/
การเริ่มบริการ Hadoop
คำสั่งต่อไปนี้คือการเริ่มบริการ Hadoop ทั้งหมดบน Hadoop-Master
$ cd $HADOOP_HOME/sbin
$ start-all.sh
การเพิ่ม DataNode ใหม่ใน Hadoop Cluster
ด้านล่างนี้เป็นขั้นตอนที่ต้องปฏิบัติตามสำหรับการเพิ่มโหนดใหม่ในคลัสเตอร์ Hadoop
เครือข่าย
เพิ่มโหนดใหม่ให้กับคลัสเตอร์ Hadoop ที่มีอยู่ด้วยการกำหนดค่าเครือข่ายที่เหมาะสม สมมติการกำหนดค่าเครือข่ายต่อไปนี้
สำหรับการกำหนดค่าโหนดใหม่ -
IP address : 192.168.1.103
netmask : 255.255.255.0
hostname : slave3.in
การเพิ่มผู้ใช้และการเข้าถึง SSH
เพิ่มผู้ใช้
ในโหนดใหม่ให้เพิ่มผู้ใช้ "hadoop" และตั้งรหัสผ่านของผู้ใช้ Hadoop เป็น "hadoop123" หรืออะไรก็ได้ที่คุณต้องการโดยใช้คำสั่งต่อไปนี้
useradd hadoop
passwd hadoop
ตั้งค่ารหัสผ่านน้อยกว่าการเชื่อมต่อจากหลักไปยังทาสใหม่
ดำเนินการต่อไปนี้บนต้นแบบ
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/
ดำเนินการต่อไปนี้กับทาส
เข้าสู่ระบบ hadoop หากไม่เป็นเช่นนั้นให้เข้าสู่ระบบผู้ใช้ hadoop
su hadoop ssh -X [email protected]
คัดลอกเนื้อหาของคีย์สาธารณะลงในไฟล์ "$HOME/.ssh/authorized_keys" จากนั้นเปลี่ยนการอนุญาตสำหรับสิ่งเดียวกันโดยดำเนินการคำสั่งต่อไปนี้
cd $HOME
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
cat id_rsa.pub >>$HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys
ตรวจสอบการเข้าสู่ระบบ ssh จากเครื่องหลัก ตรวจสอบว่าคุณสามารถ ssh ไปยังโหนดใหม่โดยไม่ต้องใช้รหัสผ่านจากต้นแบบได้หรือไม่
ssh [email protected] or hadoop@slave3
ตั้งชื่อโฮสต์ของโหนดใหม่
คุณสามารถตั้งชื่อโฮสต์ในไฟล์ /etc/sysconfig/network
On new slave3 machine
NETWORKING = yes
HOSTNAME = slave3.in
เพื่อให้การเปลี่ยนแปลงมีผลให้รีสตาร์ทเครื่องหรือรันคำสั่ง hostname ไปยังเครื่องใหม่โดยใช้ชื่อโฮสต์ตามลำดับ (การรีสตาร์ทเป็นตัวเลือกที่ดี)
บนเครื่องโหนด slave3 -
ชื่อโฮสต์ slave3.in
อัปเดต /etc/hosts บนทุกเครื่องของคลัสเตอร์โดยมีบรรทัดต่อไปนี้ -
192.168.1.102 slave3.in slave3
ตอนนี้ลอง ping เครื่องด้วยชื่อโฮสต์เพื่อตรวจสอบว่ากำลังแก้ไขเป็น IP หรือไม่
บนเครื่องโหนดใหม่ -
ping master.in
เริ่ม DataNode บนโหนดใหม่
เริ่มต้น datanode daemon ด้วยตนเองโดยใช้ $HADOOP_HOME/bin/hadoop-daemon.sh script. โดยอัตโนมัติจะติดต่อมาสเตอร์ (NameNode) และเข้าร่วมคลัสเตอร์ เราควรเพิ่มโหนดใหม่ในไฟล์ conf / slaves ในเซิร์ฟเวอร์หลัก คำสั่งตามสคริปต์จะจดจำโหนดใหม่
เข้าสู่ระบบโหนดใหม่
su hadoop or ssh -X [email protected]
เริ่ม HDFS บนโหนดทาสที่เพิ่มใหม่โดยใช้คำสั่งต่อไปนี้
./bin/hadoop-daemon.sh start datanode
ตรวจสอบผลลัพธ์ของคำสั่ง jps บนโหนดใหม่ มีลักษณะดังนี้
$ jps
7141 DataNode
10312 Jps
การลบ DataNode ออกจาก Hadoop Cluster
เราสามารถลบโหนดออกจากคลัสเตอร์ได้ทันทีในขณะที่กำลังทำงานโดยที่ข้อมูลไม่สูญหาย HDFS มีคุณสมบัติการเลิกใช้งานซึ่งช่วยให้มั่นใจได้ว่าการลบโหนดจะดำเนินการอย่างปลอดภัย ในการใช้งานให้ทำตามขั้นตอนด้านล่าง -
ขั้นตอนที่ 1 - เข้าสู่ระบบหลัก
ล็อกอินไปยังผู้ใช้เครื่องหลักที่ติดตั้ง Hadoop
$ su hadoop
ขั้นตอนที่ 2 - เปลี่ยนการกำหนดค่าคลัสเตอร์
ต้องกำหนดค่าไฟล์ยกเว้นก่อนเริ่มคลัสเตอร์ เพิ่มคีย์ชื่อ dfs.hosts.exclude ในไฟล์$HADOOP_HOME/etc/hadoop/hdfs-site.xmlไฟล์. ค่าที่เกี่ยวข้องกับคีย์นี้จัดเตรียมพา ธ แบบเต็มไปยังไฟล์บนระบบไฟล์โลคัลของ NameNode ซึ่งมีรายชื่อเครื่องที่ไม่ได้รับอนุญาตให้เชื่อมต่อกับ HDFS
ตัวอย่างเช่นเพิ่มบรรทัดเหล่านี้ลงใน etc/hadoop/hdfs-site.xml ไฟล์.
<property>
<name>dfs.hosts.exclude</name>
<value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value>
<description>DFS exclude</description>
</property>
ขั้นตอนที่ 3 - กำหนดโฮสต์ที่จะปลดประจำการ
แต่ละเครื่องที่จะปลดประจำการควรเพิ่มลงในไฟล์ที่ระบุโดย hdfs_exclude.txt หนึ่งชื่อโดเมนต่อบรรทัด สิ่งนี้จะป้องกันไม่ให้เชื่อมต่อกับ NameNode เนื้อหาของไฟล์"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" แสดงอยู่ด้านล่างหากคุณต้องการลบ DataNode2
slave2.in
ขั้นตอนที่ 4 - บังคับให้โหลดการกำหนดค่าใหม่
รันคำสั่ง "$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" ไม่มีเครื่องหมายคำพูด
$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes
สิ่งนี้จะบังคับให้ NameNode อ่านการกำหนดค่าอีกครั้งรวมถึงไฟล์ 'excludes' ที่อัปเดตใหม่ มันจะยกเลิกการทำงานของโหนดในช่วงระยะเวลาหนึ่งทำให้มีเวลาในการจำลองบล็อกของแต่ละโหนดไปยังเครื่องที่กำหนดให้ยังคงทำงานอยู่
บน slave2.inตรวจสอบเอาต์พุตคำสั่ง jps หลังจากนั้นสักครู่คุณจะเห็นกระบวนการ DataNode ปิดโดยอัตโนมัติ
ขั้นตอนที่ 5 - ปิดโหนด
หลังจากเสร็จสิ้นกระบวนการรื้อถอนฮาร์ดแวร์ที่ปลดประจำการแล้วสามารถปิดระบบได้อย่างปลอดภัยเพื่อทำการบำรุงรักษา รันคำสั่ง report ไปที่ dfsadmin เพื่อตรวจสอบสถานะของการเลิกใช้งาน คำสั่งต่อไปนี้จะอธิบายสถานะของโหนดการปลดประจำการและโหนดที่เชื่อมต่อกับคลัสเตอร์
$ $HADOOP_HOME/bin/hadoop dfsadmin -report
ขั้นตอนที่ 6 - แก้ไขไม่รวมไฟล์อีกครั้ง
เมื่อปลดประจำการเครื่องแล้วสามารถลบออกจากไฟล์ "excludes" ได้ วิ่ง"$HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"อีกครั้งจะอ่านไฟล์ที่ไม่รวมกลับเข้าไปใน NameNode; อนุญาตให้ DataNodes เข้าร่วมคลัสเตอร์อีกครั้งหลังจากการบำรุงรักษาเสร็จสิ้นหรือต้องการความจุเพิ่มเติมในคลัสเตอร์อีกครั้งเป็นต้น
Special Note- หากทำตามกระบวนการข้างต้นและกระบวนการทาสก์แทร็กเกอร์ยังคงทำงานอยู่บนโหนดจำเป็นต้องปิดตัวลง วิธีหนึ่งคือปลดการเชื่อมต่อเครื่องตามที่เราทำในขั้นตอนข้างต้น ปรมาจารย์จะรับรู้กระบวนการโดยอัตโนมัติและจะประกาศว่าตาย ไม่จำเป็นต้องทำตามขั้นตอนเดียวกันในการลบ Tasktracker เนื่องจากไม่สำคัญมากเมื่อเทียบกับ DataNode DataNode มีข้อมูลที่คุณต้องการลบออกอย่างปลอดภัยโดยไม่มีข้อมูลสูญหาย
ทาสก์แทร็กเกอร์สามารถรัน / ปิดเครื่องได้ทันทีโดยใช้คำสั่งต่อไปนี้เมื่อใดก็ได้
$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker
$HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker