Oracle VM VirtualBox虚拟机安装,请自行百度!!!

1 Linux的安装

可以选择国内的一个镜像,清华大学镜像
选择Ubuntu下载:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/14.04.5/ubuntu-14.04.5-desktop-amd64.iso

安装,请网上搜索。因为装的是Deskop版,可以选择安装增强功能、默认输入法、设置“终端”程序、设置“终端”程序为白底黑字、设置共享剪切板以及设置最佳下载服务器。

温馨提示:在学习本文之前,请读者熟悉Linux系统下的常用命令,如果不会或者不熟练,请网上或者查阅相关书籍,熟练后再来查看本文。

  1. 打开“终端”
  2. 切换用户(在root用户下工作)
  3. sudo passwd root
  4. 输入密码
  5. su root
  6. cd ~

2 JDK安装

实际操作中,有时候会出现jdk版本不一致,hadoop启动不了,建议读者
自己去官网下载:

  1. cd /opt
  2. wget http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
  3. tar -zxvf jdk-8u161-linux-x64.tar.gz
  4. mv jdk1.8.0_161 /usr/lib/jdk

3 设置SSH无密码登录

Hadoop是由很多台服务器所组成的,当启动Hadoop系统时,NameNode必须与DataNode连接并管理这些节点(DataNode)。此时系统会要求我们输入密码,为了让系统顺利运行而不需要手动输入密码,需要将SSH设置成为无密码登录。(无密码登录是以事先交换的SSH Key秘钥来进行身份登录)。Hadoop使用SSH(Secure Shell)连接,目前是最可靠、专为远程登录其他服务器提供的安全性协议。

  1. # 安装SSH
  2. apt-get install ssh
  3. # 安装rsync
  4. apt-get install rsync
  5. # 产生SSH Key秘钥进行后续身份验证
  6. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  7. # 查看目录(在root目录的跟目录下,/root /.ssh/)
  8. ll ~/.ssh
  9. # 将产生的Key放置到许可证文件中
  10. cd /root/.ssh/
  11. cat id_dsa.pub >> authorized_keys

4 安装Hadoop

  1. # 建议读者专门建立一个存放应用程序安装包文件夹,本文使用的是/opt,进入/opt目录下
  2. cd /opt
  3. # 下载Hadoop: http://hadoop.apache.org/
  4. wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz
  5. # 解压缩
  6. tar -zxvf hadoop-2.7.5.tar.gz
  7. # 移动hadoop到/usr/local/hadoop
  8. mv hadoop-2.7.5 /usr/local/hadoop
  9. # 查看hadoop安装目录/usr/local/hadoop
  10. ll /usr/local/hadoop

5 配置Hadoop环境变量

  1. # 编辑~/.bashrc(这样每次开机登录都会自动运行环境变量设置)
  2. nano ~/.bashrc

输入以下内容:

  1. # 设置JDK安装路径
  2. export JAVA_HOME=/usr/lib/jdk
  3. # 设置HADOOP_HOME为Hadoop的安装路径/usr/local/hadoop
  4. export HADOOP_HOME=/usr/local/hadoop
  5. # 设置PATH,这样在其他目录时仍然可以运行Hadoop
  6. export PATH=$PATH:$HADOOP_HOME/bin
  7. export PATH=$PATH:$HADOOP_HOME/sbin
  8. # 设置Hadoop其他环境变量
  9. export HADOOP_MAPRED_HOME=$HADOOP_HOME
  10. export HADOOP_COMMON_HOME=$HADOOP_HOME
  11. export HADOOP_HDFS_HOME=$HADOOP_HOME
  12. export YARN_HOME=$HADOOP_HOME
  13. # 链接库的相关设置
  14. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  15. export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
  16. export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY

让~/.bashrc生效

  1. source ~/.bashrc

6 修改Hadoop配置设置文件

主要包括:hadoop-env.sh、core-site.xml、yarn-site.xml、mapred-site.xml、hdfs-site.xml

(1)设置hadoop-env.sh文件

  1. nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

修改JAVA_HOME

  1. export JAVA_HOME=/usr/lib/jdk

