设为首页 收藏本站
查看: 1284|回复: 0

[经验分享] 暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试

[复制链接]

尚未签到

发表于 2017-12-18 13:12:43 | 显示全部楼层 |阅读模式
  早在四月份的时候,就已经开了这篇文章。当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞。
  当时可把我们牛逼坏了,在没有基础的前提下,用一个月的时间搭建自己的大数据平台并运用人工智能框架来解题。
  结果可想而知:GG~~~~(只是把hadoop搭建起来了。。。。最后还是老老实实的写爬虫)
DSC0000.png

  当时搭建是用VM虚拟机,等于是在17台机器上运行17个CentOS 7,现在我们用docker来打包环境。
  一、技术架构
  Docker 1.12.6
  CentOS 7
  JDK1.8.0_121
  Hadoop2.7.3 :分布式计算框架
  Zookeeper-3.4.9:分布式应用程序协调服务
  Hbase1.2.4:分布式存储数据库
  Spark-2.0.2:大数据分布式计算引擎
  Python-2.7.13
  TensorFlow1.0.1:人工智能学习系统
  二、搭建环境制作镜像
  1、下载镜像:docker pull centos
  2、启动容器:docker run -it -d --name hadoop centos
  3、进入容器:docker exec -it hadoop /bin/bash
  4、安装java(这些大数据工具需要jdk的支持,有些组件就是用java写的)我这里装在/usr
  配置环境变量/etc/profile
  

