(一) 从零开始搭建Spark Standalone集群环境搭建

本文主要讲解spark 环境的搭建

主机配置  4核8线程,主频3.4G,16G内存

虚拟环境: VMWare

虚拟环境系统:Ubuntu 14.10

虚拟机运行环境:

  • jdk-1.7.0_79(64bit)
  • hadoop-2.6.0.tar.gz
  • scala-2.10.4.tar
  • spark-1.5.0-bin -hadoop-2.6.0.tgz

(一)样本虚拟机的搭建

1)虚拟机安装ubuntu,每个分配3G内存,完成后后输入如下命令来获得root权限:

  #sudo passwd 

2)ubuntu下源的更改:

  #sudo gedit /etc/apt/sources.list

   找到一个还用的源替换掉 /etc/apt/sources.list中原来的内容

  执行更新:

  #sudo apt-get update

3)安装ssh,以便远程登录

  ssh-client : 本机作为客户机通过ssh链接远程的服务器

  ssh-server:本机作为远程服务器,可以被客户机链接

  #sudo apt-get install ssh-client

  注意上述命令可能出现问题   “依赖 :openssh-client (= 1:6.6p1-2ubuntu1)”

  使用 这条命令即可解决: #sudo apt-get install ssh-client= 1:6.6p1-2ubuntu1

  接下来安装#sudo apt-get install ssh-server (或者 apt-get install openssh-server)

4)查看ssh服务是否启动

  #ps -e |grep ssh

  显现出sshd 则说明安装成功

5)更新vim

  #sudo apt-get remove vim

  #sudo apt-get install vim

6)修改/etc/ssh/sshd_config  文件,使得本机允许远程连接,现在即可通过putty,xshell等连接该机

   # Authentication:
  LoginGraceTime 120
  PermitRootLogin yes
  StrictModes yes

7)修改host主机名

  #vi  /etc/hostname 将该文件该为spark1

  然后 #vi /ect/hosts 改成与上述文件相同的名字 

  重启  #hostname 查看是否生效

 8)注意虚拟机的网络设置为桥接

  #ifconfig 可来查看网络状态

 9)根据求查看是否需要固定IP

  设置静态IP方法如下:

  #sudo vim /etc/network/interfaces

  #修改如下部分:

  auto eth0
  iface eth0 inet static
  address 192.168.0.117
  gateway 192.168.0.1 #这个地址你要确认下 网关是不是这个地址
  netmask 255.255.255.0
  network 192.168.0.0
  broadcast 192.168.0.255

  因为以前是dhcp解析,所以会自动分配dns服务器地址,而一旦设置为静态ip后就没有自动获取到的dns服务器了,设置静态IP地址后,再重启后就无法解析域名。想重新设置一下DNS,有两个办法:

  •  通过/etc/network/interfaces,在它的最后增加一句:

    dns-nameservers 8.8.8.8

    8.8.8.8是Google提供的DNS服务,这里只是举一个例子,你也可以改成电信运营商的DNS。重启后DNS就生效了。

  •  通过修改:

    /etc/resolvconf/resolv.conf.d/base(这个文件默认是空的)

    在里面插入:
    nameserver 8.8.8.8
    nameserver 8.8.4.4

    如果有多个DNS就一行一个,修改好保存,然后执行resolvconf -u再看/etc/resolv.conf,最下面就多了2行:

    nameserver 8.8.8.8
    nameserver 8.8.4.4

  可以看到我们的设置已经加上了,然后再ping一个域名,当时就可以解析了,无需重启。

  以上测试在我这里测试可想行不通,最后还是没有修改,完全是桥接,DHCP自动获取的,好在学校内部重启后IP地址是不变的,所以暂时先这样了,以后变了再改

 10)关闭防火墙 #ufw disable

 11)安装jdk

  下载对应版本的JDK,切记X64为64位系统X86_64为64位系统,否则为32位

  解压tar -zxvf jdk1.7.0_79 -C /usr/lib

  配置环境变量 #vi /etc/priofile ,添加如下字段

  export JAVA_HOME=/usr/lib/jdk1.7.0_79

  export PATH=$JAVA_HOME/bin:$PATH

  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

  使改动生效 source /etc/profile

  验证 java-version