(2)设置core-site.xml

  1. nano /usr/local/hadoop/etc/hadoop/core-site.xml

设置HDFS的默认名称:

  1. <configuration>
  2. <property>
  3. <name>fs.default.name</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. </configuration>

(3)设置yarn-site.xml

  1. nano /usr/local/hadoop/etc/hadoop/yarn-site.xml

在之间输入:

  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  8. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  9. </property>
  10. </configuration>

(4)设置mapred-site.xml
mapred-site.xml用于设置监控Map与Reduce程序的JobTracker任务分配情况以及TaskTracker任务运行情况。Hadoop提供了设置的模板文件,可以自行复制修改。

  1. cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
  2. nano /usr/local/hadoop/etc/hadoop/mapred-site.xml

在之间输入:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>

(5)hdfs-site.xml
hdfs-site.xml用于设置HDFS分布式文件系统.

  1. nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml

在之间输入,默认的blocks副本备份数量是每一个文件在其他node的备份数量,默认值为3。

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
  9. </property>
  10. <property>
  11. <name>dfs.datanode.data.dir</name>
  12. <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
  13. </property>
  14. </configuration>

7 创建并格式化HDFS目录

  1. # 创建namenode数据存储目录
  2. mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode
  3. # 创建datanode数据存储目录
  4. mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
  5. # 将Hadoop的所有者更改为root
  6. chown root:root -R /usr/local/hadoop
  7. # 格式化HDFS,如果HDFS已有数据,格式化操作会删除所有的数据
  8. hadoop namenode -format

8 启动Hadoop

分别启动HDFS和YARN,使用start-dfs.sh(启动HDFS)和使用start-yarn.sh(启动YARN)
同时启动HDFS和YARN,使用start-all.sh

  1. # 启动HDFS
  2. start-dfs.sh
  3. # 启动YARN
  4. start-yarn.sh
  5. # 或者同时启动HDFS和YARN
  6. # start-all.sh
  7. # 使用jps查看已经启动的进程,查看NameNode和DataNode进程是否启动
  8. jps

HDFS功能:NameNode、SecondaryNameNode和DataNode
YARN功能:ResourceManager、NodeManager

9 Hadoop ResourceManager Web界面查看Hadoop运行状态:node、application和status.

  1. http://localhost:8088/cluster
  2. # http://192.168.111.226:8088/cluster NameNode
  3. # http://192.168.111.227:8088/cluster SecondaryNameNode

03-Spark集群的搭建 - 图1

9.1 查看已经运行的节点Nodes

03-Spark集群的搭建 - 图23-Spark集群的搭建

9.2 查看NameNode HDFS Web界面

  1. http://localhost:50070
  2. # http://192.168.111.226:50070

03-Spark集群的搭建 - 图3

9.3 查看Live Nodes

03-Spark集群的搭建 - 图4

9.4 查看DataNode

03-Spark集群的搭建 - 图5

9.5 查看HDFS系统

  1. http://192.168.111.226:50070/explorer.html#/

03-Spark集群的搭建 - 图6

10 Hadoop集群的搭建

前面我们只用了一台机器,实际生产中,不可能这样操作,我们的通常做法是:
(1)有一台主要的计算机master,在HDFS担任NameNode的角色,在YARN担任ResourceManager角色。
注:通常会安排一台机器当做SecondaryNameNode使用,像上文中的http://192.168.111.227:8088/cluster一样,就是辅助节点。
(2)有多台机器data1、data2、data3,在HDFS担任DataNode角色,在YARN担任NodeManager角色。
03-Spark集群的搭建 - 图7

10.1

复制Single Node Cluster VirtualBox hadoop到data1
(1)复制Hadoop到data1;
(2)设置虚拟机名称;
(3)设置复制类型;
03-Spark集群的搭建 - 图8
03-Spark集群的搭建 - 图9

10.2

