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

[经验分享] Mesos上安装Hadoop超详细部署攻略

[复制链接]

尚未签到

发表于 2015-7-11 09:52:08 | 显示全部楼层 |阅读模式
内容原创,转载请注明,谢谢!

第一章 基本介绍



1.准备资料和情况说明。


使用背景:

     a.希望在一个集群上配备两套计算框架。比如MPI STORM HADOOP SPARK。

     b.CPU和内存资源的高效管理

     c.需要细粒度的资源共享,使上层的框架实现特定的调度目标。



     参考资料:主要是两部分,一部分是别人的两篇博客(国内说mesos结合hadoop估计也就这两篇了),还有就是GITHUB的官方文档。





     博客资料:http://www.iyunv.com/jasonkoo/category/398407.html

                   http://blog.chinaunix.net/uid-27103408-id-3480967.html

---------------------------------------下面是参考的hadoop独立安装的博文--------------------

        http://www.iyunv.com/xia520pi/archive/2012/05/16/2503949.html





强烈推荐仔细看官方文档:

         Mesos官方文档(包括如何部署在Hadoop上):https://github.com/apache/mesos/blob/trunk/docs/Home.md

         Hadoop官方网站:http://hadoop.apache.org/



                       


第二章 环境准备

1.基本配置


DSC0000.png



操作系统的安装这里不再赘述,我采用的是minimal(其他的也可),就是最小化的安装,需要什么再装。所有操作均在终端操作。

分区只分了个 /  



2.SecureCRT的安装(直接装独立LINUX的可不装,无影响)

注意:SecureCRT用鼠标左键选中要复制的文字按下左键就是复制,要使用的时候右键粘贴,这个非常注意。如果不知道请记住使用。



用SecureCRT采用远程登入的方式进行操作,因为SecureCRT有自带的上传下载功能,方便我们的操作。

下载地址:http://www.duote.com/soft/724.html

使用:如下图所示





DSC0001.png


DSC0002.png

DSC0003.png







3.配置YUM源 方便快速的下载






cd /etc/yum.repos.d
vi CentOS-base.repo
  

  Baseurl本身是被#注释掉的 将所有的baseurl前面的#全部去掉 这样即可使用YUM。但是官方的源速度很慢。所以建议使用163的源 下面讲下使用方法。
  修改源注意要有命名服务器。配置方式
  



vi /etc/resolv.conf
nameserver   
  

  
  去 http://mirrors.163.com/.help/centos.html  这个网站上有配置163源的方法。
  
  注意:因为在终端,知道地址如何下载呢?这里装一个东西。yum install wget。以后知道下载地址。直接wget www.wankaiming.com/1.txt  就可以下载txt这个文件了
  

4.使用SecureCRT来完成上传下载。(这样大文件你就可以迅雷下载了)  教程网站:http://hi.baidu.com/minordragon/item/e8612fbbbd08eff062388e0b
  
  注意:先安装该软件 yum install lrzsz
  
  上传效果一览
DSC0004.png

第三章 Mesos安装

1.介绍


  近期的一项任务是在一套集群上使用Hadoop和storm两种分布式计算框架,为了更加充分合理地管理集群中的资源,用到了mesos这种资源管理平台。mesos最初是UC Berkeley AMP实验室的一个研究项目,后来开源,并加入Apache,成为一个孵化器项目。
  从其主页可以了解到mesos是一种集群管理器,它为不同的分布式应用或框架提供高效的资源隔离与共享服务。在mesos上面可以运行Hadoop, MPI, Hypertable, Spark和其他应用。
  mesos的用途有四点:
  1. 在一个动态共享的结点池中运行Hadoop, MPI, Spark和其他框架
  2. 在同一个集群上运行多个Hadoop实例,以隔离生产和实验作业,甚至是多个版本的Hadoop作业  
  3. 在相同的结点集合上以批应用的形式运行长期服务(比如Hypertable, Hbase)
  4. 无需重新设计低级基础设施就可以构建新的集群计算框架,并使其与现存框架共存。
  mesos的特征有:
  1. 使用Zookeeper,使主结点具有容错性
  2. 使用快速、事件驱动的C++实现,能够扩展到1万个结点
  3. 使用Linux Containers实现了任务之间的隔离
  4.多种资源调度(内存和CPU)
  5. 高效的应用控制调度机制,让不同框架获得它们自身的安置目标(比如数据局部性)
  6.支持使用Java, Python, C++来开发新的并行应用
  7. Web界面查看集群状态。      

