大数据storm和spark 结合 spark大数据平台搭建_spark集群搭建


大数据开发环境无外乎是离线和实时两套开发环境,不过目前已经流行实时数仓体系的搭建了,但是底层主要还是Hadoop集群环境,给予Hadoop集群的spark集群,以及hive、flink等中间件的搭建。

本篇文章主要是搭建伪分布式的hadoop集群以及spark集群,并安装hive、flink等离线和实时的开发中间件,并测试demo。

Hadoop伪分布式集群搭建

  • 环境与依赖

JDK:1.8.0_221

Hadoop:2.7.7

spark:2.1.1

scala:2.11.8

系统:MacOS

  • Hadoop安装和配置

1、安装JDK

选择最新版本下载,地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

安装完成之后,打开终端,输入java -version ,出现类似如下说明安装成功


大数据storm和spark 结合 spark大数据平台搭建_hadoop_02


2、配置ssh,无密码登录


cd ~/.ssh
ssh-keygen -t rsa #生成秘钥,之后一路回车即可,不需要输入任何内容。我之前已经生成过,所以提示是否overwrite。如果是第一次生成,不会有这个提示。
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys #将公钥复制到制定文件
ssh localhost#测试ssh连接,首次连接需要输入yes,但不需要输入密码,之后不需要输入yes,如果能不输入密码连接,就配置成功了

如果Connection refused,可以执行
sudo systemsetup -f -setremotelogin on

执行ssh localhost


大数据storm和spark 结合 spark大数据平台搭建_Hadoop_03


2、下载Hadoop并修改

地址:https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/

解压完成后,进入$HADOOP_HOME/etc/hadoop目录:

修改core-site.xml


<configuration>
     <property>
         <name>fs.defaultFS</name>
         <value>hdfs://localhost:9000</value>
     </property>
</configuration>


修改hdfs-site.xml


<configuration>
     <property>
         <name>dfs.replication</name>
         <value>1</value>
     </property>    
     <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/Users/gaowei/Package/hadoop-2.7.7/tmp/dfs/name</value>
        </property>
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/Users/gaowei/Package/hadoop-2.7.7/tmp/dfs/data</value>
        </property> 
</configuration>


修改mapred-site.xml


<configuration>
    <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
     </property>
</configuration>


yarn-site.xml
<configuration>
    <property> 
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property>
    <property> 
        <name>yarn.nodemanager.env-whitelist</name>
                  <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>


剔除警告(可选):

目录$HADOOP_HOME/etc/hadoop/log4j.properties


添加:
log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR


3、启动hadoop

进入hadoop文件夹,用如下命令格式化


cd bin
./hadoop namenode –format


注意:如果多次hadoop namenode -format,如果我们频繁的格式化namenode,那么datanode中保存(即配置文件中dfs.data.dir在本地系统的路径)的current/VERSION文件只是你第一次格式化时保存的namenode的ID,因此就会造成datanode与namenode之间的id不一致。

所以每次重启都需要删除tmp,可以避免这个情况


rm -rf $HADOOP_HOME/tmp
hadoop namenode -format


启动Hadoop


sh $HADOOP_HOME/sbin/start-all.sh


结果:


大数据storm和spark 结合 spark大数据平台搭建_大数据storm和spark 结合_04


HDFS监控页面查询:

http://localhost:50070/


大数据storm和spark 结合 spark大数据平台搭建_spark_05


Yarn监控页面查询:

http://localhost:8088/cluster


大数据storm和spark 结合 spark大数据平台搭建_Hadoop_06


其他端口说明:

port 8088: cluster and all applications

port 50070: Hadoop NameNode

port 50090: Secondary NameNode

port 50075: DataNode

4、demo测试


大数据storm和spark 结合 spark大数据平台搭建_spark_07


结果:


大数据storm和spark 结合 spark大数据平台搭建_spark集群搭建_08


调度情况:


大数据storm和spark 结合 spark大数据平台搭建_spark_09


Spark集群搭建

  1. 安装Scala

Scala 2.11.8下载链接:http://www.scala-lang.org/download/2.11.8.html

配置Scala


.bash_profile
export SCALA_HOME=/Users/gaowei/Package/scala-2.11.8

source /etc/profile 命令使修改生效,输入 scala 检查配置是否成功


大数据storm和spark 结合 spark大数据平台搭建_spark集群搭建_10


2.安装spark

spark下载链接:http://archive.apache.org/dist/spark/spark-2.1.1/


大数据storm和spark 结合 spark大数据平台搭建_大数据storm和spark 结合_11


下载完成后解压,并添加配置


cat .bash_profile