VirtualBox网卡适配卡设置
(1)Host主机,就是安装VirtualBox虚拟机的主机,创建3台虚拟机(master/data1/data2/)。
(2)每一台虚拟主机上设置2张网卡。
网卡1:设置为“NAT网卡”,可以通过Host主机连接到外部网络(Internet)
网卡2:设置为“仅主机适配器”,用于创建内部网络,内部网络连接虚拟主机(master/data1/data2)与Host主机。
03-Spark集群的搭建 - 图10
03-Spark集群的搭建 - 图11

10.3

设置data1服务器
多节点集群的服务器,配置设置文件共同的部分包括:固定IP、hostname、core-site.xml、yarn-site.xml、mapred-site.xml和hdfs-site.xml。

(1)启动data1
(2)编辑网络配置文件设置固定IP

  1. nano /etc/network/interfaces

设置“网卡1”:为NAT网卡,可以通过Host主机连接到外部网络(Internet),设置为eth0,并设置dhcp为自动获取。

设置“网卡2”:为仅主机适配器,用于建立内部网络,内部网络连接虚拟主机(master、data1、data2)与host主机。设置为eth1,并设置为static,即指定固定IP地址。

  1. # interfaces(5) file used by ifup(8) and ifdown(8)
  2. auto lo
  3. iface lo inet loopback
  4. # NAT interface
  5. auto eth0
  6. iface eth0 inet dhcp
  7. # host only interface
  8. auto eth1
  9. iface eth1 inet static
  10. address 192.168.56.101
  11. netmask 255.255.255.0
  12. network 192.168.56.0
  13. broadcast 192.168.56.255

(3)设置hostname

  1. nano /etc/hostname

输入下列內容:

  1. data1

(4)设置hosts文档
如何让集群中所有计算机都知道其他计算机的主机名和IP。可以编辑hosts文件或设置DNS。hosts文件通常用于补充或取代网络中DNS的功能,和DNS不同的是,计算机的用户可以直接对hosts文件进行控制。hosts文件可存储计算机网络中各个节点的信息,负责将主机名映射到对应的IP地址。

  1. nano /etc/hosts

输入以下内容:

  1. 127.0.0.1 localhost
  2. 127.0.1.1 hadoop
  3. 192.168.56.100 master
  4. 192.168.56.101 data1
  5. 192.168.56.102 data2

(5)编辑core-site.xml

  1. nano /usr/local/hadoop/etc/hadoop/core-site.xml
  1. <configuration>
  2. <property>
  3. <name>fs.default.name</name>
  4. <value>hdfs://master:9000</value>
  5. </property>
  6. </configuration>

(6)编辑yarn-site.xml

  1. nano /usr/local/hadoop/etc/hadoop/yarn-site.xml
  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  8. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  9. </property>
  10. <property>
  11. <name>yarn.resourcemanager.resource-tracker.address</name>
  12. <value>master:8025</value>
  13. </property>
  14. <property>
  15. <name>yarn.resourcemanager.scheduler.address</name>
  16. <value>master:8030</value>
  17. </property>
  18. <property>
  19. <name>yarn.resourcemanager.address</name>
  20. <value>master:8050</value>
  21. </property>
  22. </configuration>

ResourceManager主机与NodeManager的连接地址为8025;
ResourceManager与ApplicationMaster的连接地址为8030;
ResourceManager与客户端的连接地址为8050.

(7)编辑mapred-site.xml
mapred-site.xml用于监控Map和Reduce程序中的JobTracker任务分配情况,以及TaskTracker运行状况。修改设置mapred.job.tracker的连接地址为master:54311

  1. nano /usr/local/hadoop/etc/hadoop/mapred-site.xml
  1. <configuration>
  2. <property>
  3. <name>mapred.job.tracker</name>
  4. <value>master:54311</value>
  5. </property>
  6. </configuration>

(8)编辑hdfs-site.xml
hdfs-site.xml用于设置HDFS分布式文件系统的相关配置,data1现在作为DataNode,所以删除NameNode配置。

  1. nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <name>dfs.datanode.data.dir</name>
  8. <value>file:/usr/local/hadoop/hadoop_data/hdfs/datanode</value>
  9. </property>
  10. </configuration>

(9)重新启动data1

  1. reboot

