spark开发必备

20 篇文章 0 订阅
11 篇文章 2 订阅

本篇文章为自己总结,都是干货和精华。其中有许多文章引用,我直接粘贴在代码里,请注意。

 

 

 

 

 

1.idea集成开发环境
https://blog.csdn.net/u012373815/article/details/53266301

2.报错:
scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps
解决办法:
https://blog.csdn.net/weixin_42129080/article/details/80961878

3.报错
ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
解决办法:

(1)下载工具

hadoop2.2版本可以在这里下载https://github.com/srccodes/hadoop-common-2.2.0-bin

hadoop2.6版本可以在这里下载https://github.com/amihalik/hadoop-common-2.6.0-bin

(2)配置环境变量

①增加系统变量HADOOP_HOME,值是下载的zip包解压的目录,我这里解压后将其重命名为hadoop-common-2.6.0

②在系统变量path里增加%HADOOP_HOME%\bin

作者:PunkP
链接:https://www.jianshu.com/p/55d36c47cc33
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

4.报错
ERROR SparkContext: Error initializing SparkContext.
org.apache.spark.SparkException: Could not parse Master URL: '192.168.10.166'


5.执行:
./spark-submit --class bi.demo.MySpark --master localhost:7077 /home/zybigdata/bak/bi.jar

首先找到spark的bin目录,使用脚本   whereis spark
其次,上传jar文件,到linux目录
最后确定class的主类:bi.demo.MySpark


6.spark结合hive开发
参考:http://dblab.xmu.edu.cn/blog/1086-2/

首先来测试是否有hive:
cd /usr/local/spark
./bin/spark-shell
Shell 命令
这样就启动进入了spark-shell,然后在scala命令提示符下输入:

scala> import org.apache.spark.sql.hive.HiveContext
<console>:25: error: object hive is not a member of package org.apache.spark.sql
         import org.apache.spark.sql.hive.HiveContext
                                     ^
scala
看到了吧,会返回错误信息,也就是spark无法识别org.apache.spark.sql.hive.HiveContext,这就说明你当前电脑上的Spark版本不包含Hive支持。

如果你当前电脑上的Spark版本包含Hive支持,那么应该显示下面的正确信息:

scala> import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.HiveContext


其次来测试一把用spark操作hive吧。
scala> import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.HiveContext

scala> val hiveCtx = new HiveContext(sc)
warning: there was one deprecation warning; re-run with -deprecation for details
hiveCtx: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@1d67348a

scala>  val studentRDD = hiveCtx.sql("show databases").rdd
studentRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[3] at rdd at <console>:27

scala>  val studentRDD = hiveCtx.sql("select * from zy_dm.dm_prod_profit_dtl_tc_d limit 10").rdd
studentRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[13] at rdd at <console>:27

scala> studentRDD.foreach(t => print("org_id"+t(3)))
org_id201809org_id201802org_id201806org_id201801org_id201805org_id201803org_id201804org_id201806org_id201804org_id201804
scala> 


7.操作hive
接下来开始尝试测试操作hive

package bi.spark4Hive

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.hive.HiveContext

object Spark4Hive {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setAppName("test").setMaster("local")
    val sc = new SparkContext(conf)
    val sqlContext = new HiveContext(sc)
    sqlContext.table("zy_dm.dm_prod_profit_dtl_tc_d") // 库名.表名 的格式
      .registerTempTable("tmp_dm_prod_profit_dtl_tc_d")  // 注册成临时表
    sqlContext.sql(
      """
        | select *
        |   from tmp_dm_prod_profit_dtl_tc_d
        |  limit 10
      """.stripMargin).show()
    sc.stop()


  }
}