2.软件要求



(1)g++ 4.1或更高版本
安装命令:yum install gcc-c++
(2)Python 2.6 (用于mesos的web界面)
安装命令:yum install python
(3) Python 2.6 developer packages
安装命令:yum install python-devel
(4)cppunit (用于构建zookeeper)
安装命令:yum install cppunit
(5)ava JDK 1.6 或更高版本
说明:
  通过yum install XXX 的方式完成以上1-4的安装。很多时候有待devel的不知道怎么装,可以采用通配符yum install python* 即可
  
  Jdk 1.6还有hadoop的安装文件通过SecureCRT上传到4台虚拟机上。

3.基本准备


    3.1 关闭防火墙(所有机器均设置)

   


在root下完成
chkconfig iptables off (永久生效)
service iptables stop (临时有效)
  


  3.2 配置hosts文件(这个文件非常重要,一定要配置正确。所有机器均设置)




在root下完成
vi /etc/hosts
添加如下
192.168.4.100 mastersrv
192.168.4.101 slavesrv1
192.168.4.102 slavesrv2
192.168.4.103 slavesrv3
  



3.3 增加我们的hadoop用户(所有机器均设置)




在root下执行

1.添加用户
adduser hadoop
2.修改密码
passwd hadoop
  
  注意:文中提到的主目录均指的是hadoop用户的主目录即/home/hadoop下,路径使用~的时候切记保证是hadoop用户在使用。



4.完成主机无密码登入到节点




4.1准备工作




yum install openssh
yum install openssh-clients
yum install rsycn

  4.2在mastersrv上生成密钥



先切换成hadoop用户
su hadoop

进入hadoop主目录
cd  ~
生成密钥
ssh-keygen -t ras -P ''
  此时密钥对默认生成在你的主目录下。即 /home/hadoop/.ssh .
  注意.ssh是隐藏文件请采用 ll -a 或者 ls -a



把id_rsa.pub追加到授权的key里面
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  此时在.ssh文件下已经又authorized_keys
  为了保证hadoop用户能够正常使用RSA功能,做一些权限的修改



chmod 600 ~/.ssh/authorized_keys
  然后启用RSA功能(此时先更换到root用户)所有节点上均要执行以下的设置



vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
在vi命令模式下输入/RSAA  即可直接定位到此处,去除前面的#即可.然后保存
  重启SSH服务所有节点上均要执行以下的设置



service sshd restart
  验证是否正确



su hadoop
ssh localhost
  注意此时可能问你Are you sure you want to continue connecting(YES/NO)?  这里选yes即可,因为第一次连接会把要连接的机器hostname保存在konwn_hosts中
  4.3将公钥传递给所有的节点



首先在所有的节点上登入hadoop 然后在它的主目录即/home/hadoop下创建.ssh文件夹
mkdir .ssh
改变它的权限
chmod 700 ~/.ssh


再回到mastersrv上用hadoop完成以下传递公钥的过程
scp ~/.ssh/id_rsa.pub hadoop@192.168.4.101:~/
scp ~/.ssh/id_rsa.pub hadoop@192.168.4.102:~/
scp ~/.ssh/id_rsa.pub hadoop@192.168.4.103:~/

在“每个”节点上将id_rsa.pub转移到刚才建的.ssh目录下
mv id_rsa.pub ~/.ssh

修改它的名字
cd ~/.ssh
mv id_rsa.pub authorized_keys

