ค้นหาเว็บไซต์

ติดตั้ง Hadoop Multinode Cluster โดยใช้ CDH4 ใน RHEL/CentOS 6.5


Hadoop เป็นเฟรมเวิร์กการเขียนโปรแกรมโอเพ่นซอร์สที่พัฒนาโดย apache เพื่อประมวลผลข้อมูลขนาดใหญ่ โดยจะใช้ HDFS (Hadoop Distributed File System) เพื่อจัดเก็บข้อมูลบนดาต้าโหนดทั้งหมดในคลัสเตอร์ในลักษณะการกระจาย และใช้โมเดล mapreduce เพื่อประมวลผลข้อมูล

Namenode (NN) เป็นดีมอนหลักที่ควบคุม HDFS และ Jobtracker (JT ) เป็น daemon หลักสำหรับเอ็นจิ้น mapreduce

ความต้องการ

ในบทช่วยสอนนี้ ฉันใช้ CentOS 6.3 VM สองตัว 'master' และ 'node' ได้แก่ (มาสเตอร์และโหนดคือชื่อโฮสต์ของฉัน) IP 'หลัก' คือ 172.21.17.175 และ IP ของโหนดคือ '172.21.17.188' คำแนะนำต่อไปนี้ใช้ได้กับเวอร์ชัน RHEL/CentOS 6.x อีกด้วย

อยู่ที่อาจารย์
[root@master ~]# hostname

