繁体   English   中英

Tableau + Spark SQL连接器+ Java Spark数据框架

[英]Tableau + Spark SQL Connector + Java Spark Data Frames

我需要使用Tableau对某些数据执行BI分析。 数据存储在Cassandra数据库中,其中有一列包含动态JSON数据,Tableau无法直接对其进行解析。

Spark作业将使用Java运行,连接到Cassandra数据库,然后执行所需的计算,以将每种JSON类型映射到将要存储的新表。

我设法启动了一个旧服务器,并使用Tableau连接到它,这里没有问题

问题:尽管我确实存储了表,并且能够在Java输出控制台中看到它们,但是在连接到Thrift Server的Tableau中寻找它们时,我实际上看不到创建的表。

经过一番阅读后,我设法找到了Thrift Server和这些Spark Jobs都需要连接到相同的远程配置单元,但是我似乎找不到要申请的设置。 之所以会这样,是因为Thrift-server Shell脚本是在上下文中执行的,而Java代码是在另一个上下文中(虽然是在同一台机器上)执行的,所以我猜HDFS目录是不同的。

一些代码:

public static void main(String[] args) {
    SparkConf config = new SparkConf()
            .setMaster("spark://Andres-MacBook-Air.local:7077")
            .set("spark.sql.warehouse.dir", "/tmp/spark-tests")
            .setAppName("tests");

    SparkContext ctx = new SparkContext(config);
    SparkSession session = new SparkSession(ctx);
    SQLContext sqlCtx = new SQLContext(session);

    Dataset<Row> emptyDataSet = session.createDataFrame(new ArrayList<>(), getSchema());
    emptyDataSet.show();


    sqlCtx.registerDataFrameAsTable(emptyDataSet, "tests");
    emptyDataSet.cache();

    System.out.println("*******");

    Dataset<Row> row = sqlCtx.sql("SHOW TABLES IN `default`");
    row.show();

    while (true) {

    }
}

private static StructType getSchema() {

    String schemaString = "column1 column2 column3 column4 column5";

    List<StructField> fields = new ArrayList<>();

    StructField indexField = DataTypes.createStructField("column0", DataTypes.LongType, true);
    fields.add(indexField);

    for (String fieldName : schemaString.split(" ")) {
        StructField field = DataTypes.createStructField(fieldName, DataTypes.StringType, true);
        fields.add(field);
    }

    StructType schema = DataTypes.createStructType(fields);

    return schema;
}

spark-thrift服务器连接到相同的spark master,并且我发出以下命令来启动它:

sbin/start-thriftserver.sh --master spark://Andres-MacBook-Air.local:7077 --conf spark.sql.warehouse.dir=/tmp/spark-tests --hiveconf hive.server2.thrift.port=10000

以下是我在Maven项目中使用的以下依赖项:

    <dependencies>
    <!-- Apache Spark -->
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>    

    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.2.1</version>
    </dependency>    

    <!-- Spark - Cassandra connector -->
    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.11</artifactId>
        <version>2.0.6</version>
    </dependency>
</dependencies>

我正在使用OSX并在本地运行spark:spark-2.2.1-bin-hadoop2.7

提前致谢。

获取一个mysql数据库(端口3306),启动hive metastore进程(端口9083),启动hiveserver2进程(端口10000),然后将hive-site.xml从hive文件夹复制到spark文件夹,并启动spark thrift服务器进程(端口10002)。 需要mysql存储配置单元表的元数据(模式/表/列名称,数据类型,分区)。

这些链接可以帮助:

https://mapr.com/docs/52/Spark/SparkSQLThriftServer.html https://www.cloudera.com/documentation/enterprise/5-6-x/topics/cdh_ig_hive_metastore_configure.html https://heshamrafi.wordpress。 com / 2017/08/16 / install-hive-and-configure-mysql-for-metadata / https://www.guru99.com/installation-configuration-hive-mysql.html https://developer.ibm.com / hadoop / 2016/08/22 / how-to-run-queries-on-spark-sql-using-jdbc-via-thrift-server /

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM