千家信息网

Spark如何安装、配置及基础使用

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,小编给大家分享一下Spark如何安装、配置及基础使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!7. Spark此主题介
千家信息网最后更新 2024年11月19日Spark如何安装、配置及基础使用

小编给大家分享一下Spark如何安装、配置及基础使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

7. Spark

此主题介绍Spark的安装、配置及基础使用。

Spark基本信息

官网:http://spark.apache.org/官方教程:http://spark.apache.org/docs/latest/programming-guide.html

7.1. 环境准备

# 切换到工作空间cd /opt/workspaces# 创建Spark数据目录mkdir data/spark# 创建Spark日志目录mkdir logs/spark

官方教程

http://spark.apache.org/docs/latest/spark-standalone.html

7.2. 安装

wget http://mirrors.hust.edu.cn/apache/spark/spark-1.6.1/spark-1.6.1-bin-hadoop2.6.tgztar -zxf spark-1.6.1-bin-hadoop2.6.tgzrm -rf spark-1.6.1-bin-hadoop2.6.tgzmv spark-1.6.1-bin-hadoop2.6 ./frameworks/spark

7.3. 配置(伪分布式)

vi ./frameworks/spark/conf/spark-env.sh

export SPARK_MASTER_IP=bdexport SPARK_MASTER_PORT=7077export MASTER=spark://${SPARK_MASTER_IP}:${SPARK_MASTER_PORT}# 指定Spark数据目录export SPARK_LOCAL_DIRS=/opt/workspaces/data/spark/# 指定Spark日志目录export SPARK_LOG_DIR=/opt/workspaces/logs/spark/# 指定JDK目录export JAVA_HOME=/opt/env/java# 指定Scala目录export SCALA_HOME=/opt/env/scala

7.4. 启动与停止

./frameworks/spark/sbin/start-all.sh

7.5. 测试

# 执行圆周率计算示例./frameworks/spark/bin/run-example  org.apache.spark.examples.SparkPi./frameworks/spark/bin/spark-submit \  --class org.apache.spark.examples.SparkPi \  --master spark://bd:6066\  --deploy-mode cluster \  --driver-memory 512M \  --executor-memory 256M \  #如果运行出错请改大些  ./frameworks/spark/lib/spark-examples-1.6.1-hadoop2.6.0.jar \  1000

7.6. Word Count


http://spark.apache.org/docs/latest/quick-start.html

Word Count

./frameworks/spark/bin/spark-shell// 基础版val textFile = sc.textFile("./frameworks/spark/README.md")val words = textFile.flatMap(line => line.split(" "))val exchangeVal = words.map(word => (word,1))val count = exchangeVal.reduceByKey((a,b) => a + b)count.collect// 优化版sc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect// 带排序sc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).map(_.swap).sortByKey(false).map(_.swap).collect// 最终版val wordR="""\w+""".rsc.textFile("./frameworks/spark/README.md").flatMap(_.split(" ")).filter(wordR.pattern.matcher(_).matches).map((_,1)).reduceByKey(_ + _).map(_.swap).sortByKey(false).map(_.swap).saveAsTextFile("hdfs://bd:9000/wordcount")

可以访问 http://:8080 查看作业

7.7. 参数说明

  • 在哪配置:

Spark properties (Spark属性)在应用程序中通过SparkConf 对象设置,或通过Java系统属性设置。
Environment variables (环境变量)指定各节点的设置,如IP地址、端口,配置文件在conf/spark-env.sh中。
Logging (日志)可以通过log4j.properties配置日志。

  • Spark properties

在代码中指定配置

val conf = new SparkConf()             // 指定使用2个本地线程来运行,本地模式下,我们可以使用n个线程(n >= 1),但在像Spark Streaming这样的场景下,我们可能需要多个线程             .setMaster("local[2]")             .setAppName("CountingSheep")val sc = new SparkContext(conf)

在脚本中指定配置