(10)确认网络设置

  1. ifconfig

03-Spark集群的搭建 - 图12
(11)确认对外网络连接正常
03-Spark集群的搭建 - 图13
(11)data1虚拟机关机

10.4 复制data1服务器到data2、master

data1已经设置了hadoop集群的共同部分。
(1)复制data1到data2,与前面data1复制一样。
(2)复制data1到master。
(3)虚拟机内存设置:笔者实体机物理内存是16G,master:4G,data1:2G,data2:2G。

10.5 设置data2服务器

设置data2的固定IP和hostname。
(1) 启动data2
(2)设置data2的固定IP地址,必须设置虚拟机data2每次开机都是使用固定IP地址:192.168.56.102。

  1. nano /etc/network/interfaces
  1. # NAT interface
  2. auto eth0
  3. iface eth0 inet dhcp
  4. # host only interface
  5. auto eth1
  6. iface eth1 inet static
  7. address 192.168.56.102
  8. netmask 255.255.255.0
  9. network 192.168.56.0
  10. broadcast 192.168.56.255

(3)设置data2的主机名

  1. nano /etc/hostname
  1. data2

(4)重新启动data2

  1. reboot

(5)查看网络设置是否为192.168.56.102
03-Spark集群的搭建 - 图14

10.6 设置master服务器

(1) 启动master
(2)设置master的固定IP地址,必须设置虚拟机master每次开机都是使用固定IP地址:192.168.56.100。

  1. nano /etc/network/interfaces
  1. # NAT interface
  2. auto eth0
  3. iface eth0 inet dhcp
  4. # host only interface
  5. auto eth1
  6. iface eth1 inet static
  7. address 192.168.56.100
  8. netmask 255.255.255.0
  9. network 192.168.56.0
  10. broadcast 192.168.56.255

(3)设置data2的主机名

  1. nano /etc/hostname
  1. master

(4)设置hdfs-site.xml
master现在是Namenode,删除原来data1的Datanode的HDFS设置,加入Namenode的HDFS设置。

  1. nano /usr/local/hadoop/etc/hadoop/hdfs-site.xml
  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>3</value>
  5. </property>
  6. <property>
  7. <name>dfs.namenode.name.dir</name>
  8. <value>file:/usr/local/hadoop/hadoop_data/hdfs/namenode</value>
  9. </property>
  10. </configuration>

(5)编辑masters文件:告诉hadoop系统哪一台服务器是Namenode

  1. nano /usr/local/hadoop/etc/hadoop/masters

输入:

  1. master

(6)编辑slaves文件:告诉hadoop系统哪些服务器是Datanode

  1. nano /usr/local/hadoop/etc/hadoop/slaves

输入:

  1. data1
  2. data2

(7)重新启动master虚拟机并查看网络设置
03-Spark集群的搭建 - 图15

10.7 master连接到data1和data2,创建HDFS目录

创建Namenode(master)的SSH连接到Datanode(data1、data2),并创建HDFS相关目录。

(1)启动master、data1、data2
(2)master连接到data1

  1. ssh data1

03-Spark集群的搭建 - 图16

(3)master连接到data1创建HDFS相关目录
登录data1后,我们将在data1创建HDFS相关目录

  1. # 删除HDFS所有目录
  2. rm -rf /usr/local/hadoop/hadoop_data/hdfs
  3. # 创建Datanode存储目录
  4. mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
  5. # 将目录的所有者更改为root
  6. sudo chown root:root -R /usr/local/hadoop
  7. # 退出data1,回到master
  8. exit

(4)同理,master连接到data2创建HDFS相关目录
登录data2后,我们将在data2创建HDFS相关目录

  1. # 删除HDFS所有目录
  2. rm -rf /usr/local/hadoop/hadoop_data/hdfs
  3. # 创建Datanode存储目录
  4. mkdir -p /usr/local/hadoop/hadoop_data/hdfs/datanode
  5. # 将目录的所有者更改为root
  6. sudo chown root:root -R /usr/local/hadoop
  7. # 退出data2,回到master
  8. exit

