美文网首页
linux下安装spark

linux下安装spark

作者: 机灵鬼鬼 | 来源:发表于2018-12-28 14:44 被阅读0次

    第一步去:spark.apache.org官网去选择适合自己的版本下载安装包

    第二步:解压tgz文件,配置SPARK_HOME到环境变量中

    tar zxvf  文件名.tgz 

    vi  /etc/profile

    第三步: 进入spark安装位置, 然后进入spark中的 bin 文件夹

    运行: ./bin/spark-shell   运行scala

    在启动后的结果页面上可以看到spark的webUI的控制台地址,可以在浏览器中访问的。

    在yarn上运行spark

    必须确保在spark中指定hadoop的集群配置文件所在的目录,如下英文所述

    编辑$SPARK_HOME/conf/spark-env.sh文件

    加入内容为:

    HADOOP_CONF_DIR=/usr/hadoop/hadoop-2.6.0-cdh5.7.0/etc/hadoop

    To launch a Spark application in cluster mode:(用cluster模式执行一个jar程序)

    $ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]

    例子:

    For example:

    ${SPARK_HOME}/bin/spark-submit --class org.apache.spark.examples.SparkPi \

        --master yarn \

        --deploy-mode cluster \

        --driver-memory 4g \

        --executor-memory 2g \

        --executor-cores 1 \

        --queue thequeue \

        examples/jars/spark-examples*.jar \

        10

    以客户端client的模式在yarn上启动spark:

    $ ./bin/spark-shell --master yarn --deploy-mode client

    退出spark-shell

    【注意】在Spark使用结束时,务必使用 :quit 退出。否则下次再启动,将导致端口被占用的错误。

    用java语言编写测试样例

    首先确保自己的jdk版本在1.8及其以上,并且调整项目的编译版本为1.8,因为1.8以下的版本不支持lambda 表达式

    idea的工具中,file--》project-structure--》Language Level

    1 2

    这样spark样例的写法就可以正确解析了:如下

    打包我们的本地程序上传到装有spark服务的服务器中:

    打包的时候就会发现,maven也要配置1.8的jdk才能打包成功:

    配置maven的编译版本1.8

    执行自己编写的jar包

    spark-submit --class "com.sc.spark.SparkApp" --master local[4] /usr/spark/spark-2.1.1-bin-hadoop2.6/examples/jars/bigdata-1.1.1-jar-with-dependencies.jar

    在yarn上执行自己的jar

    spark-submit --class com.sc.sparksql.RDD2DataFrame --master yarn --deploy-mode client /usr/spark-2.1.1-bin-hadoop2.6/examples/jars/bigdata-1.1.1-jar-with-dependencies.jar

    spark-defaults.conf配置文件

    配置spark的日志生成到hdfs上去

    spark.eventLog.enabled=true

    spark.eventLog.compress=true

    #保存在本地#

    spark.eventLog.dir=file:///usr/local/hadoop-2.7.6/logs/userlogs

    #spark.history.fs.logDirectory=file:///usr/local/hadoop-2.7.6/logs/userlogs

    #保存在hdfs上

    spark.eventLog.dir=hdfs://spark-master:9000/tmp/logs/root/logs

    spark.history.fs.logDirectory=hdfs://spark-master:9000/tmp/logs/root/logs

    yarn-site.xml

    <!-- 是否开启聚合日志 --> 

    <property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

    </property> 

    <!-- 配置日志服务器的地址,work节点使用 --> 

    <property> 

    <name>yarn.log.server.url</name>

    <value>http://spark-master:19888/jobhistory/logs/</value>

    </property> 

    <!-- 配置日志过期时间,单位秒 --> 

     <property>

    <name>yarn.log-aggregation.retain-seconds</name>

    <value>86400</value>

    </property> 

    启动

    1.首先启动 hadoop的jobhistory

    [root@spark-master hadoop-2.7.6]# 

    sbin/mr-jobhistory-daemon.sh   start   historyserver

    2.启动spark的history-server

    [root@spark-master spark-2.3.0]# 

    sbin/start-history-server.sh

    spark-shell加载文件

    从spark-shell所在机器目录读取文件:
    scala> val acclog = sc.textFile("file:///usr/hadoop/testdata/access-kf0911.log")

    从spark-shell所以来的hdfs上读取文件:

    scala> val acclog = sc.textFile("/usr/hadoop/testdata/access-kf0911.log")

    获取acclog的第一行数据:

    查看数据结构化信息:

    解析嵌套的json文件

    如果想要全部展示省略的部分就在show方法里传入一个参数为false,例如:df.show(false)

    加载外部数据源:

    加载Parquet格式数据:

    spark.read.format("parquet").load("file///usr/textdata/test.parquet");//加载本地文件

    spark.read.format("parquet").load("hdfs://usr/textdata/test.parquet");//加载hdfs上的文件

    DataFrame和RDD的区别

    DataFrame(等同于关系性数据库的表格结构)=RDD+Schema(表的名字、字段、类型等)

    DataFrame在底层是用Catalyst来优化的,并且比RDD多了Schema信息。

    DataFrame可以处理的数据类型有:text,json,Parquet,外部数据源等。    

    我们操作数据不论用SQl方式还是用API的方式来处理,最后都转化成Catalyst optimized优化执行引擎来处理,效率都是一样的。

    Schema特点

    Schema信息分为两种包含方式,一种是隐式,一种是显式的包含。

    显式的一般由json、Parquet格式的数据文件本来就有Schema信息。text数据就没有schema信息,必须指定Schema信息。指定Schema信息的步骤分为以下三个步骤

    第一步:Create an RDD of Rows from the original RDD;

    第二步:Create the schema represented by a StructType matching the structure of Rows in the RDD created in Step 

    第三步:Apply the schema to the RDD of Rows via createDataFrame method provided by SparkSession.

    为txt格式的数据指定schema信息

    如何把我们计算后的数据存储起来?

    df.select("name").write.format("parquet").mode("overwrite").save("hdfs:/路径");//存放到hdfs中

    df.select("name").write.format("parquet").mode("overwrite").save("file:///路径");//存放到服务器本地

    如何处理json数据

    json数据是一种非常易读的数据格式,而且是一行一行的存储,并且它已经具备了schema信息了。

    如果你想把json的数据进行抽离,通常我们用explode方法来操作

    如果你想对内嵌的json数据进行访问,你可以用“.”的方式来访问

    如果想访问数据里的数据,需要使用角标,索引从0开始

    对嵌套性的数据处理

    spark sql的覆盖率

    spark2.0以上版本,已经完全支持sql 2003的sql特性、可以执行99%的TPC-DS测试查询、子查询也可以支持、支持向量化(每次可以读取1024行,降低读取次数,提升查询速度)

    spark sql支持的外部数据源

    1)关系型数据库的数据,需要导入jdbc jars

    2)Parquet、Phoenix、csv、avro、etc

    有一个spark支持所有的数据源的网站

    https://spark-packages.org

    常见问题

    使用spark-submit命令执行自己的jar包时,报了如下错误,我一看原来是我的spark-defaults.conf文件中的给spark配置的日志存放路径给hadopps的用户路径冲突了,本来是想复用现成的userlogs目录来使用,结果人家不让,所以我就改了另外的目录。

    常见问题2:

    local 本地单线程在写spark程序的时候,许多人会遇到以下这个报错,包括我自己也遇到过,当时郁闷了很久

    报错说在配置中必须设置一个master URL.但是我明明在提交应用的时候设置了–master呀,为什么说我没有,于是非常惊讶,怀疑是不是计算机自己疯掉了。

    其实这是初学者很容易犯的错误,原因在于没有真正理解spark分布式或伪分布式的运行原理。出错的小伙伴往往把创建spark实例,或者sc.textFile读取数据等放在了main函数的外面。像下面这样写是错误的:

    在伪分布式中,一个spark 应用对应了一个main函数,放在一个driver里,driver里有一个对应的实例(spark context).driver 负责向各个节点分发资源以及数据。那么如果你把创建实例放在了main函数的外面,driver就没法分发了。所以如果这样写在local模式下是可以成功的,在分布式就会报错。(好吧,解释地有点直白和不专业)

    所以正确的写法应该是这样:

    def main(args: Array[String]) {

      val sparkConf = new SparkConf().setAppName("XXXX")

      val sc = new SparkContext(sparkConf)

    }

    问题3:

    org.apache.spark.sql.Row对象中取值,如果使用get方法,索引是从0开始的

    spark 的运行写入mysql库程序时,需要先把依赖的mysql的jdbc的驱动加入刀$SPARK_HOME/jars中。

    如果害怕任务吃掉内存,导致服务崩溃,最好配置驱动内存和运行内存

    spark-submit --class com.lppz.ReadToPvProvcity --master yarn --driver-memory 4g --executor-memory 2g --executor-cores 1 /home/hadoop/waimai/selfjars/execData-1.1-SNAPSHOT.jar ${DATE_DH}

    相关文章

      网友评论

          本文标题:linux下安装spark

          本文链接:https://www.haomeiwen.com/subject/gioynftx.html