红联Linux门户
Linux帮助

CentOS 6.2(64位)下安装Spark0.8.0详细记录

发布时间:2015-04-06 21:45:43来源:linux网站作者:qianlong4526888

系统:CentOS 6.2
 
操作账号:root
 
Spark版本:spark-0.8.0-incubating-bin-Hadoop1.tgz
 
jdk版本:jdk-7-linux-x64.rpm
 
scala版本:scala-2.9.3.tgz
 
使用的节点情况:(172.18.11.XX) XX=16,17,18,20,21,23,24,25,26,27,28,29,30,31,32,33,34 共17个节点
 
主控节点:hw024,以下操作如无特别说明全部在hw024上进行
 
注意:(1)因为我之前在24-28上安装过所有环境,所以以下for循环中没有这五个节点,但是如果要自行配置,需要在for循环中加入所有节点hostname
 
(2)注意,三台机器spark所在目录必须一致,因为master会登陆到worker上执行命令,master认为worker的spark路径与自己一样。


1. 配置各个节点无密码登陆
 
(a)在每个节点分别执行:
 
yum remove selinux* -y(预防ssh-keygen命令不成功)
 
ssh-keygen -t rsa(之后一路回车)
 
这将在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。
 
(b)将所有datanode节点的公钥id_rsa.pub传送到namenode上:
 
cp id_rsa.pub hw016.id_rsa.pub
 
scp hw016.id_rsa.pub "namenode节点ip地址":/root/.ssh
 
......
 
cp id_rsa.pub hw0XX.id_rsa.pub
 
scp hw0XX.id_rsa.pub namenode节点ip地址:/root/.ssh
 
(c)namenode节点上综合所有公钥(包括自身)并传送到所有节点上
 
cp id_rsa.pub authorized_keys 这是namenode自己的公钥
 
cat hw016.id_rsa.pub >> authorized_keys
 
......
 
cat hw0XX.id_rsa.pub >> authorized_keys
 
然后使用SSH协议将所有公钥信息authorized_keys复制到所有DataNode的.ssh目录下
 
scp authorized_keys “data节点ip地址”:/root/.ssh
 
这样配置过后,所有节点之间可以相互SSH无密码登陆,可以通过命令
 
“ssh 节点ip地址”来验证。
 
配置完毕,在namenode上执行“ssh 本机,所有数据节点”命令,因为ssh执行一次之后将不会再询问。
 
备注:用scp命令拷贝到所有节点时,可以放到脚本执行,脚本内容如下:
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw024 hw025 hw026 hw027 hw028 hw029 hw030 hw031 hw032 hw033 hw034
 
do
 
echo cping to $dir
 
scp -r authorized_keys root@$dir:/root/.ssh/
 
done


2. 修改hosts并拷贝到所有节点
 
hosts内容如下:
 
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
 
172.18.11.15 hw015
 
172.18.11.16 hw016
 
172.18.11.17 hw017
 
172.18.11.18 hw018
 
172.18.11.20 hw020
 
172.18.11.21 hw021
 
172.18.11.23 hw023
 
172.18.11.24 hw024
 
172.18.11.25 hw025
 
172.18.11.26 hw026
 
172.18.11.27 hw027
 
172.18.11.28 hw028
 
172.18.11.29 hw029
 
172.18.11.30 hw030
 
172.18.11.31 hw031
 
172.18.11.32 hw032
 
172.18.11.33 hw033
 
172.18.11.34 hw034
 
scp到所有节点的/etc/目录下
 
这一步是为了方便以后的操作,以后再拷贝其他文件,在脚本中就不用写ip。


3. 拷贝所有需要安装的包到各个节点的对应目录下
 
#!/bin/bash
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw029 hw030 hw031 hw032 hw033 hw034
 
do
 
echo cping to $dir
 
scp -r jdk-7-linux-x64.rpm root@$dir:/home/xxx
 
done


4. 分别登陆各个节点,安装jdk1.7
 
进入每个节点的/home/xxx,  执行命令:rpm -ivh jdk-7-linux-x64.rpm
 