10.8 创建并格式化Namenode HDFS目录

  1. 1)删除之前的HDFS目录
  2. rm -rf /usr/local/hadoop/hadoop_data/hdfs
  3. 2)创建Namenode目录
  4. mkdir -p /usr/local/hadoop/hadoop_data/hdfs/namenode
  5. 3)将目录的所有者更改为root
  6. sudo chown root:root -R /usr/local/hadoop
  7. 4)格式化Namenode HDFS目录
  8. hadoop namenode -format

10.9 启动hadoop集群

  1. # 在master终端输入
  2. start-dfs.sh
  3. start-yarn.sh

03-Spark集群的搭建 - 图17

  1. # 查看data1进程
  2. ssh data1
  3. jps
  1. # 查看data2进程
  2. ssh data2
  3. jps

03-Spark集群的搭建 - 图18

  1. # 两次exit回到master
  2. exit
  3. exit

10.10 打开Hadoop ResourceManager Web界面

  1. # 虚拟机浏览器输入
  2. http://master:8088/
  3. 或者
  4. http://localhost:8088/
  5. # 宿主机浏览器输入
  6. http://192.168.56.100:8088/cluster

查看ResourceManager Web界面

03-Spark集群的搭建 - 图19

查看已经运行的节点情况

03-Spark集群的搭建 - 图20

10.11 打开Hadoop NameNode Web界面

  1. # 虚拟机浏览器输入
  2. http://master:50070/
  3. 或者
  4. http://localhost:50070/
  5. # 宿主机浏览器输入
  6. http://192.168.56.100:50070/dfshealth.html#tab-overview

03-Spark集群的搭建 - 图21
03-Spark集群的搭建 - 图22

10.12 关闭hadoop集群

  1. stop-dfs.sh
  2. syop-yarn.sh

11 spark集群的搭建

在master机器上操作

11.1 Scala的安装

  1. 1)下载scala
  2. wget http://www.scala-lang.org/files/archive/scala-2.12.4.tgz
  3. 2)解压缩scala
  4. tar -zxvf scala-2.12.4.tgz
  5. 3)把scala移动到/usr/local目录
  6. mv scala-2.12.4 /usr/local/scala
  7. 4)设置scala用户环境变量
  8. nano ~/.bashrc
  9. 5)输入以下:SCALA_HOMEscala的安装目录;设置PATH环境变量,让我们在不同的目录下都可以执行scala程序。
  10. export SCALA_HOME=/usr/local/scala
  11. export PATH=$PATH:$SCALA_HOME/bin
  12. 6)使~/.bashrc修改生效
  13. source ~/.bashrc
  14. 7)查看scala版本,启动scala,关闭scala
  15. scala -version
  16. scala
  17. :q

11.2 Spark的安装

  1. 1)下载spark
  2. # spark与hadoop版本要相互配合,spark会读取hadoop hdfs并且能够在Hadoop YARN上面执行程序,之前安装的是hadoop2.7.4,所以选择Pre-build for Apache Hadoop 2.7 and later
  3. wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.2.1/spark-2.2.1-bin-hadoop2.7.tgz
  4. 2)解压缩scala
  5. tar -zxvf spark-2.2.1-bin-hadoop2.7.tgz
  6. 3)把scala移动到/usr/local目录
  7. mv spark-2.2.1-bin-hadoop2.7 /usr/local/spark
  8. 4)设置spark用户环境变量
  9. nano ~/.bashrc
  10. 5)输入以下:SPARK_HOMEspark的安装目录;设置PATH环境变量,让我们在不同的目录下都可以执行spark程序。
  11. export SPARK_HOME=/usr/local/spark
  12. export PATH=$PATH:$SPARK_HOME/bin
  13. 6)使~/.bashrc修改生效
  14. source ~/.bashrc

11.3 Spark若干配置

03-Spark集群的搭建 - 图23

在spark的bin目录中,spark-shell是以scala语言调用打开的,而pyspark是以python语言调用打开的

(1)启动和退出pyspark交互式界面

  1. pyspark
  2. exit()

