SparkSQL read Elasticsearch ClassNotFoundException
来源:互联网 发布:jackson list转json 编辑:程序博客网 时间:2024/06/03 06:38
环境
问题描述:
现在有一个Elasticsearch集群,需要使用SparkSQL直接连接进行读取,参考Elasticsearch官网代码,直接编写下面的程序进行读取(在Windows上编写程序,提交到远程Spark Standalone集群):
public class TestDirectReadForQuery { public static void main(String[] args){ String esTable = "twitter/doc"; // String query = "select * from "+esTable+" limit 10"; HashMap<String, String> options = new HashMap<String, String>(); options.put("es.nodes", "192.168.0.78"); // ES环境IP之一 options.put("es.port", "9200"); // ES环境端口 options.put("es.read.metadata", "false"); options.put("es.mapping.date.rich", "false"); //必须,否则日期字段转换报错 SparkConf conf = new SparkConf(); conf.set("spark.master", "spark://server2.tipdm.com:7077"); conf.set("spark.app.name", "read es table "); conf.set("spark.executor.memory","1g"); // 建议不小于z"1g" conf.set("spark.executor.cores","2"); conf.set("spark.cores.max","2"); JavaSparkContext sc = new JavaSparkContext(conf); SQLContext sqlContext = new SQLContext(sc); String q = "?q=*:*"; // 支持queryString语法的过滤(若不使用过滤器则无需修改) // ES中的索引名(即需要映射的表名),可通过访问http://10.16.15.8:9200/_plugin/head,了解珠江数码环境表命名方式、数据结构等 String sparkSqlTable = "tmp"+System.currentTimeMillis(); // 映射为sparkSql中的表名 DataFrame esDF = JavaEsSparkSQL.esDF(sqlContext, esTable, q, options); esDF.registerTempTable(sparkSqlTable); Row[] rows = sqlContext.sql(query.replace(esTable,sparkSqlTable)).collect(); System.out.println(Arrays.toString(rows)); }
问题解决
执行完成后,报下面的错误:
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.spark.rdd.EsPartition
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
从错误来看,应该是Classpath的原因,spark在执行查询的时候,需要拿到Elasticsearch-spark的class,所以需要把其jar包添加到Classpath中,比较方便的做法是:
SparkConf conf = new SparkConf(); conf.set("spark.master", "spark://server2.tipdm.com:7077"); conf.set("spark.app.name", "read es table "); conf.set("spark.executor.memory","1g"); // 建议不小于z"1g" conf.set("spark.executor.cores","2"); conf.set("spark.cores.max","2"); conf.set("spark.jars","/path/to/elasticsearch-spark_2.10-2.3.2.jar");
添加elasticsearch-spark_2.10-2.3.2.jar jar包所在路径即可。
阅读全文
0 0
- SparkSQL read Elasticsearch ClassNotFoundException
- SparkSQL Driver ClassNotFoundException的解决方案
- Spark学习总结三 SparkSql操作elasticsearch
- sparkSQL
- SparkSQL
- SparkSQL
- SparkSQL
- sparksql 从oracle读取数据然后整合到elasticsearch
- ClassNotFoundException
- ClassNotFoundException
- ClassNotFoundException
- classnotfoundexception
- ClassNotFoundException
- ClassNotFoundException
- ClassNotFoundException
- ClassNotFoundException
- ClassNotFoundException
- classnotfoundException
- 在github上快速创建文件夹以及生成链接的详尽步骤
- 入门到放弃node系列统一声明
- 关于使用thinkPHP3.2使用union会出现分页不对的问题
- 基于openwrt系统的小米路由器创建自启动脚本
- Java HashMap Learning
- SparkSQL read Elasticsearch ClassNotFoundException
- Hadoop备忘:Reduce阶段Iterable<VALUEIN> values中的每个值都共享一个对象
- 你真的会使用XMLHttpRequest吗?
- 不同环境(配置文件)下的项目发布
- python操作redis
- 序列化和Stack应用于UGUI(Unity 扩展)(瞎稿)
- sublime Text3安装到破解详解
- 一定要记住的任务
- Openstack使用官方ubuntu和Centos镜像