第三章 spark2.0实验环境搭建

创建于:20161208

本章小目标

  1. 在上一章的基础上进行操作
  2. 安装spark2.0测试环境
  3. 构建至少3个节点的spark集群
  4. 基于yarn模式构建集群

软件版本

参考链接

1. 安装JDK

1.1 apt-get 自动安装法(需要慎重考虑网速)

$ which java
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
#选择同意条款,开始安装,速度很慢,提示要2小时,果断杀掉安装进程
...
$ sudo update-java-alternatives -s java-7-oracle
$ sudo update-java-alternatives -s java-8-oracle #可以切换不同的系统默认java版本

1.2 下载gz包安装法(本文推荐)

$ sudo mkdir /usr/lib/jvm
$ sudo tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/lib/jvm
$ sudo vim /etc/profile  #增加如下内容
#add at 20161210
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH 
export PATH=${JAVA_HOME}/bin:$PATH 

set -o vi

注销登录,测试生效

$ java -version

1.3 本节参考:

http://www.cnblogs.com/a2211009/p/4265225.html

2. 安装scala

2.1 apt安装,前提是前面的JDK也是apt安装,否则会报错。apt的scala也是2.11.×

$ sudo apt show scala
$ sudo apt install scala=2.11.6-6

2.2 下载gz安装(本文推荐)

$ sudo mkdir /usr/lib/scala
$ sudo tar -xvzf scala-2.11.8.tgz -C  /usr/lib/scala/
$ sudo su
$ vi /etc/profile  #增加如下设置
#set scala env
export SCALA_HOME=/usr/lib/scala/scala-2.11.8
export PATH=${SCALA_HOME}/bin:$PATH

2.3 本节参考

菜鸟-scala

3. 安装hadoop

3.1 下载gz包安装

$ mkdir -p soft/hadoop   #个性化的软件,我不打算放在/usr/lib; 找个新家~/soft/
$ tar -xzvf hadoop-2.7.2.tar.gz -C ~/soft/hadoop/
#对应地,环境变量就在当前用户下生效吧
$ vi ~/.bashrc
# install hadoop
export HADOOP_HOME=/home/bit/soft/hadoop/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=/home/bit/soft/hadoop/hadoop-2.7.2
export YARN_CONF_DIR=$YARN_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

$ . ~/.bashrc
$ hadoop version

3.2 配置hadoop

配置文件目录

$ pwd
/home/bit/soft/hadoop/hadoop-2.7.2/etc/hadoop

3.2.1 slaves

$ cat slaves 
U1604N2
U1604N3

3.2.2 core-site.xml

$ vim core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://U1604N1:9000/</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/home/bit/soft/hadoop/hadoop-2.7.2/tmp</value>
    </property>
</configuration>

3.2.3 hdfs-site.xml

$ vim hdfs-site.xml
<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>U1604N1:9001</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/bit/soft/hadoop/hadoop-2.7.2/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/bit/soft/hadoop/hadoop-2.7.2/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
</configuration>

3.2.4 mapred-site.xml

$ cp mapred-site.xml.template mapred-site.xml
$ vim mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

3.2.5 yarn-site.xml

$ vim 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>U1604N1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>U1604N1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>U1604N1:8035</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>U1604N1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>U1604N1:8088</value>
    </property>
</configuration>

3.2.6 hadoop-env.sh

一开始在/etc/profile已经设置了JAVA_HOME,但在这里还需要再设置一下,否则会报错。

$ vim hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_91  #add

3.2.7 yarn-env.sh

$ vim yarn-env.sh
# some Java parameters
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_91

4. 安装Spark

4.1 下载gz包安装

$ mkdir ~/soft/spark
$ tar -xzvf spark-2.0.2-bin-hadoop2.7.tgz -C ~/soft/spark/

4.2 配置spark

配置路径

$ pwd
/home/bit/soft/spark/spark-2.0.2-bin-hadoop2.7/conf

4.2.1 spark-env.sh

$ cp spark-env.sh.template spark-env.sh
$ vi spark-env.sh #JAVA_HOME等需要再配置一下,暂时不知道环境变量为何不生效
export SCALA_HOME=/usr/lib/scala/scala-2.11.8
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_91
export HADOOP_HOME=/home/bit/soft/hadoop/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

SPARK_MASTER_IP=U1604N1
SPARK_LOCAL_DIRS=/home/bit/soft/spark/spark-2.0.2-bin-hadoop2.7
SPARK_DRIVER_MEMORY=1G

4.2.2 slaves

U1604N2
U1604N3

5. 构建集群

5.1 虚拟机拷贝

前面都是在U1604N1上进行的操作,下面将对U1604N1进行vmware虚拟机镜像复制,并开启U1604N2, U1604N3.

  1. 从前面的配置可以猜到,我用U1604N1做主控,2,3做为工作节点
  2. U1604N2,可以把快照全删掉,缩小体积
  3. U1604N2,可以调整为2G内存,单核CPU,节省资源
  4. 虚拟机复制开启的时候选择“我已复制该虚拟机”
  5. 打开U1604N2,修改/etc/hosts; /etc/hostname; 并设置静态IP。
    操作办法请参考 第二章 的内容
  6. U1604N2复制到U1604N3,再来一遍。

效果如图:


image.png

后续的操作主要针对集群的3个节点,同步进行。

5.2 SSH免密码互访

# 三个节点都执行
$ sudo apt-get install openssh-server
$ ssh-keygen -t rsa #生成公私秘钥
$ ssh-copy-id -i ~/.ssh/id_rsa.pub bit@U1604N1 #公钥集中到1
#还可以用下面的命令实现同样的效果:
ssh bit@U1604N1 'cat >> ~/.ssh/authorized_keys' < .ssh/id_rsa.pub
#1 节点执行公钥分发
# chmod 600 ~/.ssh/authorized_keys 检查权限若不是600则改之
$ scp ./authorized_keys bit@U1604N2:~/.ssh
$ scp ./authorized_keys bit@U1604N3:~/.ssh
$ ssh bit@U1604N2 hostname  #测试效果,实现无密码访问
$ ssh bit@U1604N3 hostname

5.3 启动集群

5.3.1 启动hadoop

#在节点U1604N1执行
$ cd /home/bit/soft/hadoop/hadoop-2.7.2
$ bin/hadoop namenode -format
$ sbin/start-dfs.sh
$ sbin/start-yarn.sh
$ jps
9249 SecondaryNameNode
9041 NameNode
10071 Jps
9992 ResourceManager

#在节点U1604N2执行
$ jps
10036 Jps
9575 DataNode
9932 NodeManager

#在节点U1604N3执行
$ jps
10699 Jps
10589 NodeManager
10207 DataNode

浏览器访问:http://u1604n1:8088/cluster 可以看到hadoop的管理界面

5.3.2 启动spark

#在节点U1604N1执行
$ cd /home/bit/soft/spark/spark-2.0.2-bin-hadoop2.7/sbin
$ ./start-all.sh 
$ jps
9249 SecondaryNameNode
9041 NameNode
10758 Master
10920 Jps
9992 ResourceManager

同理在2,3节点上执行jps,可以看到对应的worker进程

$ jps
9575 DataNode
10361 Worker     #在这里
9932 NodeManager
10412 Jps

spark启动后多出来master和worker进程。
浏览器访问:http://u1604n1:8080/ 可以看到spark管理界面

5.3.3 可能遇到的报错:

  • 情况1:如果因为hdfs-site.xml 的配置路径值前面带有file而起不来,去掉即可
  • 情况2:下面这种报错信息,是因为主机名带有下划线“_”导致的,很不幸被我遇到了,经过一番折腾总算解决。之前的教程也已经重新更新hostname,如果是一路跟着教程做的话应该不会掉进这个坑。

Incorrect configuration: namenode address dfs.namenode.servicerpc-address or dfs.namenode.rpc-address is not configured

  • 情况3: 仔细检查一下配置文件的路径,目录等是否准确。

类似于:export SCALA_HOME=$SCALA_HOME; 引用环境变量赋值可能是无效的。

6. 集群测试

用圆周率计算的例子测试运行

6.1 本地模式

$ cd ~/soft/spark/spark-2.0.2-bin-hadoop2.7
$ ./bin/run-example SparkPi 10 --master local[2]

6.2 Standalone模式

$ ./bin/spark-submit  \
 --class org.apache.spark.examples.SparkPi  \
 --master spark://master:7077  \
 examples/jars/spark-examples_2.11-2.0.2.jar \
 100

可以在spark的管理台查看任务运行情况:

image.png

6.3 yarn模式

$ ./bin/spark-submit    \
 --class org.apache.spark.examples.SparkPi   \ 
 --master yarn-cluster \
 examples/jars/spark-examples_2.11-2.0.2.jar \ 
 10

可以在hadoop的管理界面查看任务运行情况

image.png

6.4 使用hdfs文件系统

$ hdfs dfs -mkdir -p /user/bit       #当前用户bit的主目录需要手工创建
$ hdfs dfs -put ./README.md /user/bit  #上传一个文件到创建的目录
$ hdfs dfs -ls
Found 2 items
drwxr-xr-x   - bit supergroup          0 2016-12-11 13:04 .sparkStaging
-rw-r--r--   3 bit supergroup       3828 2016-12-11 13:22 README.md

也可以登录管理台:http://u1604n1:50070/explorer.html#/
查看hdsf文件系统如下

image.png

目标达成,收工!
PS:操作过程中如果遇到问题,欢迎反馈

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容