(2)设置pyspark显示信息
spark系统安装后,在pyspark交互式界面默认会显示很多信息,有时候太多信息会影响我们的阅读,所以建议修改设置,让他们只显示警告信息。
03-Spark集群的搭建 - 图24

  1. # 复制log4j模板文件,在conf目录下
  2. cd /usr/local/spark/conf
  3. cp log4j.properties.template log4j.properties
  4. # 编辑设置log4j.properties,将INFO改为WARN
  5. nano log4j.properties
  6. log4j.rootCategory=WARN, console
  7. # 再次进入pyspark,少了很多信息,只列出了重要的信息
  8. pyspark

11.4 创建Spark测试文件并上传至HDFS上

  1. mkdir /data
  2. # 测试数据text.txt放在master机器上的/data/test.txt,text.txt文件内容为
  3. python,good
  4. java,powerful
  5. spark,speed
  6. # 启动hadoop集群
  7. start-dfs.sh
  8. start-yarn.sh
  9. # HDFS上新建 /data目录
  10. hdfs dfs -mkdir /data
  11. # 上传文件到HDFS上面
  12. hdfs dfs -put /data/test.txt /data

11.5 本地运行pyspark程序

  1. # 启动
  2. pyspark --master local[4]
  3. # 查看当前运行模式
  4. sc.master
  5. # 读取本地文件
  6. rdd = sc.textFile('file:/data/test.txt')
  7. rdd.count()
  8. # 读取HDFS文件
  9. rdd = sc.textFile('hdfs://master:9000/data/test.txt')
  10. rdd.count()

local[N]代表本地运行,使用N个线程(thread),也就是说可以同时执行N个程序。虽然是在本地运行,但是因为现在CPU大多是多个核心,所以使用多个线程仍然会加速执行。
local[*]会尽量使用我们机器上的CPU核心。

HDFS的存储路径为“hdfs://master:9000”,在安装hadoop时设置的,可以编辑core-site.xml。

11.6 Hadoop YARN运行pyspark

Spark 可以在Hadoop YARN 上运行,让YARN帮助它进行多台机器资源的管理。

  1. HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop pyspark --master yarn --deploy-mode client
  2. sc.master
  3. rdd = sc.textFile('hdfs://master:9000/data/test.txt')
  4. rdd.count()

HADOOP_CONF_DIR :设置Hadoop配置文件目录
pyspark:要运行的程序pyspark
—master yarn —deploy-mode client:设置运行模式yarn-client

11.7 构建Spark Standalone Cluster运行环境

master机器操作

  1. 1)复制模版文件来创建spark-env.sh
  2. spark-env.shspark的环境配置文件。spark系统中提供了模版文件,便于用户设置时作为参考
  3. cp /usr/local/spark/conf/spark-env.sh.template /usr/local/spark/conf/spark-env.sh
  4. 2)设置编辑spark-env.sh
  5. nano /usr/local/spark/conf/spark-env.sh
  6. 输入以下内容:
  7. export SPARK_MASTER_IP=master
  8. export SPARK_WORKER_CORES=1
  9. export SPARK_WORKER_MEMORY=512m
  10. export SPARK_WORKER_INSTANCES=4
  11. 3)将masterspark复制到data1
  12. ssh data1
  13. mkdir /usr/local/spark
  14. chown root:root /usr/local/spark
  15. exit
  16. scp -r /usr/local/spark root@data1:/usr/local
  17. 4)将masterspark复制到data2
  18. ssh data2
  19. mkdir /usr/local/spark
  20. chown root:root /usr/local/spark
  21. exit
  22. scp -r /usr/local/spark root@data2:/usr/local
  23. 5)编辑slaves文件,设置Spark Standalone Cluster有哪些服务器
  24. cp slaves.template slaves
  25. nano /usr/local/spark/conf/slaves
  26. 6)启动Spark Standalone Cluster
  27. /usr/local/spark/sbin/start-all.sh
  28. 或者分别启动masterslaves
  29. /usr/local/spark/sbin/start-master.sh
  30. /usr/local/spark/sbin/start-slaves.sh
  31. 7)在Spark Standalone Cluster运行pyspark
  32. pyspark \
  33. --master spark://master:7077 \
  34. --num-executors 1 \
  35. --total-executor-cores 3 \
  36. --executor-memory 512m
  37. # 查看运行模式
  38. sc.master
  39. # 读取本地文件:注意在cluster模式(如YARN-client或Spark Standalone )读取本地文件时,因为程序会分布在不同的机器上执行,所以必须确认所有的机器都有该文件,否则会发生错误。
  40. # 建议在cluster模式下读取HDFS文件,这样才不会出错。
  41. rdd = sc.textFile('file:/data/test.txt')
  42. rdd.count()
  43. # 读取HDFS文件
  44. rdd = sc.textFile('hdfs://master:9000/data/test.txt')
  45. rdd.count()
  46. 8)停止Spark Standalone Cluster运行
  47. /usr/local/spark/sbin/stop-all.sh