master
[root@master ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.175  Bcast:172.21.19.255  Mask:255.255.252.0
บนโหนด
[root@node ~]# hostname

node
[root@node ~]# ifconfig|grep 'inet addr'|head -1

inet addr:172.21.17.188  Bcast:172.21.19.255  Mask:255.255.252.0

ขั้นแรก ตรวจสอบให้แน่ใจว่าโฮสต์คลัสเตอร์ทั้งหมดอยู่ในไฟล์ '/etc/hosts' (ในแต่ละโหนด) หากคุณไม่ได้ตั้งค่า DNS

อยู่ที่อาจารย์
[root@master ~]# cat /etc/hosts

172.21.17.175 master
172.21.17.188 node
บนโหนด
[root@node ~]# cat /etc/hosts

172.21.17.197 qabox
172.21.17.176 ansible-ground

การติดตั้ง Hadoop Multinode Cluster ใน CentOS

เราใช้พื้นที่เก็บข้อมูล CDH อย่างเป็นทางการเพื่อติดตั้ง CDH4 บนโฮสต์ทั้งหมด (หลักและโหนด) ในคลัสเตอร์

ขั้นตอนที่ 1: ดาวน์โหลดติดตั้งพื้นที่เก็บข้อมูล CDH

ไปที่หน้าดาวน์โหลด CDH อย่างเป็นทางการแล้วหยิบเวอร์ชัน CDH4 (เช่น 4.6) หรือคุณสามารถใช้คำสั่ง wget ต่อไปนี้เพื่อดาวน์โหลดพื้นที่เก็บข้อมูลและติดตั้ง

บน RHEL/CentOS 32 บิต
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
บน RHEL/CentOS 64 บิต
wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm

ก่อนที่จะติดตั้ง Hadoop Multinode Cluster ให้เพิ่มคีย์ GPG สาธารณะของ Cloudera ไปยังพื้นที่เก็บข้อมูลของคุณโดยเรียกใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้ตามสถาปัตยกรรมระบบของคุณ

## on 32-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/i386/cdh/RPM-GPG-KEY-cloudera
## on 64-bit System ##

rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

ขั้นตอนที่ 2: ตั้งค่า JobTracker & NameNode

จากนั้น รันคำสั่งต่อไปนี้เพื่อติดตั้งและตั้งค่า JobTracker และ NameNode บนเซิร์ฟเวอร์ Master

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-0.20-mapreduce-jobtracker
[root@master ~]# yum clean all
[root@master ~]# yum install hadoop-hdfs-namenode

ขั้นตอนที่ 3: ตั้งค่าโหนดชื่อรอง

อีกครั้ง ให้รันคำสั่งต่อไปนี้บนเซิร์ฟเวอร์หลักเพื่อตั้งค่าโหนดชื่อรอง

[root@master ~]# yum clean all 
[root@master ~]# yum install hadoop-hdfs-secondarynam

ขั้นตอนที่ 4: ตั้งค่า Tasktracker & Datanode

ถัดไป ตั้งค่าตัวติดตามงาน & ดาต้าโหนดบนโฮสต์คลัสเตอร์ทั้งหมด (โหนด) ยกเว้นโฮสต์ JobTracker, NameNode และรอง (หรือสแตนด์บาย) NameNode (บนโหนดในกรณีนี้)

[root@node ~]# yum clean all
[root@node ~]# yum install hadoop-0.20-mapreduce-tasktracker hadoop-hdfs-datanode

ขั้นตอนที่ 5: ตั้งค่าไคลเอ็นต์ Hadoop

คุณสามารถติดตั้งไคลเอ็นต์ Hadoop บนเครื่องอื่นได้ (ในกรณีนี้ฉันได้ติดตั้งไว้บน datanode แล้ว คุณสามารถติดตั้งบนเครื่องใดก็ได้)

[root@node ~]# yum install hadoop-client

ขั้นตอนที่ 6: ปรับใช้ HDFS บนโหนด

ตอนนี้ถ้าเราทำตามขั้นตอนข้างต้นเสร็จแล้ว เรามาก้าวไปข้างหน้าเพื่อปรับใช้ hdfs (ที่จะทำกับโหนดทั้งหมด)

คัดลอกการกำหนดค่าเริ่มต้นไปยังไดเร็กทอรี /etc/hadoop (บนแต่ละโหนดในคลัสเตอร์)

[root@master ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster
[root@node ~]# cp -r /etc/hadoop/conf.dist /etc/hadoop/conf.my_cluster

ใช้คำสั่ง ทางเลือก เพื่อตั้งค่าไดเร็กทอรีที่กำหนดเองของคุณดังต่อไปนี้ ( ในแต่ละโหนดในคลัสเตอร์)

[root@master ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@master ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster
[root@node ~]# alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.my_cluster 50
reading /var/lib/alternatives/hadoop-conf

[root@node ~]# alternatives --set hadoop-conf /etc/hadoop/conf.my_cluster

ขั้นตอนที่ 7: การปรับแต่งไฟล์การกำหนดค่า

ตอนนี้ให้เปิดไฟล์ 'core-site.xml' และอัปเดต "fs.defaultFS" ในแต่ละโหนดในคลัสเตอร์

[root@master conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master/</value>
</property>
</configuration>

อัปเดตครั้งต่อไป “dfs.permissions.superusergroup” ใน hdfs-site.xml ในแต่ละโหนดในคลัสเตอร์

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <name>dfs.name.dir</name>
     <value>/var/lib/hadoop-hdfs/cache/hdfs/dfs/name</value>
  </property>
  <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hadoop</value>
  </property>
</configuration>

หมายเหตุ: โปรดตรวจสอบให้แน่ใจว่ามีการกำหนดค่าข้างต้นปรากฏบนโหนดทั้งหมด (ทำบนโหนดเดียวและเรียกใช้ scp เพื่อคัดลอกบนโหนดที่เหลือ ของโหนด)

ขั้นตอนที่ 8: การกำหนดค่าไดเร็กทอรีที่เก็บข้อมูลในตัวเครื่อง

อัปเดต “dfs.name.dir หรือ dfs.namenode.name.dir” ใน 'hdfs-site.xml' บน NameNode (บน Master และ Node ) โปรดเปลี่ยนค่าตามที่ไฮไลต์

[root@master conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///data/1/dfs/nn,/nfsmount/dfs/nn</value>
</property>
[root@node conf]# cat /etc/hadoop/conf/hdfs-site.xml
<property>
 <name>dfs.datanode.data.dir</name>
 <value>file:///data/1/dfs/dn,/data/2/dfs/dn,/data/3/dfs/dn</value>
</property>

ขั้นตอนที่ 9: สร้างไดเรกทอรีและจัดการสิทธิ์

ดำเนินการคำสั่งด้านล่างเพื่อสร้างโครงสร้างไดเรกทอรีและจัดการสิทธิ์ผู้ใช้บนเครื่อง Namenode (Master) และ Datanode (Node)

[root@master]# mkdir -p /data/1/dfs/nn /nfsmount/dfs/nn
[root@master]# chmod 700 /data/1/dfs/nn /nfsmount/dfs/nn
[root@node]#  mkdir -p /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn
[root@node]#  chown -R hdfs:hdfs /data/1/dfs/nn /nfsmount/dfs/nn /data/1/dfs/dn /data/2/dfs/dn /data/3/dfs/dn /data/4/dfs/dn

จัดรูปแบบ Namenode (บน Master) โดยใช้คำสั่งต่อไปนี้

[root@master conf]# sudo -u hdfs hdfs namenode -format

ขั้นตอนที่ 10: การกำหนดค่ารอง NameNode

เพิ่มคุณสมบัติต่อไปนี้ลงในไฟล์ hdfs-site.xml และแทนที่ค่าตามที่แสดงใน Master

<property>
  <name>dfs.namenode.http-address</name>
  <value>172.21.17.175:50070</value>
  <description>
    The address and port on which the NameNode UI will listen.
  </description>
</property>

หมายเหตุ: ในกรณีของเรา ค่าควรเป็นที่อยู่ IP ของ Master VM

ตอนนี้เรามาปรับใช้ MRv1 ( Map-reduce version 1 ) กันดีกว่า เปิดไฟล์ 'mapred-site.xml' ตามค่าที่แสดง

[root@master conf]# cp hdfs-site.xml mapred-site.xml
[root@master conf]# vi mapred-site.xml
[root@master conf]# cat mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
 <name>mapred.job.tracker</name>
 <value>master:8021</value>
</property>
</configuration>

จากนั้น คัดลอกไฟล์ 'mapred-site.xml' ไปยังเครื่องโหนดโดยใช้คำสั่ง scp ต่อไปนี้

[root@master conf]# scp /etc/hadoop/conf/mapred-site.xml node:/etc/hadoop/conf/
mapred-site.xml                                                                      100%  200     0.2KB/s   00:00

ตอนนี้กำหนดค่าไดเร็กทอรีที่เก็บข้อมูลในตัวเครื่องเพื่อใช้โดย MRv1 Daemons เปิดไฟล์ 'mapred-site.xml' อีกครั้ง และทำการเปลี่ยนแปลงตามที่แสดงด้านล่างสำหรับ TaskTracker แต่ละตัว

<property>
 <name>mapred.local.dir</name>
 <value>/data/1/mapred/local,/data/2/mapred/local,/data/3/mapred/local</value>
</property>

หลังจากระบุไดเร็กทอรีเหล่านี้ในไฟล์ 'mapred-site.xml' คุณต้องสร้างไดเร็กทอรีและกำหนดสิทธิ์อนุญาตไฟล์ที่ถูกต้องให้กับไดเร็กทอรีเหล่านั้นในแต่ละโหนดในคลัสเตอร์ของคุณ

mkdir -p /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local
chown -R mapred:hadoop /data/1/mapred/local /data/2/mapred/local /data/3/mapred/local /data/4/mapred/local

ขั้นตอนที่ 10 : เริ่ม HDFS

ตอนนี้รันคำสั่งต่อไปนี้เพื่อเริ่ม HDFS บนทุกโหนดในคลัสเตอร์

[root@master conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done
[root@node conf]# for x in `cd /etc/init.d ; ls hadoop-hdfs-*` ; do sudo service $x start ; done

ขั้นตอนที่ 11 : สร้างไดเร็กทอรี HDFS /tmp และ MapReduce /var

จำเป็นต้องสร้าง /tmp โดยมีสิทธิ์ที่เหมาะสมตามที่ระบุไว้ด้านล่างนี้

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp
[root@master conf]# sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
[root@master conf]# sudo -u hdfs hadoop fs -mkdir -p /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chmod 1777 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging
[root@master conf]# sudo -u hdfs hadoop fs -chown -R mapred /var/lib/hadoop-hdfs/cache/mapred

ตอนนี้ตรวจสอบโครงสร้างไฟล์ HDFS

[root@node conf]# sudo -u hdfs hadoop fs -ls -R /

drwxrwxrwt   - hdfs hadoop          	0 2014-05-29 09:58 /tmp
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var
drwxr-xr-x  	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib
drwxr-xr-x   	- hdfs hadoop         	0 2014-05-29 09:59 /var/lib/hadoop-hdfs
drwxr-xr-x   	- hdfs hadoop          	0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred
drwxr-xr-x   	- mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred
drwxrwxrwt   - mapred hadoop          0 2014-05-29 09:59 /var/lib/hadoop-hdfs/cache/mapred/mapred/staging

หลังจากที่คุณเริ่ม HDFS และสร้าง '/tmp' แต่ก่อนที่คุณจะเริ่ม JobTracker โปรดสร้างไดเร็กทอรี HDFS ที่ระบุโดยพารามิเตอร์ 'mapred.system.dir' (โดยค่าเริ่มต้น $ {hadoop.tmp .dir}/mapred/system และเปลี่ยนเจ้าของเป็น mapred

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /tmp/mapred/system
[root@master conf]# sudo -u hdfs hadoop fs -chown mapred:hadoop /tmp/mapred/system

ขั้นตอนที่ 12: เริ่ม MapReduce

หากต้องการเริ่ม MapReduce : โปรดเริ่มบริการ TT และ JT

ในแต่ละระบบ TaskTracker
[root@node conf]# service hadoop-0.20-mapreduce-tasktracker start

Starting Tasktracker:                               [  OK  ]
starting tasktracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-tasktracker-node.out
บนระบบ JobTracker
[root@master conf]# service hadoop-0.20-mapreduce-jobtracker start

Starting Jobtracker:                                [  OK  ]

starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-master.out

จากนั้น สร้างโฮมไดเร็กตอรี่สำหรับผู้ใช้ Hadoop แต่ละคน ขอแนะนำให้คุณทำสิ่งนี้บน NameNode ตัวอย่างเช่น.

[root@master conf]# sudo -u hdfs hadoop fs -mkdir  /user/<user>
[root@master conf]# sudo -u hdfs hadoop fs -chown <user> /user/<user>

หมายเหตุ: โดยที่ คือชื่อผู้ใช้ Linux ของผู้ใช้แต่ละคน

หรือคุณสามารถสร้างโฮมไดเร็กตอรี่ได้ดังต่อไปนี้

[root@master conf]# sudo -u hdfs hadoop fs -mkdir /user/$USER
[root@master conf]# sudo -u hdfs hadoop fs -chown $USER /user/$USER

ขั้นตอนที่ 13: เปิด JT, NN UI จากเบราว์เซอร์

เปิดเบราว์เซอร์ของคุณและพิมพ์ URL เป็น http://ip_address_of_namenode:50070 เพื่อเข้าถึง Namenode

เปิดแท็บอื่นในเบราว์เซอร์ของคุณแล้วพิมพ์ URL เป็น http://ip_address_of_jobtracker:50030 เพื่อเข้าถึง JobTracker

ขั้นตอนนี้ได้รับการทดสอบเรียบร้อยแล้วบน RHEL/CentOS 5.X/6.X โปรดแสดงความคิดเห็นด้านล่างหากคุณประสบปัญหาใด ๆ กับการติดตั้ง ฉันจะช่วยคุณในการแก้ปัญหา