export LS_OPTIONS='--color=auto'
export CLICOLOR='Yes'
export LSCOLORS='CxfxcxdxbxegedabagGxGx'
export JAVA_HOME=$(/usr/libexec/java_home)
export MYSQL_HOME=/usr/local/mysql
#export SCALA_HOME=/usr/local/Cellar/scala/2.13.0
export SCALA_HOME=/Users/gaowei/Package/scala-2.11.8
export SPARK_HOME=/Users/gaowei/Package/spark-2.1.1-bin-hadoop2.7
export HADOOP_HOME=/Users/gaowei/Package/hadoop-2.7.7
PATH="$SCALA_HOME/bin:$SPARK_HOME/bin:$HADOOP_HOME/bin:$MYSQL_HOME/bin:$PATH"

source /etc/profile


进入Spark conf目录,复制并重命名spark-env.sh.template、log4j.properties.template、slaves.template


cp spark-env.sh.template spark-env.sh 
cp log4j.properties.template log4j.properties
cp slaves.template slaves


添加配置到spark-env.sh


export JAVA_HOME=$(/usr/libexec/java_home)
export SCALA_HOME=/Users/gaowei/Package/scala-2.11.8
export SPARK_HOME=/Users/gaowei/Package/spark-2.1.1-bin-hadoop2.7
export HADOOP_HOME=/Users/gaowei/Package/hadoop-2.7.7
export SPARK_WORKER_MEMORY=1G
export HADOOP_CONF_DIR=/Users/gaowei/Package/hadoop-2.7.7/etc/hadoop
export SPARK_MASTER_IP=localhost


3.启动spark


/Users/gaowei/Package/spark-2.1.1-bin-hadoop2.7/sbin/start-all.sh


如果报错:

Stack trace: ExitCodeException exitCode=127:

修改:

hadoop-env.sh中的java_home环境变量修改为:


if [ "Darwin" == "$(uname -s)" ]; then
    if [ -x /usr/libexec/java_home ]; then
      export JAVA_HOME=$(/usr/libexec/java_home)
    else
      export JAVA_HOME=/Library/Java/Home
    fi
  fi


成功后:


大数据storm和spark 结合 spark大数据平台搭建_spark集群搭建_12


UI访问:http://localhost:8080/


大数据storm和spark 结合 spark大数据平台搭建_spark_13


4.Demo测试

Yarn模式调度


大数据storm和spark 结合 spark大数据平台搭建_大数据storm和spark 结合_14


yarn调度界面:


大数据storm和spark 结合 spark大数据平台搭建_spark集群搭建_15


进入Log


大数据storm和spark 结合 spark大数据平台搭建_spark_16


结果能显示出来。

其中clinet模式可以在终端显示结果:


spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client --driver-memory 1g --executor-memory 1g --executor-cores 1 ./spark-examples_2.11-2.1.1.jar 100


大数据storm和spark 结合 spark大数据平台搭建_hadoop_17


Client模式下,Driver进程会在当前客户端启动,客户端进程一直存在直到应用程序运行结束。

工作流程如下:

  • 启动master和worker . worker负责整个集群的资源管理,worker负责监控自己的cpu,内存信息并定时向master汇报
  • 在client中启动Driver进程,并向master注册
  • master通过rpc与worker进行通信,通知worker启动一个或多个executor进程
  • executor进程向Driver注册,告知Driver自身的信息,包括所在节点的host等
  • Driver对job进行划分stage,并对stage进行更进一步的划分,将一条pipeline中的所有操作封装成一个task,并发送到向自己注册的executor
  • 进程中的task线程中执行
  • 6.应用程序执行完成,Driver进程退出

cluster模式下,Driver进程将会在集群中的一个worker中启动,而且客户端进程在完成自己提交任务的职责后,就可以退出,而不用等到应用程序执行完毕。

  • 在集群的节点中,启动master , worker进程,worker进程启动成功后,会向Master进行注册。
  • 客户端提交任务后,ActorSelection(master的actor引用),然后通过ActorSelection给Master发送注册Driver请求(RequestSubmitDriver)
  • 客户端提交任务后,master通知worker节点启动driver进程。(worker的选择是随意的,只要worker有足够的资源即可)
  • driver进程启动成功后,将向Master返回注册成功信息
  • master通知worker启动executor进程
  • 启动成功后的executor进程向driver进行注册
  • Driver对job进行划分stage,并对stage进行更进一步的划分,将一条pipeline中的所有操作封装成一个task,并发送到向自己注册的executor
  • 进程中的task线程中执行
  • 所有task执行完毕后,程序结束