12)安装scala

  方法类似于java,上传scala2.10.4包,解压,#tar -zxvf  scala-2.10.4.tgz -C /usr/lib/scala

  到/etc/profile里配置路径:

  export SCALA_HOME=/usr/lib/scala/scala-2.10.4

  export PATH=$PATH:${SCALA_HOME}/bin

  输入如下命令使得配置生效#source /etc/profile

  验证 #scala -version

13)克隆该样本机,克隆出4个备份,然后分别配置每个机器的主机名与IP地址。

  改玩后自行测试看每个机器是否正确

14)设置ssh免密码连接(注意公钥汇总的命名)

  这里参考http://www.cnblogs.com/shishanyuan/p/4701510.html

15)下载hadoop-2.6.0_x64.tar.gz包 ,将该包解压到/app/hadoop/文件夹下,并在切换到#cd /app/hadoop/hadoop-2.6.0/,创建三个文件夹#mkdir tmp #mkdir name #mkdir data  

16)接下来要配置hadoop环境变量

    首先切换到 #cd /app/hadoop/hadoop-2.6.0/etc/hadoop,打开如下文件#vi hadoop-env.sh,加入如下路径:

    export JAVA_HOME=/usr/lib/ivm/jdk1.7.0_79

    export PATH=$PATH:/app/hadoop/hadoop-2.6.0/bin

    配置好后输入# source hadoop-env.sh使得配置生效,接下来#hadoop version测试是否配置成功。

17)配置yarn-env.sh

    在/app/hadoop/hadoop-2.6.0/etc/hadoop打开配置文件yarn-env.sh

    #cd /app/hadoop/hadoop-2.6.0/etc/hadoop

    #sudo vi yarn-env.sh

    加入配置内容,设置JAVA_HOME路径

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79

    使用source yarn-env.sh使之生效

18)配置core-site.xml  

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://spark1:9000</value>
  </property>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://spark1:9000</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/app/hadoop/hadoop-2.6.0/tmp</value>
    <description>Abase for other temporary directories.</description>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.hduser.groups</name>
    <value>*</value>
  </property>
</configuration>

19)配置hdfs-site.xml

<configuration>
  <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>spark1:9001</value>
  </property>
  <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/app/hadoop/hadoop-2.6.0/name</value>
  </property>
  <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/app/hadoop/hadoop-2.6.0/data</value>
  </property>
  <property>
   <name>dfs.replication</name>
   <value>2</value>
  </property>
  <property>
   <name>dfs.webhdfs.enabled</name>
   <value>true</value>
  </property>
</configuration>

20)配置mapred-site.xml,一般情况下,只有一个mapred-site.xml.template ,# cp mapred-site.xml.template mapred-site.xml复制出来一份即可:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>spark1:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>spark1:19888</value>
  </property>
</configuration>

21)配置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.ShuffleHandler</value>
  </property>
  <property>
    <name>yarn.resourcemanager.address</name>
    <value>spark1:8032</value>
  </property>
  <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>spark1:8030</value>
  </property>
  <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>spark1:8031</value>
  </property>
  <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>spark1:8033</value>
  </property>
  <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>spark1:8088</value>
  </property>
</configuration>

22)配置slaves

    #vi slaves

    在slaves里加入:    

    spark1
    spark2
    spark3
    spark4

23)用scp分别向各个节点分发配置好的hadoop

    在个个slave里建立对应的文件目录 /app/hadoop/, spark1切换到/app/hadoop目录下

    # scp hadoop-2.6.0 root@spark2:/app/hadoop

    # scp hadoop-2.6.0 root@spark3:/app/hadoop

    # scp hadoop-2.6.0 root@spark4:/app/hadoop

24)格式化namenode

    #cd /app/hadoop/hadoop-2.6.0

    #hadoop namenode -format

