搭建ubuntu14.04的hadoop集群【docker容器充当服务器】
首先弄出来装有hadoop、java、ssh、vim的镜像起名badboyf/hadoop。
做镜像有两种方法,一种是用Dockerfile来生成一个镜像,一种是基于ubuntu14.04的基础镜像生成容器后进入容器设置完成后,根据容器打成新的镜像。这是第一次弄,各种不会的地方,所以用第二种方法,弄出来后会如果有时间在写Dockerfile来生成镜像。(为什么尽量用Dockerfile生成镜像,由容器生成的镜像特别大,比想象中的大,而且Dockerfile容易传输)
开始
首先需要ubuntu14.04的镜像,拉取镜像:
docker pull ubuntu:14.04
根据镜像生成一个容器:(这个容器ip为172.17.0.2 ip是自动生成的)
docker run -it --name hadoop ubuntu:14.04 /bin/bash
/bin/bash这个是启动命令,当执行完这条语句后就会直接进入容器并交给一个终端。
由于是ubuntu的镜像,需要修改源,自带的源在国内速度太慢
vi /etc/apt/sources.list
将下面的代码替换掉源文件的代码:
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
apt-get update
apt-get install vim-gtk
apt-get install openssh-server
下载需要的软件,要操作系统,还不会用vi所以下了个vim,下载ssh因为hadoop和jdk的安装包已经下载好了需要传到容器中,并且集群的搭建也需要用到ssh。
容器中其实就是ubuntu的操作系统,所以就大胆的弄,把需要的包都传上来并安装,在容器中执行
service ssh start
scp root@192.168.1.30:/home/hadoop-3.0.-alpha1-src.tar.gz /
scp root@192.168.1.30:/home/jdk-8u102-linux-x64.tar.gz /
tar -zxvf jdk-8u102-linux-x64.tar.gz /usr/local/java/
mv /usr/local/java/jdk1.8.0_102 /usr/local/java/jdk1.8
tar -zxvf hadoop-3.0.0-alpha1-src.tar.gz . #配置
vim /etc/profile
#下面这些粘到最后面export JAVA_HOME=/usr/local/java/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_INSTALL=/hadoop-3.0.0-alpha1
export PATH=$PATH:$HADOOP_INSTALL/bin:$HADOOP_INSTALL/sbin #这个参数在搭建集群的时候会用到
touch /etc/profile.d/hadoop_home_env.sh
vim /etc/profile.d/hadoop_home_env.sh
# 加上
export HADOOP_HOME=/hadoop-3.0.0-alpha1
输入 java -version 查看java安装是否成功,输入hadoop 查看hadoop是都安装成功。
确保安装成功后,开始集群的配置:(一下配置 copy自 http://blog.csdn.net/u010499619/article/details/52886872 稍做修改)
hadoop3.0需要配置的文件有core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、hadoop-env.sh、workers都在hadoop安装目录的/etc/hadoop下
slave1
4.mapred-site配置
(加黑的部分是因为我电脑上docker容器上的内存不够,执行mapreduce程序时Container [] is running beyond virtual memory limits。随自己的电脑情况来看,如果不是容器,虚拟机或真机的话,这应该不会有问题。
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>800</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx256m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx512m</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/hadoop-3.0.-alpha1/etc/hadoop,
/hadoop-3.0.-alpha1/share/hadoop/common/*,
/hadoop-3.0.0-alpha1/share/hadoop/common/lib/*,
/hadoop-3.0.0-alpha1/share/hadoop/hdfs/*,
/hadoop-3.0.0-alpha1/share/hadoop/hdfs/lib/*,
/hadoop-3.0.0-alpha1/share/hadoop/mapreduce/*,
/hadoop-3.0.0-alpha1/share/hadoop/mapreduce/lib/*,
/hadoop-3.0.0-alpha1/share/hadoop/yarn/*,
/hadoop-3.0.0-alpha1/share/hadoop/yarn/lib/*
</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.ShuffleHandle</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:</value>
</property>
</configuration>
6.hadoop-env.sh中配置java_home
export JAVA_HOME=/usr/local/java/jdk1..0_101 #必须设置,即使配置了在profile中配置了java_home得设置
这样基础的容器搭建好,ctrl + d 或者 exit 退出容器。
docker commit hadoop badboyf/hadoop
docker images 查看镜像
这个镜像是特别大的,我打出来两个多G,所以说还是用Dockerfile来打镜像
使用docker做这个测试的原因就是比较懒,不想装两个虚拟机,还是比较懒,所以直接就用这个容器当做了master,在根据生成的镜像生成一个slave1节点。(ip:172.17.0.3)
docker run -it --name slave1 --link hadoop:master badboyf/hadoop:latest /bin/bash
用--link是新生成的容器能根据别名(master)就能找到hadoop这个容器,进入容器后查看 /etc/hosts 文件多了一行
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.2 master 029b3703b460 hadoop
172.17.0.3 1c0160d6ad3d slave1
172.17.0.2 master 029b3703b460 hadoop这个是--link自动加的
下面的slave1是手动加的,使用slave1也能让这个容器认识自己,因为 $HADOOP_INSTALL/etc/hadoop/worders 中写的是slave1
也要修改hadoop容器中的 /etc/hosts 文件:
127.0.0.1 localhost
:: localhost ip6-localhost ip6-loopback
fe00:: ip6-localnet
ff00:: ip6-mcastprefix
ff02:: ip6-allnodes
ff02:: ip6-allrouters
172.17.0.2 029b3703b460 master
172.17.0.3 1c0160d6ad3d slave1
加黑的部分是各自的容器的主机的名(终端输入hostname查看)及自己hadoop配置中用到的名,这里是手动加的,在生产环境肯定不是这么玩的,但是水平有限,先能程序跑通在优化吧。为什么要把主机的名也添加上,mapreduce程序在跑的时候有一步resourcemanager需要连slave1用的就是主机名。而且在/etc/hosts文件在容器重启的时候会恢复最后备份一下,到时候直接粘过去,还是水平有限。还有重启的时候/etc/profile、/etc/profile.d/里边的文件 需要重新source一下。ssh服务需要重启(service ssh restart)。
配置两个容器间免密码登陆:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #两个容器都生成公钥,生成~/.ssh/id_rsa.pub、~/.ssh/id_rsa
把id_rsa.pub里面的内容分别复制到对方的容器中~/.ssh/authorized_keys文件中。测试过程中最好也配置一下本身容器的免密码登陆,可以测试一下hosts中是否配置成功。
到这里,配置已经完事。开始测试程序是否能在集群里跑通。
格式化namenode:这步一定要先执行(主从节点都执行)
hdfs namenode -format
启动dfs及yarn(启动程序之类的脚本都在 hadoop安装目录/sbin/ 目录下)(这步只需在主节点执行,当主节点执行完成后,到从节点容器中用jps命令查看,会发现已经启动了需要启动的程序)
start-dfs.sh
start-yarn.sh
测试mapreduce程序:(跑程序前需要先穿件好输入文件)
hadoop fs -mkdir /input
hadoop fs -put /README.txt /input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-alpha1.jar grep /input /output 'dfs[a-z]+'
遇到的各种问题:
程序运行期间可能会出现各种问题,这是需要把log级别放宽点,打开DEBUG级别:
export HADOOP_ROOT_LOGGER=DEBUG,console
export HADOOP_ROOT_LOGGER=INFO #处理完问题在把级别设成info,debug输出的东西太多了
java.net.ConnectException: Connection refused:
先看看hdfs是否启动了,在看看ssh服务是否启动,然后确定自己配置的master,slave1能否在各自的容器中识别,可以利用ssh。
libexec 中的文件不能执行之类的问题:
/etc/profile.d/ 里边的文件配置HADOOP_HOME环境变量出错。
在执行中一直停在running job:
打开debug级别,如果一直在connect to 一堆乱七八糟的字母,因为hosts中配置的问题,把从节点主机名与ip对应
hfds系统默认生成的文件系统在/tmp/下,如果感觉是操作文件系统时发生什么状况(比如更改配置后在用hadoop fs时就报错之类的问题),需要重新格式化一下,把所有的都停了:
stop-yarn.sh
stop-dfs.sh
然后
rm -fr /tmp
hdfs namenode -format
删掉目录里的东西,如果你的系统中这个目录有其他有用的文件,到这个里面找到有关hadoop的文件夹在删掉。然后在重新format。如果还不好用,看看是不是core-site.xml文件里边的配置有问题。
搭建ubuntu14.04的hadoop集群【docker容器充当服务器】的更多相关文章
- hadoop集群环境搭建之安装配置hadoop集群
在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/ (如果没有这个目录 ...
- CentOS7 搭建Ambari-Server,安装Hadoop集群(一)
2017-07-05:修正几处拼写错误,之前没发现,抱歉! 第一次在cnblogs上发表文章,效果肯定不会好,希望各位多包涵. 编写这个文档的背景是月中的时候,部门老大希望我们能够抽时间学习一下Had ...
- Uubntu14.04下 Hadoop集群环境搭建
1机器信息 master192.168.3.10 hadoop/ hadoop slave1192.168.3.11 hadoop/ hadoop slave2192.168.3.12 hadoop/ ...
- Ubuntu14.04安装ROOT集群
之前尝试在CentOS7上部署ROOT集群,却发现无论是源码包安装,还是官方提供的二进制包,都缺少了关键的xproofd可执行文件,导致PoD不能运行.没有办法,只能尝试在其他OS上部署,这里我选择了 ...
- 大数据平台搭建 - cdh5.11.1 - hadoop集群安装
一.前言 由于线下测试的需要,需要在公司线下(测试)环境搭建大数据集群. 那么CDH是什么? hadoop是一个开源项目,所以很多公司再这个基础上进行商业化,不收费的hadoop版本主要有三个,分别是 ...
- 基于Docker快速搭建多节点Hadoop集群--已验证
Docker最核心的特性之一,就是能够将任何应用包括Hadoop打包到Docker镜像中.这篇教程介绍了利用Docker在单机上快速搭建多节点 Hadoop集群的详细步骤.作者在发现目前的Hadoop ...
- docker安装hadoop集群
docker安装hadoop集群?图啥呢?不图啥,就是图好玩.本篇博客主要是来教大家如何搭建一个docker的hadoop集群.不要问 为什么我要做这么无聊的事情,答案你也许知道,因为没有女票.... ...
- hadoop集群环境搭建之zookeeper集群的安装部署
关于hadoop集群搭建有一些准备工作要做,具体请参照hadoop集群环境搭建准备工作 (我成功的按照这个步骤部署成功了,经实际验证,该方法可行) 一.安装zookeeper 1 将zookeeper ...
- hadoop集群环境的搭建
hadoop集群环境的搭建 今天终于把hadoop集群环境给搭建起来了,能够运行单词统计的示例程序了. 集群信息如下: 主机名 Hadoop角色 Hadoop jps命令结果 Hadoop用户 Had ...
随机推荐
- ftp unable to fetch some archives,maybe run apt-get update or try with -- fix-missing?
引用:http://bbs.csdn.net/topics/340061850 先 apt-get update 再执行安装
- web前端浮动、清浮动问题
浮动的问题如下一一列举如有考虑不周的欢迎欢迎大家补充: 1.浮动,兼容性问题3px的问题,双边距的问题 在平时工作的过程中,解决3px的问题,一般都是初始化*{margin:0;padding:0px ...
- JVM内存管理
前几天公司的郑大晔校上,XXX同事做了JVM的Session,于是趁端午节放假的功夫,研究了一些JVM相关的知识. 在Java生态系统中,JVM占据至关重要的作用,就像一个适配器,它向编程语言(主要是 ...
- Ruby中 Include, Extend, Import, Require 的使用区别
Include 如下例当你Include一个模块到某个类时, 相当于把模块中定义的方法插入到类中.它允许使用 mixin.它用来 DRY 你的代码, 避免重复.例如, 当你有多个类时, 需要相同的函数 ...
- Weblogic日志机制详解
服务器日志 每个 WebLogic Server 实例将来自子系统和应用程序的所有消息写入位于本地主机上的服务器日志文件.默认情况下,服务器日志文件位于服务器实例根目录下的 logs 目录中:例如, ...
- Linux下如何查看高CPU占用率线程
转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...
- Ubuntu 16.04系统布署小记
前段时间趁着双11打折,又将阿里云主机续费了3年.之前布署的系统是Ubuntu 12.04,从系统发布到现在也有四年半了,其官方支持的生命周期也将止于明年春,且这在几年里出现了很多新的事物,我也需要跟 ...
- NetBean常用快捷键(MAC中)
shift+cmd+i:导入包 shift+alt+上:复制当前行,鼠标留在上一行 shift+alt+下:复制当前行,鼠标留在下一行 shift+ctrl+上:将选中行向上移动 shift ...
- windows10 下访问 virtualbox 虚拟机的linux15.10/16.04 系统 及 用 putty 访问虚拟机的配置
参考: http://www.doc88.com/p-915707596190.html --- 安装samba http://my.oschina.net/u/2260265/blog/405598 ...
- angular源码阅读3:真的,依赖注入的原理
前面已经提到了: 如何注册一个module. 如何获取一个module. injector与module以及provider的关系. 那么已经剩下最后一部分了,就是关于依赖是如何被注入的. 且看下面这 ...