[zybigdata@etl /usr/local/spark/bin]$  ./spark-submit --class bi.spark4Hive.Spark4Hive --master localhost:7077 /home/zybigdata/bak/bi.jar
+----------+---------+------+------+----------------+------------------+------------+
|snapt_date|model_ind|org_id|cur_ym|prod_category_id|prod_category_name|gross_profit|
+----------+---------+------+------+----------------+------------------+------------+
|2018-10-14|        0|     1|201809|               4|                体检|     0.00000|
|2018-10-14|        0|     5|201802|               1|                其他|904227.25000|
|2018-10-14|        0|     5|201806|               2|              人事代理| 25477.00000|
|2018-10-14|        0|    12|201801|               1|                其他|603420.36000|
|2018-10-14|        0|    12|201805|               2|              人事代理|     0.00000|
|2018-10-14|        0|    26|201803|               2|              人事代理|  8360.00000|
|2018-10-14|        0|    36|201804|               4|                体检|     0.00000|
|2018-10-14|        0|   375|201806|               3|              工资服务| 17171.37000|
|2018-10-14|        0|  2989|201804|               2|              人事代理|     0.00000|
|2018-10-14|        0|  5607|201804|               1|                其他|  8100.00000|
+----------+---------+------+------+----------------+------------------+------------+

[zybigdata@etl /usr/local/spark/bin]$ 

8.sql太长了,跑任务报错
18/10/15 15:01:16 WARN Utils: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.debug.maxToStringFields' in SparkEnv.conf.
[Stage 7:=============================>                             (1 + 1) / 2]18/10/15 15:04:17 ERROR Utils: Aborting task
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.IllegalArgumentException: No enum constant org.apache.hadoop.io.SequenceFile.CompressionType.block
    at org.apache.hadoop.hive.ql.io.HiveFileFormatUtils.getHiveRecordWriter(HiveFileFormatUtils.java:249)
    at org.apache.spark.sql.hive.execution.HiveOutputWriter.<init>(HiveFileFormat.scala:123)
    at org.apache.spark.sql.hive.execution.HiveFileFormat$$anon$1.newInstance(HiveFileFormat.scala:103)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$SingleDirectoryWriteTask.newOutputWriter(FileFormatWriter.scala:305)
    at org.apache.spark.sql.execution.datasources.FileFormatWriter$SingleDirectoryWriteTask.execute(FileFormatWriter.scala:314)


    
    解决办法:
    

    /usr/local/spark/bin/spark-submit --conf spark.debug.maxToStringFields=100 --class bi.spark4Hive.Spark4Hive_test04 --master localhost:7077 /home/zybigdata/jar/bi.jar
    

    
    python脚本
    

9.好多报错总结,很好的博文
https://www.cnblogs.com/qifengle-2446/p/6424377.html
https://www.cnblogs.com/hadoop-dev/p/6742677.html


hive目录
/usr/lib/hive

hive配置路径
/usr/lib/hive/conf

hive的jar路径
/home/zybigdata/lib

spark依赖jar包
/usr/local/spark/jars/mysql-connector-java-5.1.34-bin.jar

spark写东西到pg中

https://blog.csdn.net/dream_an/article/details/54962464

10.spark 的set local
setMaster("local")可以运行,但是设置成setMaster("local[3]")或setMaster("local[*]")则报错。

一、Spark中本地运行模式
Spark中本地运行模式有3种,如下

(1)local 模式:本地单线程运行;
(2)local[k]模式:本地K个线程运行;
(3)local[*]模式:用本地尽可能多的线程运行。


11.spark日志级别设置
https://blog.csdn.net/a123demi/article/details/72821488


12.spark dataframe 操作介绍
https://www.cnblogs.com/rxingyue/p/7113235.html

13.所有hadoop、spark集群搭建。
https://www.cnblogs.com/purstar/p/6293605.html
该文档为spark集群搭建文档

14.spark Scala中的Implicit详解
https://www.jianshu.com/p/1d119c937015

Scala在面对编译出现类型错误时,提供了一个由编译器自我修复的机制,编译器试图去寻找
一个隐式implicit的转换方法,转换出正确的类型,完成编译。这就是implicit 的意义。

注意!
需要注意的是,进一步简化之后,代码的可读性有所损失,调用方并不知道startServer需要一个隐式的
配置对象,要么加强文档说明,要么选用显式的申明,这种权衡需要团队达成一致。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值