`

Spark学习环境搭建-虚拟机版

 
阅读更多

计划2个月内能精通spark开发,今天起开始努力!

1、环境准备

  虚拟机采用visualbox,https://www.virtualbox.org

     在上面搭建ubuntu server 集群,下载ubuntu server 光盘镜像,http://www.ubuntu.com/download/server

  在visualbox上安装 ubuntu server,从中选择英文语言,如果中文可能会有乱码,按提示基本一路回车。

  装好ubuntu server第一件事是安装增强功能,visualbox光驱设置成为VBoxGuestAdditions.iso,进入虚拟机

$ sudo mount /dev/cdrom /media/cdrom 
$ sudo aptitude install build-essential  linux-headers-$(uname -r) -y
$ cd  /media/cdrom
$ sudo ./VBoxLinuxAdditions.run

 安装成功的标志是鼠标可以随便拖动。

 安装ssh服务器

$ sudo apt-get install openssh-server

 visualbox中设置本虚拟机的网络为“桥接网络" ,这样就可以通过ssh客户端链接到虚拟机中。

新装的ubuntu server开始并不好用,为了让下载速度更快一点需要更新ubuntu的软件源

根据官方文档 http://wiki.ubuntu.org.cn/Qref/Source

 

新建用户名sparker

ubuntu建用户最好用adduser,虽然adduser和useradd是一样的在别的linux糸统下,但是我在ubuntu下用useradd时,并没有创建同名的用户主目录。
例子:adduser user1
这样他就会自动创建用户主目录,创建用户同名的组。
root@ubuntu:~# sudo adduser sparker
[sudo] password for xx:
输入xx用户的密码,出现如下信息
正在添加用户"sparker"…
正在添加新组"sparker" (1006)…
正在添加新用户"sparker" (1006) 到组"sparker"…
创建主目录"/home/sparker"…
正在从"/etc/skel"复制文件…
输入新的 UNIX 口令:
重新输入新的 UNIX 口令:
两次输入db的初始密码,出现的信息如下
passwd: password updated successfully
Changing the user information for db
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Full Name []:等信息一路回车
这个信息是否正确? [Y/n] y
到此,用户添加成功。如果需要让此用户有root权限,执行命令:
root@ubuntu:~# sudo vim /etc/sudoers
修改文件如下:
# User privilege specification
root ALL=(ALL) ALL
sparker ALL=(ALL) ALL
保存退出,sparker用户就拥有了root权限。

 

 

1、安装jdk

      

1.删除自带的
2.安装Oracle官方的
sudo add-apt-repository ppa:webupd8team/java 
sudo apt-get update 
sudo apt-get install oracle-java8-installer
3.管理
sudo update-alternatives --config java

 2、下载需要的安装包,我在sparker用户目录下面新建了一个~/bigdata文件夹,用于存放需要的安装包;

 

 

wget http://apache.osuosl.org/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz
wget https://dl.bintray.com/sbt/native-packages/sbt/0.13.9/sbt-0.13.9.tgz
wget http://apache.claz.org/hadoop/common/hadoop-2.6.3/hadoop-2.6.3.tar.gz
wget http://apache.mirrors.tds.net/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
wget http://downloads.typesafe.com/scala/2.11.7/scala-2.11.7.tgz
wget http://mirror.reverse.net/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
 

 

2、对所有安装包进行解压,重命名

 

比如:
tar -zxf hadoop-2.6.3.tar.gz 
mv hadoop-2.6.3 hadoop
    依次对所有的包进行解压,解压完的目录结构如下:

 

 

 

3、环境变量设置

$ vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export SBT_HOME=$HOME/bigdata/sbt
export MAVEN_HOME=$HOME/bigdata/maven
export SPARK_HOME=$HOME/bigdata/spark/
export HADOOP_HOME=$HOME/bigdata/hadoop/
export HADOOP_CONF_DIR=$HOME/bigdata/hadoop/etc/hadoop
export SCALA_HOME=$HOME/bigdata/scala/
export PATH=$PATH:$MAVEN_HOME/bin:$SBT_HOME/bin:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

$source  .bashrc

 

验证一下
$sbt sbt-version
[info] Set current project to sparker (in build file:/home/sparker/)
[info] 0.13.9

$mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /home/sparker/bigdata/maven
Java version: 1.8.0_66, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.19.0-25-generic", arch: "amd64", family: "unix"

$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)

 

 4、关闭当前虚拟机,复制虚拟机2台,组成一个3台的集群。

   进入每台机器,

   修改 /etc/hostname 定义机器名列表为:

 

master
slave1
slave2
   修改 /etc/hosts 如下,IP为实际的机器IP

 

 

192.168.3.10 master
192.168.3.11 slave1
192.168.3.12 slave2
 

 

 

 

 

 

5、打通各个服务器的ssh免密码登陆

 

1:生成密钥
ssh-keygen -t rsa
2:把本机的公钥追到slave1,slave2的 .ssh/authorized_keys 里
ssh-copy-id -i ~/.ssh/id_rsa.pub jifeng@feng02
3:测试 
ssh slave1
 

 6、zookeeper配置

 

1、在master 机器的zookeeper home目录下
   mkdir data
   mkdir logs

   cd conf
   cp zoo_sample.cfg zoo.cfg
   
   vim zoo.cfg #在最后面增加如下代码:
   dataDir=/home/sparker/bigdata/zookeeper/data
   dataLogDir=/home/sparker/bigdata/zookeeper/logs
   server.1=master:2888:3888
   server.2=slave1:2888:3888
   server.3=slave2:2888:3888

  
3、设置serverid
   cd data
   echo "1">myid   #在data目录下生成myid文件,内容为1
4、copy zookeeper 到另两个节点
   cd /usr/local
   scp -r ./zookeeper root@slave1:/usr/local/
   scp -r ./zookeeper root@slave2:/usr/local/
   
   登录到slave1:
   cd data  #zookeeperhome目录下的data文件夹
   echo "2">myid
   登录到slave2:
   cd data
   echo "3">myid
5、运行zookeeper:
   ./bin/zkServer.sh start  #zookeeper每个节点需要单独启动运行

 

 

 7、修改spark配置,并同步到所有机器。

 

$ cd ~/bigdata/spark/conf
$ cp spark-env.sh.template spark-env.sh
$ vim spark-env.sh
export SCALA_HOME=$HOME/bigdata/scala
#export SPARK_MASTER_IP=master
export SPARK_WORKER_MEMORY=1G
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export MASTER=spark://master:7077
export export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=master:2181,slave1:2181,slave2:2181 -Dspark.deploy.zookeeper.dir=/spark"

 

8、Spark Standalone HA运行:

 

  1、分别启动三个节点的zookeeper:
  ./bin/zkServer.sh start   #关闭服务,把start换成stop

  2、在master启动Spark
  ./sbin/start-all.sh

  3、启动StandBy Spark Master,假设为Slave1
  ./sbin/start-master.sh

  4、用jps查看进程
  master节点包含:  Master、Worker、Jps、QuorumPeerMain
  Standby节点(slave1):Master、Worker、Jps、QuorumPeerMain
  slave2节点:Worker、Jps、QuorumPeerMain

 

9、完了我们写个spark程序验证一下整个集群是否可用,参照 http://spark.apache.org/docs/latest/quick-start.html#self-contained-applications 写个程序来计算某个txt文件中含字母a的总行数和含字母b的总行数。新建mvn 工程myfirstsparkapp(可到附件下载),代码如下。然后通过 mvn clean package打出一个jar包MySimpleSpark-1.0-SNAPSHOT.jar

 

package com.jinn.spark;

/**
 * @author zhanjun.
 * @version MyFistSparkApp, v 0.1 2016  16-1-18 上午7:34 zhanjun Exp $$
 * @description
 */

import org.apache.spark.api.java.*;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.function.Function;

/**
 * 计算txt 中含a 含b的总行数
 */
public class SimpleApp {
    public static void main(String[] args) {
        /**
         * 保证这个readme.txt在集群的各个节点上都有
         */
        String logFile = "file:///home/sparker/bigdata/worksparce/readme.txt";
        SparkConf conf = new SparkConf().setAppName("Simple Application");
        JavaSparkContext sc = new JavaSparkContext(conf);
        JavaRDD<String> logData = sc.textFile(logFile).cache();

        long numAs = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) {
                return s.contains("a");
            }
        }).count();
        long numBs = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) {
                return s.contains("b");
            }
        }).count();
        System.out.println("------Lines with a: " + numAs + ", lines with b: " + numBs);
    }
}

 
 

把生成的jar 上传到spark集群的某个节点,并要求集群中所有节点都有我们的测试数据readme.txt(含英文的文本) 通过spark-submit提交任务:

spark-submit --class "com.jinn.spark.SimpleApp" --master spark://master:7077 ~/bigdata/worksparce/MySimpleSpark-1.0-SNAPSHOT.jar 

 可以看到执行结果:



 
 

  恭喜您,部署成功了!

  

  • 大小: 65.8 KB
  • 大小: 75.8 KB
  • 大小: 160.5 KB
  • 大小: 37.2 KB
  • 大小: 248.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics