2019/03/10虚拟机环境搭建 基于Yarn的Spark

虚拟机环境搭建

工作环境:CentOS7
工作任务:配置四台虚拟机的工作环境
工作时间:2019/03/06-2019/03/15

Java环境:JAVA_HOME=/usr/java/jdk1.8.0_181

I.集群配置

1.虚拟机配置

四台虚拟机配置:

用户名名称IP配置密码Hostname
hadoophadoop_cluster-1*.584核 8GB 300GB*hadoop-cluster-1.novalocal
hadoophadoop_cluster-2*.594核 8GB 300GB*hadoop-cluster-2.novalocal
hadoophadoop_cluster-3*.684核 8GB 300GB*hadoop-cluster-3.novalocal
hadoophadoop_cluster-4*.754核 8GB 300GB*hadoop-cluster-4.novalocal

集群配置

cluster-1cluster-2cluster-3cluster-4
Namenode
SecondaryNamenode
Datanode
ResourceManager
NodeManger
Spark
Python3.6

用户与组配置:

  • 超级管理员:root
    • Hadoop用户组:
      • hadoop:组管理员
      • spark

2.软件配置

安装路径 WebUIURL
Java-jdk1.8.0_181/usr/java/jdk1.8.0_181/
Python-3.6/usr/Python-3.6.8/
Scala/bigdata/usr/scala-2.12.8/
Hadoop-2.7.2/bigdata/usr/hadoop-2.7.2HDFS: http://.58:50070 Yarn: http://.68:8088
Spark/bigdata/usr/spark-2.3.3-bin-hadoop2.7http://*.58:8042(不确定)
Jupyter Notebookyum installhttp://*.58:8088(不确定)

II.流程:

1.前期准备:

  1. ssh远程登录:

    # vi /etc/ssh/sshd_config
    		PasswordAuthentication yes
    # service sshd restart
    
  2. 挂载硬盘

    使用的云平台下,需要手动挂载硬盘。使用300G中的200G,挂载在/bigdata下

  3. 无秘钥登录设置

    # vi /etc/hosts
    

    添加以下内容:

    *.58 hadoop-cluster-1
    *.59 hadoop-cluster-2
    *.68 hadoop-cluster-3
    *.75 hadoop-cluster-4
    

    设置Namenode免密登录,生成server58的秘钥,并将公钥添加到其他3台服务器上:
    生成master(server47)公钥

    # ssh-keygen -t rsa 
    

    将公钥追加到root用户的授权keys中。

    # ssh-copy-id  username@ip 
    

    注:root权限和hadoop权限都要执行一次。为了方便操作,所有的秘钥都互相添加。

  4. 修改环境变量:

    # vi /etc/profile
    
    export JAVA_HOME=//usr/java/jdk1.8.0_181
    export HADOOP_HOME=/bigdata/usr/hadoop-2.7.2
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
    
    # source /etc/profile 
    
  5. 关闭防火墙
    永久性生效
    开启:chkconfig iptables on
    关闭:chkconfig iptables off
    即时生效,重启后失效
    开启:service iptables start
    关闭:service iptables stop

2. Hadoop-2.2.7

  1. 解压到/bigdata/usr/下

  2. 配置相关文件:
    (1) 核心配置文件
    core-site.xml

    <!-- 指定HDFS中NameNode的地址-->
    <property>
    		<name>fs.defaultFS</name>
    		<value>hdfs://hadoop102:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储目录-->
    <property>
    		<name>hadoop.tmp.dir</name>
    		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
    </property> 
    

    (2) hdfs配置文件

    hadoop-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_144
    

    hdfs-site.xml

    <property>
    		<name>dfs.replication</name>
    		<value>3</value>
    </property>
    <property>
    		<name>dfs.namenode.secondary.http-address</name>
    		<value>hadoop104:50090</value>
    </property> 
    

    (3)yarn配置文件

    yarn-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_144
    

    yarn-site.xml

    <!-- reducer获取数据的方式-->
    <property>
    		<name>yarn.nodemanager.aux-services</name>
    		<value>mapreduce_shuffle</value>
    </property>
    <!-- 指定YARN的ResourceManager的地址-->
    <property>
    		<name>yarn.resourcemanager.hostname</name>
    		<value>hadoop103</value>
    </property> 
    

    (4)mapreduce配置文件
    mapred-env.sh

    export JAVA_HOME=/opt/module/jdk1.8.0_144
    

    mapred-site.xml

    # cp mapred-site.xml.template mapred-site.xml
    
    <!-- 指定mr运行在yarn上-->
    <property>
    		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    </property>
    

3.将hadoop文件夹分发给各个虚拟机,随后修改文件夹所有者和组

# chown -R hadoop /bigdata/usr/hadoop-2.7.2
# chgrp -R hadoop /bigdata/usr/hadoop-2.7.2

4.启动
第一次启动需要格式化NameNode

# hdfs namenode -format

启动

# start-dfs.sh  

在ResouceManager所在的机器上启动yarn

# start-yarn.sh 

在浏览器查看:*.58:50090

3. Python-3.6.8 & Scala-2.12.8

Scala

下载scala-2.12.8,在相关位置解压之后修改/etc/profile,添加相关路径。新建用户spark,所属组为hadoop。将scala的用户与组改为spark hadoop。
检查:

# scala -version
Scala code runner version 2.12.8 -- Copyright 2002-2018, LAMP/EPFL and Lightbend, Inc.
Python

CentOS自带的Python版本是Python 2.7.5,新安装一个Python3.x版本适配PySpark。不要删除原系统的python2.x版本,因为有一些软件依赖python2.x,删除则会导致这些软件无法使用。因此就涉及到如何将两个版本的python分开的问题。
安装Python和编译依赖的环境

# yum install openssl -y
# yum install openssl-devel -y
# yum install zlib
# yum install zlib-devel
# yum install gcc 
# yum install sqlite-devel(为了以后可以安装jupyter notebook)

去官网下载3.6.8源代码;解压在/usr下

# cd /usr/Python-3.6.8 
# ./configure
# make
# make install

检查:

# python3 --version
Python 3.6.8
# python --version
Python 2.7.5

测试pip(一般安装完成之后会自动安装好pip,注意应使用pip3才能作用于python3.x)
如果没有自动安装好pip,则需要手动安装。

# pip3 install numpy
# pip3 install matplotlib
# python
Python 3.6.8 (default, Mar 16 2019, 11:59:26)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>import numpy # 添加gdal库

4. Spark-2.3.3

官网下载Spark2.3.3版本的二进制包,解压到/bigdata/usr,在/etc/profile中添加相关的环境变量之后source。
测试:

#Spark-shell
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.3
      /_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181)
Type in expressions to have them evaluated.
Type :help for more information.

在这里,我选择依赖yarn运行spark。需要修改spark-env.sh

# cd /bigdata/usr/spark-2.3.3-bin-hadoop2.7/conf
# cp cp spark-env.sh.template spark-env.sh
# vi spark-env.sh

添加:

export HADOOP_CONF_DIR=/bigdata/usr/hadoop-2.7.2/etc/Hadoop
export PYSPARK_PYTHON=/usr/local/bin/python3.6

由于是Yarn启动,只需要将Hadoop的信息添加上去即可,具体的任务将有yarn分配给集群去完成。第二个是为了告诉Spark使用非系统默认的Python。
随后,修改yarn-env.xml,添加一下内容:

<property>
		<name>yarn.nodemanager.pmem-check-enabled</name>
		<value>false</value>
</property>
<property>
		<name>yarn.nodemanager.vmem-check-enabled</name>
		<value>false</value>
</property>

如果不设置,会导致内存分配不足的问题,随后将yarn-env.xml分发给每个机器,重启hadoop所有服务。
通过yarn开启spark

# spark-shell --master yarn-client

或者spark-shell

pyspark --master yarn --deploy-mode client

结果:

# spark-shell --master yarn --deploy-mode client
2019-03-16 13:50:46 WARN  NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
2019-03-16 13:50:51 WARN  Client:66 - Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
Spark context Web UI available at http://hadoop-cluster-1.novalocal:4040
Spark context available as 'sc' (master = yarn, app id = application_1552192848930_0003).
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.3.3
      /_/

Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_181)
Type in expressions to have them evaluated.
Type :help for more information.

scala>

其中,发现两条有用的信息:

  1. 通过http://hadoop-cluster-1.novalocal:4040可以访问Spark的WebUI,但是由于我无法修改虚拟机的hostname和对应关系。只能通过访问ip地址来访问。将所有的hostname改为对应的IP地址即可。实际上它会转跳到位于ResourceManager所在的虚拟机上,同样的,修改成IP即可。
  2. 提供的语言是Scala,下面开始将Scala替换为Python3.x,并使用PySpark。

5. Jupyter Notebook

# pip3 install jupyter
# jupyter notebook --allow-root –ip 0.0.0.0

随后,可以登录提示的网址登录(其他主机需要将0.0.0.0换成虚拟机ip地址),如:
http://.58:8888 密码:
修改默认code目录:/bigdata/code

# vim  /root/.jupyter/jupyter_notebook_config.py
		c.NotebookApp.notebook_dir = '/bigdata/code'

注:如果需要使用集群,即使使用yarn启动,也需要在其他服务器上安装python环境

修改系统环境变量,添加以下内容:

export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --ip=0.0.0.0 --allow-root"
  • 通过以下指令开启yarn模式

    pyspark --master yarn --deploy-mode client –name 项目名称
    

    注意:在这种模式之下,只能同时运行一个项目

    测试代码:

    lis = [1,2,3,4,5,6]
    print(type(lis))
    vec = sc.parallelize(lis)
    print(type(vec))
    print(vec.collect())
    print(vec.count())
    

    输出

    <class 'list'>
    <class 'pyspark.rdd.RDD'>
    [1, 2, 3, 4, 5, 6]
    6
    
  • 通过以下指令开启local模式

    jupyter notebook --allow-root  --ip 0.0.0.0
    

    进入WebUI之后,通过运行如下代码,开启本地运行模式

    import os
    import sys
    spark_name = os.environ.get('SPARK_HOME',None)
    print (spark_name)
    if not spark_name:
        raise ValueErrorError('spark环境没有配置好')
    sys.path.insert(0,os.path.join(spark_name,'python3'))
    sys.path.insert(0,os.path.join(spark_name,'python3/lib/py4j'))
    exec(open(os.path.join(spark_name,'python/pyspark/shell.py',)).read())
    # SparkContext available as 'sc'
    # SparkSession available as 'spark'.
    

    问题:为什么yarn只启动了两台服务器?
    如何分配yarn的资源?

6. GDAL库

需要编译GDAL源代码,下载相关源文件,安装g++编译环境

# yum install gcc-c++ libstdc++-devel 

在/bigdata/usr/gdal-2.3.3中编译文件(编译的过程十分漫长,因为使用c++进行编译):

# ./configure
# make
# make install

编译完成之后在…/swig/python下:

sudo python3 setup.py build
sudo python3 setup.py install

测试:

# python3
>>> import gdal

可能出现的问题:
ImportError: libgdal.so.20: cannot open shared object file: No such file or directory
查找该文件所在路径

sudo find / -name libgdal.so.20

将路径添加到~/.bashrc中

export LD_LIBRARY_PATH=/bigdata/usr/gdal-2.3.3/.libs/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值