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

[经验分享] 搭建ubuntu14.04的hadoop集群【docker容器充当服务器】

[复制链接]

尚未签到

发表于 2017-12-17 20:31:36 | 显示全部楼层 |阅读模式
  首先弄出来装有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.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>  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下

1.core-site.xml配置文件  

<configuration>  <property>  
  <name>fs.defaultFS</name>   
  <value>hdfs://master:9000</value>  
  </property>  
  <property>  
  <name>hadoop.tmp.dir</name>  
  <value>/hadoop-3.0.0-alpha1/tmp</value>  
  </property>  
  
</configuration>  
  

  2.hdfs-site.xml配置文件
  

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

  3.workers中设置slave节点,将slave机器的名称写入
  

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.0-alpha1/etc/hadoop,  
  /hadoop-3.0.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:8025</value>  
  </property>  
  <property>  
  <name>yarn.resourcemanager.scheduler.address</name>  
  <value>master:8030</value>  
  </property>  
  <property>  
  <name>yarn.resourcemanager.address</name>  
  <value>master:8040</value>  
  </property>  
  
</configuration>  
  

  6.hadoop-env.sh中配置java_home
  

export JAVA_HOME=/usr/local/java/jdk1.8.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  
::
1     localhost ip6-localhost ip6-loopback  
fe00::
0 ip6-localnet  
ff00::
0 ip6-mcastprefix  
ff02::
1 ip6-allnodes  
ff02::
2 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  
::
1     localhost ip6-localhost ip6-loopback  
fe00::
0 ip6-localnet  
ff00::
0 ip6-mcastprefix  
ff02::
1 ip6-allnodes  
ff02::
2 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文件里边的配置有问题。

运维网声明 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-425134-1-1.html 上篇帖子: windows下eclipse 做hadoop开发 下篇帖子: 关于hadoop处理大量小文件情况的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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