#config java  
export JAVA_HOME
=/usr/java/jdk1.8.0_121  
export JRE_HOME
=/usr/java/jdk1.8.0_121/jre  
export>=$JAVA_HOME/lib  
export PATH
=:$PATH:$JAVA_HOME/bin:$JRE_HOME/bin  

  5、安装hadoop(http://hadoop.apache.org/releases.html)我这里装在/usr/local/
  配置环境变量/etc/profile
  

#config hadoop  
export HADOOP_HOME
=/usr/local/hadoop/  
export PATH
=$HADOOP_HOME/bin:$PATH  
export PATH
=$PATH:$HADOOP_HOME/sbin  
#hadoop
?~D彗??W彖~G件路?D?~D?~M置  
export HADOOP_LOG_DIR
=${HADOOP_HOME}/logs  

  source /etc/profile让环境变量生效
  改配置/usr/local/hadoop/etc/hadoop/:
  (1)slaves(添加datanode节点)
  

Slave1  
Slave2
  

  (2)core-site.xml
  

<configuration>  <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/usr/local/hadoop/tmp</value>
  <description>Abase for other temporary directories.</description>
  </property>
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://Master:9000</value>
  </property>
  
</configuration>
  

  (3)hdfs-site.xml
  

<configuration>  <property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>Master:9001</value>
  </property>
  <property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/usr/local/hadoop/dfs/name</value>
  </property>
  <property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/usr/local/hadoop/dfs/data</value>
  </property>
  <property>
  <name>dfs.replication</name>
  <value>2</value>
  </property>
  <property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
  </property>
  
</configuration>
  

  (4)创建mapred-site.xml
  

<configuration>  <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
  </property>
  <property>
  <name>mapreduce.jobhistory.address</name>
  <value>Master:10020</value>
  </property>
  <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>Master:19888</value>
  </property>
  
</configuration>
  

  (5)yarn-site.xml
  

<configuration>  <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
  </property>
  <property>
  
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>
  <property>
  <name>yarn.resourcemanager.address</name>
  <value>Master:8032</value>
  </property>
  <property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>Master:8030</value>
  </property>
  <property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>Master:8031</value>
  </property>
  <property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>Master:8033</value>
  </property>
  <property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>Master:8088</value>
  </property>
  
</configuration>
  

  6、安装zookeeper(https://zookeeper.apache.org/)我这里装在/usr/local/
  配置环境变量/etc/profile
  

#config zookeeper  
export ZOOKEEPER_HOME
=/usr/local/zookeeper  
export PATH
=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf  

  (1)/usr/local/zookeeper/conf/zoo.cfg
  

initLimit=10  
# The number of ticks that can pass between
  
# sending a request and getting an acknowledgement
  
syncLimit
=5  
# the directory where the snapshot is stored.
  
#
do not use /tmp for storage, /tmp here is just  
# example sakes.
  
dataDir
=/usr/local/zookeeper/data  
# the port at
which the clients will connect  
clientPort
=2181  
# the maximum number of client connections.
  
# increase this
if you need to handle more clients  
#maxClientCnxns
=60  
#
  
# Be sure to read the maintenance section of the
  
# administrator guide before turning on autopurge.
  
#
  
# http:
//zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
#
  
# The number of snapshots to retain in dataDir
  
#autopurge.snapRetainCount=3
  
# Purge task interval in hours
  
# Set to "0" to disable auto purge feature
  
#autopurge.purgeInterval=1
  

  7、安装hbase(http://hbase.apache.org/)我这里装在/usr/local/
  (1)/usr/local/hbase/conf/hbase-env.sh
  

export JAVA_HOME=/usr/java/jdk1.8.0_121  
export HBASE_MANAGES_ZK
=false  

  (2)hbase-site.xml
  

<configuration>  <property>
  <name>hbase.rootdir</name>
  <value>hdfs://Master:9000/hbase</value>
  </property>
  

  <property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2181</value>
  </property>
  <property>
  <name>zookeeper.session.timeout</name>
  <value>120000</value>
  </property>
  <property>
  <name>hbase.zookeeper.quorum</name>
  <value>Master,Slave1,Slave2</value>
  </property>
  <property>
  <name>hbase.tmp.dir</name>
  <value>/usr/local/hbase/data</value>
  </property>
  <property>
  <name>hbase.cluster.distributed</name>
  <value>true</value>
  </property>
  
</configuration>
  

  (3)core-site.xml
  

<configuration>  <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/usr/local/hadoop/tmp</value>
  <description>Abase for other temporary directories.</description>
  </property>
  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://Master:9000</value>
  </property>
  
</configuration>
  

  (4)hdfs-site.xml
  

<configuration>  

  <property>
  <name>dfs.replication</name>
  <value>3</value>
  </property>
  
</configuration>
  

  (5)regionservers(代表我的三个节点)
  

Master #namenode  
Slave1 #datanode01
  
Slave2 #datanode02
  

  8、安装 spark(http://spark.apache.org/)我这里装在/usr/local/
  配置环境变量:
  

#config spark  
export SPARK_HOME
=/usr/local/spark  
export PATH
=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin  

  (1)cp ./conf/slaves.template ./conf/slaves
  在slaves中添加节点:
  

Slave1  
Slave2
  

  (2)spark-env.sh
  

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop>
export HADOOP_CONF_DIR
=/usr/local/hadoop/etc/hadoop  
export SPARK_MASTER_IP
=10.211.1.129  
export JAVA_HOME
=/usr/java/jdk1.8.0_121  

  9、如果要用tf训练数据的话:pip install tensorflow
  至此我们namenode(Master)节点配置完了。。。。。。
  10、exit退出容器
  生成镜像:docker commit edcabfcd69ff vitoyan/hadoop
  发布:docker push
DSC0001.png

  去Docker Hub看一看:
DSC0002.png

  三、测试
  如果要做完全分布式的话,还需要添加多个节点(多个容器或者主机)。。。。。
  由一个namenode控制多个datanode。
  1、安装ssh和net工具:yum install openssh-server net-tools openssh-clients -y
  2、生成公钥:ssh-keygen -t rsa
  3、把密钥追加到远程主机(容器):ssh-copy-id -i ~/.ssh/id_rsa.pub  root@10.211.1.129(这样两个容器不用密码就可以互相访问---handoop集群的前提)
  4、在宿主机上查看hadoop容器的ip:docker exec hadoop hostname -i (再用同样的方式给容器互相添加公钥)
  5、修改hostname分别为Master,Slave1、2、3、4、5.。。。。。以区分各个容器
  6、每个容器添加/etc/hosts:
  

10.211.1.129 Master  

10.211.1.130 Slave1  

10.211.1.131 Slave2  

10.102.25.3  Slave3  

10.102.25.4  Slave4  

10.102.25.5  Slave5  

10.102.25.6  Slave6  

10.102.25.7  Slave7  

10.102.25.8  Slave8  

10.102.25.9  Slave9  

10.102.25.10 Slave10  

10.102.25.11 Slave11  

10.102.25.12 Slave12  

10.102.25.13 Slave13  

10.102.25.14 Slave14  

10.102.25.15 Slave15  

10.102.25.16 Slave16  

  7、对应Slave的hadoop配置只需要copy,然后改成对应的主机名。
  8、基本命令
  (1)、启动hadoop分布式集群系统
  cd /usr/local/hadoop
  hdfs namenode -format
  sbin/start-all.sh
  检查是否启动成功:jps
DSC0003.png

  (2)、启动zookeeper分布式应用程序协调服务
  cd /usr/local/zookeeper/bin
  ./zkServer.sh start
  检查是否启动成功:zkServer.sh status
  (3)、启动hbase分布式数据库
  cd /usr/local/hbase/bin/
  ./start-hbase.sh
  (5)、启动spark大数据计算引擎集群
  cd /usr/local/spark/
  sbin/start-master.sh
  sbin/start-slaves.sh
  集群管理:http://master:8080
  集群基准测试:http://blog.itpub.net/8183550/viewspace-684152/
  我的hadoop镜像:https://hub.docker.com/r/vitoyan/hadoop/
  欢迎pull
  over!!!!!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425373-1-1.html 上篇帖子: centos6.5下搭建cdh5.9.1-hadoop集群(完全离线安装) 下篇帖子: Hadoop MapReduce编程 API入门系列之分区和合并(十四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表