修改环境 /etc/profile
export SCALA_HOME=/usr/local/scala
export PATH=.:${JAVA_HOME}/bin:${SCALA_HOME}/bin:$PATH
export SPARK_HOME=/usr/local/spark
export PATH=.:${JAVA_HOME}/bin:${SCALA_HOME}/bin:${SPARK_HOME}/bin:$PATH
export PATH=${SPARK_HOME}/bin:$PATH
#livy环境
export LIVY_HOME=/usr/local/livy
export PATH=$PATH:$LIVY_HOME/bin
#python环境
#export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
#export PYSPARK_PYTHON=python3
#export PYSPARK_ALLOW_INSECURE_GATEWAY=1
#anaconda3环境
export ANACONDA_ROOT=/home/hadoop/anaconda3
export PYSPARK_DRIVER=$ANACONDA_ROOT/bin/ipython notebook
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
export PYSPARK_DRIVER_PYTHON_OPTS="notebook"
export PATH=/home/hadoop/anaconda3/bin:$PATH
#环境生效
source /etc/profile
版本:
scala-2.12.8.tgz,spark-2.4.3-bin-hadoop2.7.tgz
1.进入所在的目录,解压移动
解压移动:
#scala解压安装
tar -zxvf scala-2.12.8.tgz
sudo mv scala-2.12.8 /usr/local/scala
#按照前文配置好环境,此时直接在终端输入 scala 就会进入scala的交互模式
#spark解压安装
tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz
sudo mv /usr/local/spark
2.配置 /usr/local/spark/conf/spark-env.sh
加入如下内容:
export SCALA_HOME=/usr/local/scala
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_HOME=/usr/local/spark
#直接写ip,写hostname网页web返回master失败
export SPARK_MASTER_HOST=192.168.1.111
export SPARK_MASTER_IP=192.168.1.111
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export SPARK_EXECUTOR_MEMORY=2G
export SPARK_LOCAL_IP=192.168.1.111
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
export PYSPARK_ALLOW_INSECURE_GATEWAY=1
3.修改slaves
在conf目录下,修改slaves文件,如果没有 slaves 该文件,就复制slaves .template文件并重命名为slaves 。
修改这个新建的slaves 文件,加入配置:
#本机的hostname
master
4.配置 spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://192.168.1.111:9000/tmp/spark-events
spark.eventLog.compress true
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.master yarn
spark.driver.cores 1
#spark.driver.memory 调太大,会导致yarn资源不够分配,应用一直accepted状态
spark.driver.memory 2g
spark.executor.cores 1
spark.executor.memory 1g
spark.executor.instances 1
spark.sql.warehouse.dir hdfs://192.168.1.111:9000/user/hive/warehouse
#hdfs上创建sparkjars包,讲spark的jar包都上传上去
spark.yarn.jars=hdfs://192.168.1.111:9000/spark/jars/*
#spark.yarn.archive=hdfs://192.168.1.21:9000/spark/jars/* #存疑
5.在hdfs上新建/spark/jars/文件夹,并将spark的jar包都上传到此处
hadoop fs -mkdir - p /spark/jars
hdfs dfs -put /usr/local/spark/jars/* /spark/jars
#新建/tmp/spark-events文件夹,spark-defaults.conf 配置中用到
hadoop fs -mkdir - p /tmp/spark-events
6.增加配置:hadoop/etc/hadoop/yarn-site.xml
避免spark-shell报错报错
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- scheduler configuration, for multi-tasks run in queue, avoid mapreduce-run & pyspark ACCEPTED not run problem -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<!-- 下面配置用来设置集群利用率的阀值, 默认值 0.8f,最多可以抢占到集群所有资源的 80% -->
<property>
<name>yarn.scheduler.fair.preemption.cluster-utilization-threshold</name>
<value>0.5</value>
</property>
7.配置 spark 读写 hive(存疑未测试)
拷贝hive-site.xml 到 spark_home/conf/ 目录下
8.下载livy
spark需要livy
下载livy (http://mirrors.tuna.tsinghua.edu.cn/apache/incubator/livy/0.5.0-incubating/livy-0.5.0-incubating-bin.zip)
解压移动到
/usr/local/livy
并在/usr/local/livy 创建目录logs,否则报错
9.修改配置 livy.conf
vim conf/livy.conf #livy.conf.template复制为livy.conf再修改
#livy服务端口
livy.server.port = 8998
#spark程序部署使用yarn集群
livy.spark.master = yarn
#spark 程序使用客户端模式
livy.spark.deploy-mode =client
livy.server.session.timeout = 1h
livy.server.session.state-retain.sec = 600s
10.修改配置 livy-env.sh
export LIVY_HOME=/usr/local/livy
export JAVA_HOME=/usr/local/java
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_HOME=/usr/local/spark
export SPARK_CONF_DIR=/usr/local/spark/conf
export SCALA_HOME=/usr/local/scala
export LIVY_LOG_DIR=/usr/local/livy/logs
export LIVY_PID_DIR=$/usr/local/livy/run
#PYSPARK_ALLOW_INSECURE_GATEWAY很重要关系到pyspark在hue的启动运行,
#在livy-env.sh、 /etc/profile 、和spark-env.sh都要配置
export PYSPARK_ALLOW_INSECURE_GATEWAY=1
11.spark启动
说明:要先启动Hadoop
切换到Spark目录下,启动spark
cd /usr/local/spark/sbin
start-all.sh
#启动后:可以在浏览器输入: ip+8080 端口查看
#如果8080进不去,端口被占用,就是8081或者8082
12.启动livy-server
cd /usr/local/livy/
bin/livy-server
13.启动spark的history和thriftserver(hue集成需要)
#spark目录下
./sbin/start-history-server.sh
./sbin/start-thriftserver.sh --master yarn --deploy-mode client
sparkthriftserver 用于提供远程 odbc 调用,在远端执行 hive sql 查询
链接:https://www.cnblogs.com/cuishuai/p/7693417.html
14.启动hue
hue部署请看大数据单机部署-hue
15.spark on yarn运行
#yarn管理器运行
#spark目录下
./bin/spark-shell --master yarn --deploy-mode client #测试是scala否能在yarn上运行
./bin/pyspark --master yarn --deploy-mode client #测试是pyspark否能在yarn上运行
1).终端运行命令
spark-shell --master yarn --deploy-mode client 或者pyspark --master yarn --deploy-mode client
后在yarn上web上能看到Application详情:
注意:可以看到Application的name是shell
2).在hue上启动pyspark
hue部署请看大数据单机部署-hue
注意:可以看到Application的name是livy-seeion
16.spark自带资源管理器运行
#本地运行测试
#spark目录下
./bin/spark-shell local [*]
./bin/pyspark --master spark://master:7077
在spark的web上能看到Application详情
#启动介绍
./bin/pyspark --master <master-url>
Spark 的运行模式取决于传递给 SparkContext 的 Master URL 的值。Master URL 可以是以下任一种形式:
* local 使用一个 Worker 线程本地化运行 SPARK (完全不并行)
* local [*] 使用逻辑 CPU 个数数量的线程来本地化运行 Spark
* local [K] 使用 K 个 Worker 线程本地化运行 Spark(理想情况下,K 应该根据运行机器的 CPU 核数设定)
* spark://HOST:PORT 连接到指定的 Spark standalone master。默认端口是 7077.
* yarn-client 以客户端模式连接 YARN 集群。集群的位置可以在 HADOOP_CONF_DIR 环境变量中找到。
* yarn-cluster 以集群模式连接 YARN 集群。集群的位置可以在 HADOOP_CONF_DIR 环境变量中找到。
* mesos://HOST:PORT 连接到指定的 Mesos 集群。默认接口是 5050。
17.hue的spark使用
pyspark:
word = ["a","a","b","hehe","spark","spark"]
rdd = sc.parallelize(word)
wordCount = rdd.map(lambda word: (word,1)).reduceByKey(lambda a, b : a + b)
print(wordCount.collect())
scala:
val data = Array(1, 2, 3, 4 ,5)
val distData = sc.parallelize(data)
distData.map(s=>s+1).collect()
18.报错问题:
1).
spark master web ui 默认端口为 8080,当系统有其它程序也在使用该接口时,启动 master 时也不会报错,spark 自己会改用其它端口,自动端口号加 1
所以如果8080进不去,就是8081或者8082
最重要就是查看spark/logs文件夹下的日志,端口占用可以看到其提示
彻底解决就要:
sudo netstat -tunlp |grep 8080
#查看端口被占用的进程id
kill -9 进程id
#再次启动spark
start-all.sh
2).
spark-shell报错
或
./bin/spark-shell --master yarn --deploy-mode client报错:
WARN yarn.Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
ERROR spark.SparkContext: Error initializing SparkContext.
解决:
1).上传jar包到hdfs
hdfs dfs -mkdir /sparkjars
hdfs dfs -put /usr/local/spark/jars/*.jar /sparkjars
2).hadoop/etc/hadoop/yarn-site.xml中增加配置,前面有说
3)、 pyspark 任务后 一直处于yarn的web界面显示 ACCEPTED 状态不运行 running,hue上显示session过期
【真实原因】未开启 yarn 多线程模式,也就是 scheduler 为单线程单队列运行
配置 yarn 多线程运行模式
参考https://blog.csdn.net/u010770993/article/details/70312473