分享

想用scala程序操作spark时遇到了问题

395455030 发表于 2016-1-12 11:14:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 15 26351
1、 新装完spark后,运行bin/spark-shell时出现错误“Call From master151/192.168.203.151 to master151:8021 failed on connection exception”,spark默认应该是读取本地文件系统的,我疑惑它是怎么读到hadoop的。
    本来是连接端口8020错误,我试一下在hadoop配置文件改为8021端口就是上面的错误。我把hadoop关了,环境变量里和hadoop有关的都删了还是这样的错误。显然这里读到hadoop的有关配置了,我都没在哪里说hadoop的安装路径,spark是怎么知道hadoop的配置文件放在哪的?
2、 同样的,写操作hadoop的java程序时,一句“Configuration conf=new Configuration();”就读到hadoop的配置信息了,我整个java程序都没有在哪里写hadoop的安装路径,程序只凭这一句就能找到hadoop的配置文件?
3、 写一个操作hadoop的java程序,可以用hadoop运行它,也可以直接用java -cp $CLASSPATH Program运行程序。写一个操作spark的scala程序,用spark-submit运行可以,用scala -cp $CLASSPATH Program报错:
    “ERROR spark.SparkContext: Error initializing SparkContext.
java.lang.NoSuchMethodException: akka.remote.RemoteActorRefProvider.<init>(java.lang.String, akka.actor.ActorSystem$Settings, akka.event.EventStream, akka.actor.Scheduler, akka.actor.DynamicAccess)”。
    初始化SparkContext错误,我还真不懂怎么初始化这个,
“val conf = new SparkConf().setAppName("Simple Application").setMaster("local")
val sc = new SparkContext(conf)”
    这么初始化对吗?

已有(15)人评论

跳转到指定楼层
regan 发表于 2016-1-12 20:10:49
395455030 发表于 2016-1-12 19:28
什么意思?比如我原来有一个这样的java程序。
class Program
{

spark数据清洗,机器学习,大量的迭代计算。SparkStreaming流处理,分布式解码。
java和scala编写的代码都是基于JVM的,都会编译成class文件,都可以使用spark-submit都是。我没有用java,我们使用scala。你把你的调用spark-submit的日志粘出来看看

回复

使用道具 举报

regan 发表于 2016-1-12 12:37:28
第一个问题:
     在配置spark的时候,会配置export HADOOP_CONF_DIR=/home/yun/softwares/hadoop-2.6.0/etc/hadoop,这个地方配置了hadoop配置路径
第二个问题:
   Spark中配置文件的读取使用的是Typesafe库,默认加载根目录下的application.{json,conf,properties}文件,如果没有,那会直接读取默认的配置文件reference.conf。new Configuration()就是读取的默认配置,默认配置里面能够读取到hadoop配置文件
第三个问题:
    spark初始化:
     val conf = new SparkConf().setMaster("local")
    val sc = new SparkContext(conf)
    这样初始化是OK的,看看你master写对没有。
哥哥只能帮你到这里了!!!

回复

使用道具 举报

395455030 发表于 2016-1-12 13:36:27
regan 发表于 2016-1-12 12:37
第一个问题:
     在配置spark的时候,会配置export HADOOP_CONF_DIR=/home/yun/softwares/hadoop-2.6.0/ ...

1、你说的可是spark-env.sh里的东西?我刚解压出的spark,这个文件还没配,这怎么知道HADOOP_CONF_DIR的?难道有默认值?
2、这个问题要牵扯到spark吗?这就是一个纯hadoop的问题。new Configuration()是去哪里读配置文件的?都没有哪里写路径。
3、“master写对没有”什么意思?哪里看?不是“setMaster”那个东西吗?用spark-submit是可以正确运行的。

回复

使用道具 举报

regan 发表于 2016-1-12 14:16:15
395455030 发表于 2016-1-12 13:36
1、你说的可是spark-env.sh里的东西?我刚解压出的spark,这个文件还没配,这怎么知道HADOOP_CONF_DIR的 ...

第一:我说的是spark-env.sh里面的东西。你没有配置,是这个问题,首先,你的集群有几个节点?运行spark-shell的时候启动了spark了吗?启动spark会先启动master,和worker的。都没有启动spark服务,运行spark-shell有用吗?
第二:hadoop加载配置文件,如果没有指定路径。也是加载默认配置文件。哎,哥们儿,你打开hadoop的jar看看嘛,都有默认文件的.hdfs-default.xml,core-default.xml。不提供默认配置,程序怎么运行?人家hadoop不会提供给你一个不能运行的程序,你要定制,那你就配置自己的配置文件。
第三:master就是setMaster方法里面填写的参数,根据master指定运行模式(standalone,mesos,yarn,local)


回复

使用道具 举报

395455030 发表于 2016-1-12 14:58:26
regan 发表于 2016-1-12 14:16
第一:我说的是spark-env.sh里面的东西。你没有配置,是这个问题,首先,你的集群有几个节点?运行spark- ...

1、hadoop有3个节点,但我现在用spark不想把hadoop牵扯进来。spark就用local模式,local是不用开master和slave,且不用做任何配置的吧。我试了下把hadoop-2.7.1文件夹改为hadoop-2.7.12就不会报错而使用本地文件系统,都不知道哪里指定了hadoop-2.7.1的路径。
2、new Configuration()获得的可是etc/hadoop的hdfs-site.xml,core-site.xml里的配置,不是hdfs-default.xml,core-default.xml的,还有hdfs-default.xml,core-default.xml在哪里?
3、master我设置为local没错吧?你可试过不用spark-submit,用scala直接运行程序?


回复

使用道具 举报

regan 发表于 2016-1-12 16:38:52
395455030 发表于 2016-1-12 14:58
1、hadoop有3个节点,但我现在用spark不想把hadoop牵扯进来。spark就用local模式,local是不用开master和 ...

1.是不是配置了hadoop环境变量,清了环境变量source重试,如果还是那就要问问你了
2.新解压出来的hadoop配置文件hdfs-site.xml,core-site.xml里面时没有任何配置的,先加载XXX-default.xml文件,如果你配置了,配置的将会覆盖默认的。路径:打开jar包看,一般在根目录下
3.没错,没尝试过,因为必定会有未知的坑,别人已经走了一条路出来,你还要另辟蹊径,那我在此祝你好运。

回复

使用道具 举报

395455030 发表于 2016-1-12 17:39:43
regan 发表于 2016-1-12 16:38
1.是不是配置了hadoop环境变量,清了环境变量source重试,如果还是那就要问问你了
2.新解压出来的hadoop ...

你们都是用spark-submit的吗?这就意味着必须使用spark运行主函数。如果在其他地方已经做好一个java程序,想要调用spark一下,这还怎么使用spark-submit?
回复

使用道具 举报

395455030 发表于 2016-1-12 19:28:14

什么意思?比如我原来有一个这样的java程序。
class Program
{
  public static void main(String[] args)
  {
    初始化
    while(true)
    {
      if(条件){
        数据处理
      }
    }
  }
}
      可能工程实际会很大,用java Program命令可以启动程序。数据处理原来可能是调用
自己写的函数或oracle的函数,现在想换成用spark。理想的,在这个地方调用一个
函数比如CallSpark(),原程序其他地方都不用改这样就很方便,现在spark程序不用
spark-submit还调用不了,有什么简单的解决办法?
      你用spark都做些什么,没有遇到这样的问题吗?
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条