其自动安装到/usr/java/jdk1.7.0


5. 安装scala
 
解压scala-2.9.3.tgz到/home/xxx下,生成scala-2.9.3目录
 
拷贝scala-2.9.3到每个节点的/usr/lib下:
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw029 hw030 hw031 hw032 hw033 hw034
 
do
 
echo cping to $dir
 
scp -r scala-2.9.3 root@$dir:/usr/lib
 
done


6. 安装Spark
 
(1)解压 spark-0.8.0-incubating-bin-hadoop1.tgz 到每个节点的/home/xxx目录下
 
由于我们已经将解压好的spark目录拷贝到各个节点上(见步骤3),故这里略去。
 
(2)设置环境变量
 
我们会在后面统一设置环境变量。
 
(3)设置spark的配置文件
 
设置spark源码目录下的/conf/slaves文件如下:
 
hw016
 
hw017
 
hw018
 
hw020
 
hw021
 
hw023
 
hw025
 
hw026
 
hw027
 
hw028
 
hw029
 
hw030
 
hw031
 
hw032
 
hw033
 
hw034
 
设置spark-env.sh文件,添加一行内容:
 
export SCALA_HOME=/usr/lib/scala-2.9.3
 
保存退出
 
(4)拷贝配置好的spark源码到所有slaves节点上:
 
#!/bin/bash
 
#for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw029 hw030 hw031 hw032 hw033 hw034
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw024 hw025 hw026 hw027 hw028 hw029 hw030 hw031 hw032 hw033 hw034
 
#for dir in hw025 hw026 hw027 hw028
 
do
 
echo cping to $dir
 
scp -r spark-0.8.0-incubating-bin-hadoop1 root@$dir:/home/xxx
 
done
 
保存退出,spark配置完成


7. 设置环境变量
 
在hw024上设置好环境变量,一次性拷贝到各个节点上:
 
打开/etc/profile加入以下内容:
 
#scala
 
export SCALA_HOME=/usr/lib/scala-2.9.3
 
export PATH=$PATH:$SCALA_HOME/bin
 
#spark
 
export SPARK_HOME=/home/xxx/spark-0.8.0-incubating-bin-Hadoop1
 
export PATH=$PATH:$SPARK_HOME/bin
 
#java
 
export JAVA_HOME=/usr/java/jdk1.7.0
 
export JRE_HOME=/usr/java/jdk1.7.0/jre
 
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:
 
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
 
用for循环和scp命令拷贝到各个节点:
 
#!/bin/bash
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw029 hw030 hw031 hw032 hw033 hw034
 
do
 
echo cping to $dir
 
scp -r /etc/profile root@$dir:/etc/profile
 
done
 
分别在各个节点执行source /etc/profile,让修改的环境变量生效


8. 安装hadoop
 
spark的cluster模式需要使用hadoop的HDFS文件系统,需要先安装hadoop。
 
(1)在24节点上解压hadoop-1.2.1.tar.gz,并将解压后的目录放到/usr/local/hadoop/目录下
 
(2)配置hadoop:
 
修改/conf/hadoop-env.sh文件如下:
 
export JAVA_HOME=/usr/java/jdk1.7.0
 
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"
 
修改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>master.node</name>
 
<value>hw024</value>
 
<description>master</description>
 
</property>
 
<property>
 
<name>hadoop.tmp.dir</name>
 
<value>/usr/local/hadoop/tmp</value>
 
<description>local dir</description>
 
</property>
 
<property>
 
<name>fs.default.name</name>
 
<value>hdfs://${master.node}:9000</value>
 
<description> </description>
 
</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>2</value>
 
</property>
 
<property>
 
<name>dfs.name.dir</name>
 
<value>${hadoop.tmp.dir}/hdfs/name</value>
 
<description>local dir</description>
 
</property>
 
<property>
 
<name>dfs.data.dir</name>
 
<value>${hadoop.tmp.dir}/hdfs/data</value>
 
<description> </description>
 
</property>
 
</configuration>
 
修改mapred-siter.xml如下:
 
