Mesos上安装Hadoop超详细部署攻略
内容原创,转载请注明,谢谢!
第一章 基本介绍
1.准备资料和情况说明。
第二章 环境准备
1.基本配置
cd /etc/yum.repos.d vi CentOS-base.repo
Baseurl本身是被#注释掉的 将所有的baseurl前面的#全部去掉 这样即可使用YUM。但是官方的源速度很慢。所以建议使用163的源 下面讲下使用方法。
修改源注意要有命名服务器。配置方式
vi /etc/resolv.conf nameserver <这里写你命名服务器IP>
去 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
上传效果一览
第三章 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.基本准备
在root下完成
chkconfig iptables off (永久生效)
service iptables stop (临时有效)
在root下完成 vi /etc/hosts 添加如下 192.168.4.100 mastersrv 192.168.4.101 slavesrv1 192.168.4.102 slavesrv2 192.168.4.103 slavesrv3
在root下执行
1.添加用户 adduser hadoop 2.修改密码 passwd hadoop
注意:文中提到的主目录均指的是hadoop用户的主目录即/home/hadoop下,路径使用~的时候切记保证是hadoop用户在使用。
4.完成主机无密码登入到节点
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
可以自己在hadoop主目录建个upload目录 mkdir upload cd upload 下载到upload目录下
解压安装文件 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
忘记自己所在目录采用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 效果如下
可以看到资源情况节点信息。如果连接了框架还会有框架信息。当有任务运行的时候还能具体进去看执行情况。比如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
此时看到的东西如下
执行补丁。完成解压,配置,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下就会有这两个文件了
3.3 对$HADOOP_HOME/conf 目录下的文件进行配置
core-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://mastersrv:54310</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/tmp_hadoop</value> </property> </configuration>
hdfs-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
mapred-site.xml
<configuration> <property> <name>mapred.job.tracker</name> <value>mastersrv:54311</value> </property> <property> <name>mapred.jobtracker.taskScheduler</name> <value>org.apache.hadoop.mapred.MesosScheduler</value> </property> <property> <name>mapred.mesos.master</name> <value>mastersrv:5050</value> </property> </configuration>
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进程是这样的
4.4 启动start-dfs.sh之后的情况
在mastersrv上
在slavesrvX上
4.5执行bin/hadoop jobtracker后的情况.等一下出现如下信息表示正常启动
远程再开启个主机的登入用 jps验证发现jobtracker已经开启。
注意:有时候开启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的管理界面也能看到信息。
4.8查看输出结果
bin/hadoop fs -ls output 看到有文件了 查看 bin/hadoop fs -cat output/part-r-00000
总结:花了将近一周,经历了各种错误,也算获益良多,有问题欢迎留言探讨。