暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试
早在四月份的时候,就已经开了这篇文章。当时是参加数据挖掘的比赛,在计科院大佬的建议下用TensorFlow搞深度学习,而且要在自己的hadoop分布式集群系统下搞。
当时可把我们牛逼坏了,在没有基础的前提下,用一个月的时间搭建自己的大数据平台并运用人工智能框架来解题。
结果可想而知:GG~~~~(只是把hadoop搭建起来了。。。。最后还是老老实实的写爬虫)

当时搭建是用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..0_121
export JRE_HOME=/usr/java/jdk1..0_121/jre
export CLASSPATH=$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:</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></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:</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:</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:</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master:</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master:</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master:</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master:</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=
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=
# 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=
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=
#
# 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=
# Purge task interval in hours
# Set to "" to disable auto purge feature
#autopurge.purgeInterval=
7、安装hbase(http://hbase.apache.org/)我这里装在/usr/local/
(1)/usr/local/hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/java/jdk1..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></value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value></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></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 classpath)
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=10.211.1.129
export JAVA_HOME=/usr/java/jdk1..0_121
9、如果要用tf训练数据的话:pip install tensorflow
至此我们namenode(Master)节点配置完了。。。。。。
10、exit退出容器
生成镜像:docker commit edcabfcd69ff vitoyan/hadoop
发布:docker push

去Docker Hub看一看:

三、测试
如果要做完全分布式的话,还需要添加多个节点(多个容器或者主机)。。。。。
由一个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

(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!!!!!
暑假第二弹:基于docker的hadoop分布式集群系统的搭建和测试的更多相关文章
- 基于docker的spark-hadoop分布式集群之二: 环境测试
在上一章<环境搭建>基础上,本章对各个模块做个测试 Mysql 测试 1.Mysql节点准备 为方便测试,在mysql节点中,增加点数据 进入主节点 docker exec -it had ...
- 基于docker的spark-hadoop分布式集群之一: 环境搭建
一.软件准备 1.基础docker镜像:ubuntu,目前最新的版本是18 2.需准备的环境软件包: (1) spark-2.3.0-bin-hadoop2.7.tgz (2) hadoop-2.7. ...
- 搭建基于docker 的redis分布式集群在docker for windows
https://blog.csdn.net/xielinrui123/article/details/85104446 首先在docker中下载使用 docker pull redis:3.0.7do ...
- 喵星之旅-狂奔的兔子-基于docker的redis分布式集群
一.docker安装(略) 二.下载redis安装包(redis-4.0.8.tar.gz) 以任何方式获取都可以.自行官网下载. 三.拉取centos7的docker镜像 命令:docker pul ...
- 超快速使用docker在本地搭建hadoop分布式集群
超快速使用docker在本地搭建hadoop分布式集群 超快速使用docker在本地搭建hadoop分布式集群 学习hadoop集群环境搭建是hadoop入门的必经之路.搭建分布式集群通常有两个办法: ...
- 使用Docker在本地搭建Hadoop分布式集群
学习Hadoop集群环境搭建是Hadoop入门必经之路.搭建分布式集群通常有两个办法: 要么找多台机器来部署(常常找不到机器) 或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟 ...
- 使用docker搭建hadoop分布式集群
使用docker搭建部署hadoop分布式集群 在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了. 一:环境准备: 1:首先要有一个Cento ...
- 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建
1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...
- CentOS6安装各种大数据软件 第四章:Hadoop分布式集群配置
相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...
随机推荐
- android测试用例编写
说明:android中写测试用例也是用junit,测试用例代码风格是junit3的风格.java中测试用例中使用junit3需要继承TestCase(junit4则不需要,直接用annotation即 ...
- Python基础之注释,算数运算符,变量,输入和格式化输出
Python的注释 注释的作用:用自己熟悉的语言,对某些代码进行标注说明,增强程序的可读性: 在python解释器解释代码的过程中,凡是#右边的,解释器都直接跳过这一行: 注释的分类 单行注释 # 这 ...
- CSAPP:第十章 系统级I/O
CSAPP:第十章 系统级I/O 10.1 unix I/O10.2 文件10.3 读取文件元数据10.4 读取目录内容10.5 共享文件10.6 我们该使用哪些I/O函数? 10.1 unix I/ ...
- pytorch的函数中的group参数的作用
1.当设置group=1时: conv = nn.Conv2d(in_channels=, out_channels=, kernel_size=, groups=) conv.weight.data ...
- MyCP
一.作业要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数:- java MyCP -tx XXX1.txt XXX2.bin 用来把文本文 ...
- Luogu P5283 [十二省联考2019]异或粽子
感觉不是很难的一题,想了0.5h左右(思路歪了,不过想了一个大常数的两只\(\log\)做法233) 然后码+调了1h,除了一个SB的数组开小外基本上也没什么坑点 先讲一个先想到的方法,我们对于这种问 ...
- java基础-03基本语法
关键词 常用关键字53个(含2个保留字): 1.保留关键字(2个) const --常量 常数:用于修改字段或局部变量的声明. goto--转到 指定跳转到标签,找到标签后,程序将处理从下一行开始的命 ...
- 解决android studio引用远程仓库下载慢(JCenter下载慢)
使用开源中国的maven库 阿里云的(速度飞快):http://maven.aliyun.com/nexus/content/groups/public/ 替换项目根目录下build.gradle中的 ...
- 小程序ios开发注意点
两个月了啊,这两个月完成了一个vue的项目还有一个小程序,终于可以休息一下了, 今天先声明一个奇怪的bug,在我开发微信小程序的时候, 发现有个获取商品详情的接口在安卓手机上是可以获取数据的, 但是i ...
- mysql 不同索引的区别和适用情况总结
最近在做sql优化,看到一篇有关sql索引不错的文章,转载一下. 一.索引类型 普通索引:INDEX 允许出现相同的索引内容 (normal) 唯一索引:UNIQUE 不可以出现相同的值,可以有NUL ...