25)启动hdfs

    $cd /app/hadoop/hadoop-2.6.0/sbin

    $./start-dfs.sh

      启动hdfs时候,报如下错误:Error: Cannot find configuration directory: /etc/hadoop,则应该在 /etc/profile里加入如下配置:

    #hadoop

    export HADOOP_HOME=/app/hadoop/hadoop-2.6.0
    export YARN_HOME=/app/hadoop/hadoop-2.6.0
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    并且#source etc/profile 使得其生效

    若slave中部分datanode没启动,则#./stop-all.sh,然后删除所有节点中的tmp,name,data三个文件夹,重新建立新的空文件夹

    格式化namenode #hadoop namenode -format,现在启动应该正常了!

 26)验证hdfs是否成功启动

    #jps ,此时在spark1上面运行的进程有:NameNode、SecondaryNameNode和DataNode

    

    spark2-spark4上运行的有DataNode

    

25)启动yarn

    #cd /app/hadoop/hadoop-2.6.0/sbin

    #./start-yarn.sh

    此时在spark1上的进程有:NameNode、SecondaryNameNode、DataNode、NodeManager和ResourceManager

    

    spark2-spark4上的进程有:DataNode NodeManager

    至此,hadoop安装已经完成!!!接下来就是spark的安装!

27)跑一下hadoop附带的例子来测试是否安装成功,下面以wordcount为例。

 

28)首先到spark官网下载hadoop2.6对应的安装包,spark1.5.0-bin-hadoop2.6.tgz,上传到/ooon,解压缩# tar -zxvf  spark1.5.0-bin-hadoop2.6.tgz  -C  /app/hadoop,切换到spark主目录,#cd  /app/hadoop/spark-1.5.0-bin-hadoop-2.6.0

29)配置spark的环境变量, 打开配置文件/etc/profile, 定义SPARK_HOME并把spark路径加入到PATH参数中

    SPARK_HOME=/app/hadoop/spark-1.5.0

    PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

30)配置conf/spark-env.sh

    # conf/ 

    #cp  spark-env.sh.template  spark-env.sh

    #vi spark-env.sh

    在最后介入如下内容:

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_79

    export SPARK_MASTER_IP=spark1 (注意这里有个坑,若是你的IDE环境搭建在spark1以外的机器上,这里最好直接写成spark1的IP172.21.75.100,血泪史)

    export SPARK_MASTER_PORT=7077

    export SPARK_WORKER_CORES=1

    export SPARK_WORKER_INSTANCES=1

    export SPARK_WORKER_MEMORY=1g

    source spark-env.sh使得配置生效。

31)配置slaves,如下

    

32)scp分发到各个节点

    #cd /app/hadoop

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark2:/app/hadoop

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark3:/app/hadoop 

    #scp  -r spark-1.5.0-bin-hadoop-2.6.0 root@spark3:/app/hadoop  

    接下来启动spark

    #cd  sbin

    #./start-all.sh

     spark1的进程有:

    

    spark2-spark4的进程有:

    

    现在spark也装好了!!!

33)在浏览器中输入地址172.21.75.102:8080,可以看到集群的状态

 

34)验证客户端连接

  进入hadoop1节点,进入spark的bin目录,使用spark-shell连接集群

  $cd /app/hadoop/spark-1.1.0/bin

  $./spark-shell --master spark://spark1:7077 --executor-memory 500m

  在命令中只指定了内存大小并没有指定核数,所以该客户端将占用该集群所有核并在每个节点分配500M内存,  下图可见其分配情况

  

  现在,我们已经通过spark-shell连接到了集群,现在就可以运行一下spark的示例wordcount

35)运行wordcound

  首先上传数据到hdfs,#hadoop fs -mkdir -p  /usr/hadoop/testdata

  $./spark-shell --master spark://spark1:7077 --executor-memory 512m --driver-memory 500m

  接下来在shark-shell里键入如下代码执行wordcount的计算

scala>val rdd=sc.textFile("hdfs://hadoop1:9000/user/hadoop/testdata/core-site.xml")

scala>rdd.cache()

scala>val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)

scala>wordcount.take(10)

scala>val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

scala>wordsort.take(10)

   结果如下:Array[(String, Int)] = Array(("",100), (the,7), (</property>,6), (<property>,6), (under,3), (in,3), (License,3), (this,2), (-->,2), (file.,2))

 35)最后需要注意的是学校的IP变化后的处理

  除了 /etc/hosts 需要处理外,另外 spark-env.sh  也需要制定spark-master 的IP

  source spark-env.sh使得配置生效。

posted @ 2016-05-04 22:24  ooon  阅读(12429)  评论(2编辑  收藏  举报