spark集群搭建_大数据环境搭建

964935fc32de5c925aa7ddfe947bd705.png

大数据开发环境无外乎是离线和实时两套开发环境,不过目前已经流行实时数仓体系的搭建了,但是底层主要还是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 ,出现类似如下说明安装成功

2aebea68e4400bd539161a6e5475efce.png

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

97c24e0bcc5ab2f2be61c9a1f4bd9ff7.png

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

结果:

2aed8d198845ecaafe8c059229321263.png

HDFS监控页面查询:

http://localhost:50070/

0524b8cdccdba61811bbbf9505d4a9a5.png

Yarn监控页面查询:

http://localhost:8088/cluster

afae0c3411350397fa341c61afb9bf5c.png

其他端口说明:

port 8088: cluster and all applications

port 50070: Hadoop NameNode

port 50090: Secondary NameNode

port 50075: DataNode

4、demo测试

b877c1e67a7e617b54893ca05be934fd.png

结果:

719221d4d54dde9cbc0bfeb55245e749.png

调度情况:

30826e6c4c2ec2ab75f9fa83e7ab35e5.png

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 检查配置是否成功

8d8526da219693ae5e345cd60cd8cb99.png

2.安装spark

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

3e8805087dbb084ddeb74c676e947dcd.png

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

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

成功后:

749eb37f5b5e0911dcfc947cacb7d39d.png

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

475a9630b9b531178795a19449843f37.png

4.Demo测试

Yarn模式调度

88f6f0bf5b82978b7ef0b5418453da49.png

yarn调度界面:

d3515be5d44b583675187006288c67ad.png

进入Log

97b0a6945981fda2e6b3310866cf7d82.png

结果能显示出来。

其中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

02fb5c6a01fe2a5a83a0db4859c53041.png

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执行完毕后,程序结束
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值