03-Spark集群的搭建 - 图25

12 Anaconda安装

pyspark集群模式配置

  1. 1)下载
  2. wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.0.0-Linux-x86_64.sh
  3. 2)安装:-b 批次安装,自动安装到用户目录下(/root/anaconda3
  4. bash Anaconda3-5.0.0-Linux-x86_64.sh -b
  5. 3)编辑~/.bashrc加入模块路径
  6. nano ~/.bashrc
  7. #加入anaconda路径
  8. export PATH=/root/anaconda3/bin:$PATH
  9. export ANACONDA_PATH=/root/anaconda3
  10. #加入pyspark设置
  11. export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/ipython
  12. export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  13. #使~/.bashrc生效
  14. source ~/.bashrc
  15. 4)查看Python版本
  16. root@master:~/anaconda3# python --version
  17. Python 3.6.2 :: Anaconda, Inc.
  18. 此时启动Python会默认为anacondaPython3.6.2,而不是系统自带的版本Python2.7.6
  19. 如:ipython
  20. jupyter notebook --allow-root
  21. 5)在data1data2中也安装anaconda
  22. # data1
  23. scp Anaconda3-5.0.0-Linux-x86_64.sh root@data1:/opt
  24. ssh data1
  25. cd /opt
  26. bash Anaconda3-5.0.0-Linux-x86_64.sh -b
  27. nano ~/.bashrc
  28. export PATH=/root/anaconda3/bin:$PATH
  29. export ANACONDA_PATH=/root/anaconda3
  30. export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/ipython
  31. export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  32. source ~/.bashrc
  33. # data2
  34. scp Anaconda3-5.0.0-Linux-x86_64.sh root@data2:/opt
  35. ssh data2
  36. cd /opt
  37. bash Anaconda3-5.0.0-Linux-x86_64.sh -b
  38. nano ~/.bashrc
  39. export PATH=/root/anaconda3/bin:$PATH
  40. export ANACONDA_PATH=/root/anaconda3
  41. export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  42. export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/ipython
  43. source ~/.bashrc

装完Anaconda,因为我们我们对spark使用了ipython打开,所以,当用户在终端输入pyspark时会使用ipython打开
03-Spark集群的搭建 - 图26

13 利用ipython notebook(jupyter notebook)使用spark

  1. mkdir -p /pythonwork/ipython_notebook
  2. cd /pythonwork/ipython_notebook
  3. # 用jupyter notebook启动pyspark,分别在master /data1 /data2修改pyspark设置。
  4. # 注意笔者使用的是root用户使用,需要加上--allow-root参数,否则打不开;
  5. # --NotebookApp.open_browser=False默认没有用浏览器打开,我们可以复制屏幕上打印出的地址,在虚拟机上的浏览器,也可以在宿主机浏览器打开。
  6. # --NotebookApp.port=8889自定义端口号,将会避免不同软件的端口号冲突被占用问题。
  7. nano ~/.bashrc
  8. #export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  9. #export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/ipython
  10. # jupyter notebook
  11. export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  12. export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/jupyter-notebook
  13. export PYSPARK_DRIVER_PYTHON_OPTS=" --allow-root--NotebookApp.open_browser=False --NotebookApp.ip='192.168.56.100' - -NotebookApp.port=8889"
  14. # jupyter lab
  15. export PYSPARK_PYTHON=$ANACONDA_PATH/bin/python
  16. export PYSPARK_DRIVER_PYTHON=$ANACONDA_PATH/bin/jupyter-lab
  17. export PYSPARK_DRIVER_PYTHON_OPTS=" --allow-root --NotebookApp.open_browser=False --NotebookApp.ip='30.76.226.208' --NotebookApp.port=8889"
  18. # 启动pyspark
  19. pyspark
  20. #关闭pyspark
  21. 关闭浏览器
  22. Ctrl+C
  23. y
  24. Enter

