English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
استخدام Docker لبناء وتشغيل كتلة hadoop الموزعة
لقد بحثت لفترة طويلة ولم أجد أي وثيقة حول كيفية استخدام docker لبناء كتلة hadoop الموزعة، لا خيار آخر سوى كتابة واحدة بنفسي.
1: إعداد البيئة:
1: يجب أن يكون لديك نظام تشغيل CentOS7 أولاً، يمكن تثبيته في محاكي.
2: تثبيت docker في CentOS7، إصدار docker هو 1.8.2
خطوات التثبيت كالتالي:
<1> تثبيت إصدار معين من docker
yum install -y docker-1.8.2-10.el7.centos
<2> قد يتم إظهار خطأ أثناء التثبيت، يجب حذف هذه الاعتماد
rpm -e lvm2-7:2.02.105-14.el7.x86_64
تشغيل docker
service docker start
تحقق من نتائج التثبيت:
<3> بعد التشغيل، سيتم رؤية معلومات تحذيرية في صفحتين عند تشغيل docker info
يجب إغلاق جدار الحماية وإعادة تشغيل النظام
systemctl stop firewalld systemctl disable firewalld # النصيحة: بعد تنفيذ الأوامر أعلاه، يجب إعادة تشغيل النظام reboot -h (إعادة تشغيل النظام)
<4> قد يتم إظهار خطأ عند تشغيل الحاوية
يجب إغلاق selinux
حل المشكلة:
1: setenforce 0 (يتم تطبيقه على الفور، ولا يتطلب إعادة تشغيل النظام)
2: تعديل ملف /etc/selinux/config حيثSELINUX=disabled ثم إعادة تشغيل النظام لجعل التغييرات سارية المفعول
يُنصح بتنفيذ الخطوتين معًا، مما يضمن أن يكون حالة selinux مغلقة بعد إعادة تشغيل النظام
3: يجب بناء صورة أساسية لـ hadoop أولاً، باستخدام ملف dockerfile لبناء.
إولاً، قم ببناء صورة صورة تحتوي على ميزة ssh لسهولة الاستخدام لاحقًا. (لكن هذا قد يؤثر على أمان الصندوق)
النصيحة: كلمة المرور للمستخدم root في هذه الصورة هي root
Mkdir centos-ssh-root Cd centos-ssh-root Vi Dockerfile
# اختيار صورة نظام التشغيل الموجودة مسبقًا كأساس FROM centos # مؤلف الصورة MAINTAINER crxy # تثبيت مكتبات openssh-server و sudo، وإعداد معلمة UsePAM لتكون no RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config # تثبيت openssh-clients RUN yum install -y openssh-clients # إضافة مستخدم اختباري root، كلمة المرور root، وإضافة هذا المستخدم إلى sudoers RUN echo "root:root" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers # الكلمتين التاليتين مميزتان للغاية، يجب أن تكون موجودة على CentOS 6، وإلا لن يمكن تسجيل الدخول إلى sshd المكون من الصندوق RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key # تشغيل خدمة sshd وتقديم 22 RUN mkdir /var/run/sshd EXPOSE 22 CMD [ "/usr/sbin/sshd", "-D" ]
أمر البناء:
docker build -t = "crxy/centos-ssh-root" .
استعلام الصورة التي تم بناؤها مؤخرًا
4: بناء صورة جديدة تحتوي على JDK بناءً على هذه الصورة
الاحتياط: يستخدم JDK إصدار 1.7
Mkdir centos-ssh-root-jdk Cd centos-ssh-root-jdk Cp ../jdk-7u75-Linux-x64.tar.gz . Vi Dockerfile
FROM crxy/centos-ssh-root ADD jdk-7u75-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.7.0_75 /usr/local/jdk1.7 ENV JAVA_HOME /usr/local/jdk1.7 ENV PATH $JAVA_HOME/bin:$PATH
أمر البناء:
docker build -t = "crxy/centos-ssh-root-jdk" .
استعلام عن صورة الحلقة التي تم بناؤها بنجاح
5: بناء صورة JDK هذا مع إضافة hadoop
ملاحظة: يستخدم hadoop إصدار 2.4.1.
Mkdir centos-ssh-root-jdk-hadoop Cd centos-ssh-root-jdk-hadoop Cp ../hadoop-2.4.1.tar.gz . Vi Dockerfile
FROM crxy/centos-ssh-root-jdk ADD hadoop-2.4.1.tar.gz /usr/local RUN mv /usr/local/hadoop-2.4.1 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH
أمر البناء:
docker build -t=crxy/centos-ssh-root-jdk-hadoop .
استعلام عن صورة الحلقة التي تم بناؤها بنجاح
2: بناء شبكة hadoop الموزعة
1: تخطيط الشبكة
نحن نستعد لبناء شبكة معينة تحتوي على ثلاثة عقد، رئيسية واثنتين
الجهة الرئيسية: hadoop0 ip: 192.168.2.10
الجهة الأولى: hadoop1 ip: 192.168.2.11
الجهة الثانية: hadoop2 ip: 192.168.2.12
لكن بعد إعادة تشغيل صناديق docker، سيتم تغيير ip، لذا نحتاج إلى إعداد ip ثابتة للـ docker. استخدم pipework لإعداد ip ثابتة للصناديق docker
2: قم ببدء ثلاث صناديق، كـ hadoop0 hadoop1 hadoop2
في المضيف الرئيسي، قم بتشغيل الأوامر التالية، لضبط اسم المضيف واسم الصندوق، وأيضاً فتح منفذ 50070 و8088 في hadoop0
docker run --name hadoop0 --hostname hadoop0 -d -P -p 50070:50070 -p 8088:8088 crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop1 --hostname hadoop1 -d -P crxy/centos-ssh-root-jdk-hadoop docker run --name hadoop2 --hostname hadoop2 -d -P crxy/centos-ssh-root-jdk-hadoop
使用docker ps 查看刚才启动的是三个容器
3: 给这三台容器设置固定IP
1: 下载pipework 下载地址:https://github.com/jpetazzo/pipework.git
2: 把下载的zip包上传到宿主机服务器上,解压,改名字
unzip pipework-master.zip mv pipework-master pipework cp -rp pipework/pipework /usr/local/bin/
3: 安装bridge-utils
yum -y install bridge-utils
4: 创建网络
brctl addbr br0 ip link set dev br0 up ip addr add 192.168.2.1/24 dev br0
5: 给容器设置固定ip
pipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
验证一下,分别ping三个ip,能ping通就说明没问题
4: 配置hadoop集群
先连接到hadoop0上, 使用命令
docker exec -it hadoop0 /bin/bash
下面的步骤就是hadoop集群的配置过程
1: 设置主机名与ip的映射,修改三台容器:vi /etc/hosts
添加下面配置
192.168.2.10 hadoop0 192.168.2.11 hadoop1 192.168.2.12 hadoop2
2: 设置ssh免密码登录
在hadoop0上执行下面操作
cd ~ mkdir .ssh cd .ssh ssh-keygen -t rsa(一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i hadoop0 ssh-copy-id -i hadoop1 ssh-copy-id -i hadoop2 在hadoop1上执行下面操作 cd ~ cd .ssh ssh-keygen -t rsa(一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i hadoop1 在hadoop2上执行下面操作 cd ~ cd .ssh ssh-keygen -t rsa(一直按回车即可) ssh-copy-id -i localhost ssh-copy-id -i hadoop2
3: 在hadoop0上修改hadoop的配置文件
进入到/usr/local/hadoop/etc/hadoop目录
修改目录下的配置文件core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
(1) hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.7
(2) core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop0:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>
(3) hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration>
(4) yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> </configuration>
(5) تعديل اسم الملف: mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(6) التشكيل
الانتقال إلى مجلد /usr/local/hadoop
1. تنفيذ عملية التشكيل
bin/hdfs namenode -format
ملاحظة: قد يتم عرض خطأ أثناء التنفيذ، لأنه يفتقر إلى أمر which، يمكنك تثبيته.
إجراء الأوامر التالية لالتثبيت
yum install -y which
رؤية الأوامر التالية تشير إلى نجاح التشكيل.
لا يمكن تكرار عملية التشكيل. إذا كنت بحاجة إلى تكرار التشكيل، يمكنك استخدام 参数-force.
(7) بدء التوزيع الوهمي hadoop
الأمر:
sbin/start-all.sh
في عملية البدء لأول مرة، يجب عليك إدخال yes لتحديد.
استخدام jps، هل يمكن التحقق من بدء عملية النظام بشكل صحيح؟ هل يمكنك رؤية العمليات التالية التي تعني بدء التوزيع الوهمي بنجاح
[root@hadoop0 hadoop]# jps 3267 SecondaryNameNode 3003 NameNode 3664 Jps 3397 ResourceManager 3090 DataNode 3487 NodeManager
(8) التوقف عن تشغيل Hadoop المزيف
الأمر:
sbin/stop-all.sh
(9) تحديد عنوان nodemanager، تعديل ملف yarn-site.xml
<property> <description>The hostname of the RM.</description> <name>yarn.resourcemanager.hostname</name> <value>hadoop0</value> </property>
(10) تعديل ملف إعدادات Hadoop في Hadoop0، ملف etc/hadoop/slaves
حذف المحتويات الأصلية، وتعديلها كما يلي
hadoop1 hadoop2
(11) تنفيذ الأمر في Hadoop0
scp -rq /usr/local/hadoop hadoop1:/usr/local scp -rq /usr/local/hadoop hadoop2:/usr/local
(12) بدء خدمة كتلة Hadoop الموزعة
تنفيذ sbin/start-all.sh
ملاحظة: سيتم عرض خطأ أثناء التنفيذ، لأن العقدة الثانوية تفتقر إلى الأمر which، ولكن يمكن تركيبها
في كل من العقدة الثانوية، قم بتنفيذ الأوامر التالية لتركيبها
yum install -y which
ثم قم ببدء الكتلة (إذا كانت الكتلة قد تم بدءها، يجب التوقف أولاً)
sbin/start-all.sh
(13) التحقق من أن الكتلة تعمل بشكل صحيح
أولاً، قم بعرض العمليات:
يحتاج Hadoop0 إلى هذه العمليات
[root@hadoop0 hadoop]# jps 4643 Jps 4073 NameNode 4216 SecondaryNameNode 4381 ResourceManager
يحتاج Hadoop1 إلى هذه العمليات
[root@hadoop1 hadoop]# jps 715 NodeManager 849 Jps 645 DataNode
يحتاج Hadoop2 إلى هذه العمليات
[root@hadoop2 hadoop]# jps 456 NodeManager 589 Jps 388 DataNode
استخدام البرنامج للتحقق من خدمة الكتلة
إنشاء ملف محلي
vi a.txt مرحبًا أنت مرحبًا أنا
التحميل a.txt إلى hdfs
hdfs dfs -put a.txt /
تنفيذ برنامج wordcount
cd /usr/local/hadoop/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-2.4.1.jar wordcount /a.txt /out
مراجعة نتائج تنفيذ البرنامج
إذا كان ذلك، فإن ذلك يعني أن المجموعة تعمل بشكل صحيح
زيارة خدمات المجموعة من خلال المتصفح
بسبب أننا قد أرسلنا 50070 و8088 إلى منافذ المضيف عند بدء صناديق hadoop0
adb9eba7142b crxy/centos-ssh-root-jdk-hadoop "/usr/sbin/sshd -D" About an hour ago Up About an hour 0.0.0.0:8088->8088/tcp, 0.0.0.0:50070->50070/tcp, 0.0.0.0:32770->22/tcp hadoop0
لذا يمكنك الوصول إلى خدمات مجموعة hadoop في الصندوق مباشرة من المضيف
عنوان IP للمضيف هو: 192.168.1.144
http://192.168.1.144:50070/
http://192.168.1.144:8088/
ثالثًا: إعادة تشغيل نقاط المجموعة
توقف الثلاثة صناديق، وتنفيذ الأمر التالي على المضيف المضيف
docker stop hadoop0 docker stop hadoop1 docker stop hadoop2
بعد إيقاف الصناديق، سيختفي IP الثابت الذي تم تعيينه مسبقًا، وعند استخدام هذه الصناديق مرة أخرى، ستحتاج إلى إعادة تعيين IP الثابت
أولاً، أعد بدء الثلاثة صناديق التي تم إيقافها
docker start hadoop0 docker start hadoop1 docker start hadoop2
تنفيذ الأمر التالي على المضيف المضيف لتحديد IP الثابت للصندوق
pipework br0 hadoop0 192.168.2.10/24 pipework br0 hadoop1 192.168.2.11/24 pipework br0 hadoop2 192.168.2.12/24
يجب إعادة تكوين اسم المضيف وإعداد العنوان IP في الصندوق الخاص بك، وكتابة اليدوية كل مرة أمر مزعج
كتابة سكربت،runhosts.sh
#!/bin/bash echo 192.168.2.10 hadoop0 >> /etc/hosts echo 192.168.2.11 hadoop1 >> /etc/hosts echo 192.168.2.12 hadoop2 >> /etc/hosts
إضافة صلاحية التنفيذ
chmod +x runhosts.sh
أكتب هذا السكربت إلى جميع العقد، وأ�行ره كلًا منهم
scp runhosts.sh hadoop1:~ scp runhosts.sh hadoop2:~
أمر تنفيذ السكربت
./runhosts.sh
تحقق من أن الملف /etc/hosts تم إضافته بنجاح
الإشارة: لا يُمكن في بعض إصدارات Docker أن يتم إنشاء هذه المappings تلقائيًا في ملف hosts، لذا نحن نصنع هنا إعداد IP ثابت للصندوق وإنشاء علاقة اسم/IP.
172.17.0.25 hadoop0
172.17.0.25 hadoop0.bridge
172.17.0.26 hadoop1
172.17.0.26 hadoop1.bridge
172.17.0.27 hadoop2
172.17.0.27 hadoop2.bridge
إطلاق مجموعة هادووب
sbin/start-all.sh
هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تشجعوا دروس الصراخ كثيرًا.
البيان: محتويات هذا المقال تم جمعها من الإنترنت، ويحقوق النشر مملوكة للمالك الأصلي، ويتم جمع المحتوى بشكل تلقائي من قبل المستخدمين على الإنترنت، ويحتفظ هذا الموقع بملكية حقوق الطبع والنشر ولا يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا اكتشفتم أي محتوى مخالف لحقوق النشر، فلا تترددوا في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) للإبلاغ، وقدموا الدليل المتعلق بالحقوق النشر، وسنقوم بإزالة المحتوى المزعوم بعد التحقق.