并且为了保证正常工作修改它的权限

chmod 600 authorized_keys
  验证是否能从mastersrv登入到所有节点上(单向的,不能从节点登入主机是正常的,如需要可以拷贝私钥)



在mastersrv上执行以下操作
ssh slavesrv1
ssh slavesrv2
ssh slavesrv3
第一次登入要输入个yes前面提到过
  



5.安装MESOS


版本:mesos-0.9.0




可以自己在hadoop主目录建个upload目录
mkdir upload
cd upload
下载到upload目录下
  


下载到当前目录:wget http://www.fayea.com/apache-mirror/incubator/mesos/mesos-0.9.0-incubating/mesos-0.9.0-incubating.tar.gz








解压安装文件
tar -zxvf  mesos-0.9.0-incubating.tar.gz


拷贝到主目录下
cp mesos-0.9.0 ~/


configure脚本配置
./configure --with-java-home=/usr/java/jdk1.6.0_43 --prefix=/home/hadoop/mesos
  至于以上的一些参数为何是这样,详情请见官方文档,皆有说明。以上指定了jdk的目录(你安装的位置写你自己的)以及mesos的安装目录。此时hadoop主目录下有如下的文件夹了
  https://github.com/apache/mesos/blob/trunk/docs/Home.md
  
DSC0005.png
  忘记自己所在目录采用pwd命令



build 和 安装
cd mesos-0.9.0
make
make install


将安装目录“mesos”传送到所有节点的主目录下
scp -r ~/mesos hadoop@slavesrv1:~/
scp -r ~/mesos hadoop@slavesrv2:~/
scp -r ~/mesos hadoop@slavesrv3:~/
6.配置MESOS
  6.1 mastersrv上的配置



cd ~/mesos/var/mesos/deploy
在deploy下创建两个文件
mkdir masters
mkdir slaves
#masters文件的内容
mastersrv

#slaves文件的内容
slavesrv1
slavesrv2
slavesrv3
cd ~/mesos/var/mesos/conf
vi mesos.conf
#mesos.conf的内容如下
log_dir=/home/hadoop/mesos/log

  注意:mesos.conf配置文件能配置哪些东西,如何写,有什么作用请看官方文档。
  https://github.com/apache/mesos/blob/trunk/docs/Configuration.textile
  6.2所有节点上的配置



#节点上mesos.conf
master=master:5050
log_dir=/home/hadoop/mesos/log
resources=cpus:1;mem:1000
  7.启动mesos



cd ~/mesos/sbin
./mesos-start-cluster.sh

要停止请使用
./mesos-stop-cluster.sh

如果不想每次进目录使用脚本请配置/etc/profile并且生效
  此时打开浏览器输入主机IP和8080端口可以看到mesos状态  http://192.168.4.100:8080 效果如下
DSC0006.png
DSC0007.png

可以看到资源情况节点信息。如果连接了框架还会有框架信息。当有任务运行的时候还能具体进去看执行情况。比如hadoop的mpa和reduce



第四章 安装Hadoop

1.基本说明
  hadoop on mesos官方文档https://github.com/apache/mesos/blob/trunk/docs/Running-Hadoop-on-Mesos.md
  由官方文档我们可知,支持mesos的hadoop版本为


  • 0.20.205.0: Included in Mesos (as described above).
  • CDH3u3: https://github.com/patelh/cdh3u3-with-mesos
  我们下载的mesos中已经包含了0.20.205.0这个版本,所以我们使用该版本,并且它有脚本可以给我们自动打补丁。如果使用CDH3U3这种版本就要手动打补丁,不建议。

2.解压hadoop并且打好补丁



cd  ~/mesos-0.9.0/hadoop
  此时看到的东西如下
DSC0008.png



执行补丁。完成解压,配置,BUILD,打补丁等一系列工作。
./TUTORIAL
基本上一路回车到底。中间的信息也可以稍微看看。如果成功,大概就是提示你要运行一个example的时候让你回车确认的时候,这时候上面会有字
build successful!  说明之前没有错误。