<?xml version="1.0"?>
 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
 
<property>
 
<name>mapred.job.tracker</name>
 
<value>${master.node}:9001</value>
 
<description> </description>
 
</property>
 
<property>
 
<name>mapred.local.dir</name>
 
<value>${hadoop.tmp.dir}/mapred/local</value>
 
<description> </description>
 
</property>
 
<property>
 
<name>mapred.system.dir</name>
 
<value>/tmp/mapred/system</value>
 
<description>hdfs dir</description>
 
</property>
 
</configuration>
 
(3)配置conf/master文件,加入namenode的主机名:
 
hw024
 
配置slaves文件,加入所有datanode的主机名:
 
hw016
 
hw017
 
hw018
 
hw020
 
hw021
 
hw023
 
hw024
 
hw025
 
hw026
 
hw027
 
hw028
 
hw029
 
hw030
 
hw031
 
hw032
 
hw033
 
hw034
 
(4)复制以上配置好的内容到所有节点上
 
#!/bin/bash
 
for dir in hw016 hw017 hw018 hw020 hw021 hw023 hw029 hw030 hw031 hw032 hw033 hw034
 
do
 
echo cping to $dir
 
#scp -r jdk-7-linux-x64.rpm root@$dir:/home/xxx
 
#scp -r spark-0.8.0-incubating-bin-hadoop1 root@$dir:/home/xxx
 
#scp -r profile root@$dir:/etc/profile
 
#scp -r scala-2.9.3.tgz root@$dir:/home/xxx
 
#scp -r slaves spark-env.sh root@$dir:/home/xxx/spark-0.8.0-incubating-bin-hadoop1/conf
 
#scp -r hosts root@$dir:/etc
 
scp -r /usr/local/hadoop/hadoop-1.2.1 root@$dir:/usr/local/hadoop/
 
#scp -r scala-2.9.3 root@$dir:/usr/lib

done
 
(5)在每个节点上创建hadoop使用的临时文件如下:
 
mkdir -p /usr/local/hadoop/tmp/hdfs/name
 
mkdir -p /usr/local/hadoop/tmp/hdfs/data
 
mkdir -p /usr/local/hadoop/tmp/mapred/local
 
mkdir -p /tmp/mapred/system
 
(6)关闭所有节点的防火墙:
 
/etc/init.d/iptables stop


9. spark测试
 
(1)启动spark集群
 
在hw024的spark源码目录下执行:
 
./bin/start-all.sh
 
(2)检测进程是否启动:
 
[root@hw024 xxx]# jps
 
30435 Worker
 
16223 Jps
 
9032 SecondaryNameNode
 
9152 JobTracker
 
10283 Master
 
3075 TaskTracker
 
8811 NameNode
 
如果spark正常启动,jps运行结果如上所示。
 
浏览hw024的web UI(http://172.18.11.24:8080),此时应该可以看到所有的work节点,以及他们的CPU个数和内存信息。
 
(3)运行spark自带的例子:
 
运行SparkPi
 
$ ./run-example org.apache.spark.examples.SparkPi spark://hw024:7077
 
运行SparkKMeans
 
$ ./run-example org.apache.spark.examples.SparkKMeans spark://hw024:7077 ./kmeans_data.txt 2 1
 
运行wordcount
 
$ cd /home/xxx/spark-0.8.0-incubating-bin-hadoop1
 
$ hadoop fs -put README.md ./
 
$ MASTER=spark://master:7077 ./spark-shell
 
scala> val file = sc.textFile("hdfs://master:9000/user/dev/README.md")
 
scala> val count = file.flatMap(line => line.split(" ")).map(map => (word, 1)).reduceByKey( +)
 
scala> count.collect()
 
注意:wordcount例子中有两个地方需要根据之前hadoop的设置进行修改:
 
(1) MASTER=spark://master:7077 ./spark-shell:
 其中斜体需要改为你的namenode的hostname
 
(2)scala> val file = sc.textFile("hdfs://master:9000/user/dev/README.md"):其中master要修改,而且后面的9000也要根据你的具体配置修改。