03-Spark集群的搭建 - 图27
03-Spark集群的搭建 - 图28

这样我们就可以像操作Python一样,通过使用jupyter notebook一样去操作spark了,关于jupyter notebook的使用,网上有很多文章,大家可以去自己查阅学习,这不是本文的重点。jupyter notebook是作为我们调试代码的好帮手,务必学会利用,可以有效地提高我们的工作效率。

14 使用Ipython Notebook在Hadoop YARN-client模式运行Spark程序

  1. HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop MASTER=yarn-client pyspark

03-Spark集群的搭建 - 图29

15 使用Ipython Notebook在Spark Stand Alone模式下运行

  1. # 启动Spark Stand Alone cluster
  2. /usr/local/spark/sbin/start-all.sh
  3. # 启动IPython Notebook运行在Spark Stand Alone模式
  4. ## 切换目录
  5. cd /pythonwork/ipyton_notebook
  6. ##命令行执行
  7. MASTER=spark://master:7077 pyspark \
  8. --num-executors 1 \
  9. --total-executor-cores 2 \
  10. --executor-memory 512m

16 总结:不同模式下运行ipython notebook

  1. 1Local 启动ipython notebook
  2. 在任意一台机器终端执行:
  3. cd /pythonwork/ipyton_notebook
  4. pyspark --master local[*]
  5. 2hadoop yarn-client模式启动 ipython notebook
  6. 启动masterdata1data2机器,在master终端执行:
  7. start-all.sh
  8. HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop pyspark \
  9. --master yarn \
  10. --deploy-mode client
  11. 3Spark Stand Alone模式启动 ipython notebook
  12. start-all.sh
  13. /usr/local/spark/sbin/start-all.sh
  14. MASTER=spark://master:7077 pyspark \
  15. --num-executors 1 \
  16. --total-executor-cores 2 \
  17. --executor-memory 512m

17 Pycharm搭建PySpark集成开发环境

前面的都是使用jupyter notebook交互式模式,在实际项目中适合测试,但是如果想要建立批量的开发环境用于生产,通常我们可以选择(以Python语言为例)Pycharm 、IntelliJ IDEA(通过安装Python插件)作为开发环境。

下面以Pycharm作为PySpark的集成开发环境的配置进行讲解。

17.1 下载、解压和启动Pycharm

  1. cd /opt
  2. wget https://download.jetbrains.8686c.com/python/pycharm-community-2017.3.3.tar.gz
  3. tar -zxvf pycharm-community-2017.3.3.tar.gz
  1. cd pycharm-community-2017.3.3/
  2. ./bin/pycharm.sh &

17.2 配置Pycharm

(1) 打开Pycharm,导入已有的或者新建工程。
(2)创建新的run configurition——>选择edit configurition,
设置环境,创建PYTHONPATH和SPARK_HOME
配置路径,都可以在Spark安装路径下找到:
如:
PYTHONPATH :/data/spark/python/lib/py4j-0.9-src.zip
SPARK_HOME:/data/spark
03-Spark集群的搭建 - 图30

(3)安装py4j(Python和Java之间的解释器)
选择 File->setting->你的project interpreter,搜索py4j,安装
03-Spark集群的搭建 - 图31

(4)添加spark库到Python环境中
选择 File->setting->你的project->project structure
03-Spark集群的搭建 - 图32

(5)测试SimpleApp
03-Spark集群的搭建 - 图33