接下去会让你按回车运行wordcount的例子,一直回车,然后会卡在map 0% reduce 0%.这是正常的,你都没写配置文件怎么会成功呢?直接Ctrl+C结束进程
3.hadoop的配置
  3.1 配置主目录环境变量



#先切换到root
vi /etc/profile   
#shift+g切换到最后一行按I进行输入
export HADOOP_HOME=/home/hadoop/mesos-0.9.0/hadoop/hadoop-0.20.205.0
#使它生效
source /etc/profile
以后要进入这个目录直接cd $HADOOP_HOME 即可
  3.2拷贝两个文件到$HADOOP_HOME下



cp /home/hadoop/mesos-0.9.0/protobuf-2.4.1.jar $HADOOP_HOME/
cp /home/hadoop/mesos-0.9.0/src/mesos-0.9.0.jar $HADOOP_HOME/
  这两个文件很重要,配置中也会用到
  $HADOOP_HOME即/home/hadoop/mesos-0.9.0/hadoop/hadoop-0.20.205.0下就会有这两个文件了
DSC0009.png
  3.3 对$HADOOP_HOME/conf 目录下的文件进行配置
  core-site.xml








fs.default.name
hdfs://mastersrv:54310


hadoop.tmp.dir
/home/hadoop/tmp_hadoop


  
  
  hdfs-site.xml
  








dfs.replication
1


  
  
  
  mapred-site.xml
  





mapred.job.tracker
mastersrv:54311


mapred.jobtracker.taskScheduler
org.apache.hadoop.mapred.MesosScheduler


mapred.mesos.master
mastersrv:5050


  
  
  
  
  hadoop-env.sh(重要!绝大多数时候出错就是这里没配好。之前按别人的方法配,但总是出错,不知道是JDK的原因还是下载的mesos内容有细微差异造成)
  



# Set Hadoop-specific environment variables here.
# The only required environment variable is JAVA_HOME.  All others are
# optional.  When running a distributed configuration it is best to
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.
# Mesos build directory, useful for finding JARs and the native library.
test -z ${MESOS_BUILD_DIR} && \
export MESOS_BUILD_DIR=`cd ../.. && pwd`
# Google protobuf (necessary for running the MesosScheduler).
export PROTOBUF_JAR=${HADOOP_HOME}/protobuf-2.4.1.jar


# Mesos.
export MESOS_JAR=${HADOOP_HOME}/mesos-0.9.0.jar

# Native Mesos library.
export MESOS_NATIVE_LIBRARY=/home/hadoop/mesos/lib/libmesos-0.9.0.so
# The java implementation to use.  Required.
export JAVA_HOME=/usr/java/jdk1.6.0_43
# Extra Java CLASSPATH elements.  Optional.
export HADOOP_CLASSPATH=${HADOOP_HOME}/build/contrib/mesos/classes:${MESOS_JAR}:${PROTOBUF_JAR}
# The maximum amount of heap to use, in MB. Default is 1000.
# export HADOOP_HEAPSIZE=2000
# Extra Java runtime options.  Empty by default.
# export HADOOP_OPTS=-server
# Command specific options appended to HADOOP_OPTS when specified
export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS"
export HADOOP_SECONDARYNAMENODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS"
export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
export HADOOP_BALANCER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS"
export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS"
# export HADOOP_TASKTRACKER_OPTS=
# The following applies to multiple commands (fs, dfs, fsck, distcp etc)
# export HADOOP_CLIENT_OPTS
# Extra ssh options.  Empty by default.
# export HADOOP_SSH_OPTS="-o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR"
# Where log files are stored.  $HADOOP_HOME/logs by default.
# export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
# File naming remote slave hosts.  $HADOOP_HOME/conf/slaves by default.
# export HADOOP_SLAVES=${HADOOP_HOME}/conf/slaves
# host:path where hadoop code should be rsync'd from.  Unset by default.
# export HADOOP_MASTER=master:/home/$USER/src/hadoop
# Seconds to sleep between slave commands.  Unset by default.  This
# can be useful in large clusters, where, e.g., slave rsyncs can
# otherwise arrive faster than the master can service them.
# export HADOOP_SLAVE_SLEEP=0.1
# The directory where pid files are stored. /tmp by default.
# export HADOOP_PID_DIR=/var/hadoop/pids
# A string representing this instance of hadoop. $USER by default.
# export HADOOP_IDENT_STRING=$USER
# The scheduling priority for daemon processes.  See 'man nice'.
# export HADOOP_NICENESS=10
# close warning information
export HADOOP_HOME_WARN_SUPPRESS=TRUE
  
  因为该配置文件比较重要所以把完整文件放上来了 其实大部分是注释。改的无非是
  1.PROTOBUF_JAR
  2. MESOS_JAR
  3.MESOS_NATIVE_LIBRARY
  4.HADOOP_CLASSPATH
  5.HADOOP_HOME_WARN
  请仔细对照
  
  masters