./bin/spark-submit --name "My app" --master local[4] --conf spark.eventLog.enabled=false  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar

Table 1. 常用配置

属性名称默认值说明

spark.app.name


Spark应用的名字

spark.driver.cores

1

在cluster模式下运行driver进程的核数

spark.driver.memory

1g

driver进程可以用的内存总量(如:1g,2g),client模式下无效果,必须要在命令行里用 -driver-memory 或者在默认属性配置文件里设置

spark.executor.memory

1g

单个executor使用的内存总量(如,2g,8g)

spark.master


集群管理器URL

  • Environment variables

环境变量在${SPARK_HOME}/conf/spark-env.sh脚本中设置

Table 2. 常用配置

模式属性名称默认值说明

JAVA_HOME


Java安装目录


SCALA_HOME


Scala安装目录


SPARK_LOCAL_IP


本地绑定的IP


SPARK_LOG_DIR

${SPARK_HOME}/logs

日志目录

standalone

SPARK_MASTER_IP

(当前IP)

Master IP

standalone

SPARK_MASTER_PORT

7077(6066)

Master 端口

standalone

MASTER


默认Master URL

standalone

SPARK_WORKER_CORES

所有

每个节点使用的CPU core上限

standalone

SPARK_WORKER_MEMORY

本节点所有内存减去1GB

每个节点使用的内存上限

standalone

SPARK_WORKER_INSTANCES

1

每个节点启动的worker实例个数

standalone

SPARK_WORKER_PORT

随机

Worker绑定的端口


如果你的slave节点性能非常强劲,可以把SPARK_WORKER_INSTANCES设为大于1;相应的,需要设置SPARK_WORKER_CORES参数限制每个worker实例使用的CPU个数,否则每个worker实例都会使用所有的CPU。
  • Logging

日志在${SPARK_HOME}/conf/log4j.properties中设置

  • Hadoop集群配置

使用HDFS时需要从Hadoop中复制hdfs-site.xml、 core-site.xml到Spark的classpath中


http://spark.apache.org/docs/latest/configuration.html

7.8. 资源调度

standalone目前只支持简单的先进先出(FIFO)调度器。这个调度器可以支持多用户,你可以控制每个应用所使用的最大资源。默认情况下,Spark应用会申请集群中所有的CPU。

在代码中限制资源

val conf = new SparkConf()             .setMaster(...)             .setAppName(...)             .set("spark.cores.max", "10")val sc = new SparkContext(conf)

在配置文件 spark-env.sh中限制资源

export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores="

7.9. 性能调优


http://spark.apache.org/docs/latest/tuning.html

7.10. 硬件配置

每个节点:
* 4-8块磁盘
* 8G以上内存
* 千兆网卡
* 8-16核CPU

至少3个节点


http://spark.apache.org/docs/latest/hardware-provisioning.html

7.11. 整合Hive

  • spark-env.sh中添加配置项

    # Hive目录export HIVE_HOME=$HIVE_HOME

SPARK_CLASSPATH

有些教程中说要添加
export SPARK_CLASSPATH=$HIVE_HOME/lib/mysql-connector-java-x.jar:$SPARK_CLASSPATH
但目前版本不需要此配置,并且添加上去会导致zeppelin运行出错:
org.apache.spark.SparkException: Found both spark.driver.extraClassPath and SPARK_CLASSPATH. Use only the former.

  • 复制Hive的几个配置文件

    cp ./frameworks/hive/conf/hive-site.xml ./frameworks/spark/confcp ./frameworks/hive/conf/hive-log4j.properties ./frameworks/spark/conf
  • 启动thriftserver,用于对外提供JDBC服务

    ./frameworks/spark/sbin/start-thriftserver.sh
  • 测试连接

    ./frameworks/spark/bin/beeline!connect jdbc:hive2://bd:10000show tables;

以上是"Spark如何安装、配置及基础使用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0