mastersrv
  
  slaves
  



slavesrv1
slavesrv2
slavesrv3
  
  

4.启动在mesos上的hadoop

  4.1先确保mesos已经正常启动,能够在浏览器中打开mesos管理界面并且看到节点正常连接
  4.2在$HADOOP_HOME目录下运行如下命令。
  注意:因为mesos的原因,请不要在hadoop/bin目录下直接采用./的形式来运行脚本。要在$HADOOP_HOME下采用 bin/脚本名 的方式来运行hadoop相关的命令
  



cd $HADOOP_HOME
bin/hadoop namenode -format
#看到成功信息后所有机器hadoop主目录下就会有tmp_hadoop目录。

#开启hdfs
bin/start-dfs.sh
#打开jobtracker
bin/hadoop jobtracker
  
  具体的效果如下(从执行完format命令之后开始):
  4.3 现在的状况,可用 jps查看当前的java进程是这样的
DSC00010.png
  4.4 启动start-dfs.sh之后的情况
  在mastersrv上
DSC00011.png
  
  
  在slavesrvX上
DSC00012.png
  
  4.5执行bin/hadoop jobtracker后的情况.等一下出现如下信息表示正常启动
DSC00013.png
  远程再开启个主机的登入用 jps验证发现jobtracker已经开启。
DSC00014.png
  注意:有时候开启jobtracker会有safemode错误,这个没关系,会告诉等待多少秒,等待过去就好了,这个是他本身的一个机制。可自行百度
  4.6在$HADOOP_HOME下提交任务,运行wordcount程序(必须以hadoop用户身份运行,否则出错)



#先准备要计数的文件
cd ~
mkdir examples
vi file1.txt     
vi file2.txt
内容自己写。我写的如下
-----------------------------
Hello World Hello World Hello World
------------------------------
Hello Hadoop Hello Hadoop Hello Hadoop

cd $HADOOP_HOME
#在HDFS创建个目录放文件
bin/hadoop fs -mkdir input
#将文件放进去
bin/hadoop fs -put /home/hadoop/examples/file*.txt input
#看看有没
bin/hadoop fs -ls input
#提交任务(此时在$HADOOP_HOME下)
bin/hadoop jar hadoop-examples-0.20.205.0.jar wordcount input output
  4.7运行效果如下,此时MESOS的管理界面也能看到信息。
DSC00015.png
  
DSC00016.png
  
DSC00017.png
  
  4.8查看输出结果



bin/hadoop fs -ls output
看到有文件了
查看
bin/hadoop fs -cat output/part-r-00000
DSC00018.png
  
  
  总结:花了将近一周,经历了各种错误,也算获益良多,有问题欢迎留言探讨。

运维网声明 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-85422-1-1.html 上篇帖子: hadoop文件系统体系 下篇帖子: Hadoop不适合处理实时数据的原因剖析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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