【开发案例】Fiber案例:使用Fiber无缝访问Spark SQL/Hive/HBase

[复制链接]
发表于 : 2018-5-29 10:12:11 最新回复:2019-08-29 11:18:27
2208 4
lWX387225
lWX387225  新锐

Fiber案例:使用Fiber无缝访问Spark SQL/Hive/HBase

1.1 场景说明

适用版本

FusionInsight HD V100R002C70FusionInsight HD V100R002C80

场景说明

用户可以使用Fiber提供的统一JDBC驱动接口使用多种SQL引擎去连接相应的Server,并且在应用程序中,用户可以通过命令指定使用哪种SQL引擎来执行SQL语句。

本样例代码讲解顺序为:

1.         建立连接。

注册Fiber Driver类,创建Connection对象和Statement对象。

2.         通过Fiber访问Spark SQL

使用Fiber Driver连接Spark JDBC服务器,执行Spark SQL相关命令进行数据表的创建、数据加载、查询和删除。

3.         通过Fiber访问Hive

使用Fiber Driver连接Hive Thrift Server,执行Hive相关命令进行数据表的创建、数据加载、查询和删除。

4.         通过Fiber访问HBase

使用Fiber Driver连接HBase,执行Phoenix SQL进行数据表的创建、插入数据、查询和删除。

5.         关闭连接。

关闭结果集,关闭Statement,关闭连接。

数据规划

1.         通过Fiber访问Spark SQL的操作步骤。

a.         确保以Spark JDBC服务正常启动,并正常提供服务。

b.         创建“spark_data.txt”文件,内容如下:

1,spark_name1,company1
2,spark_name2,company2
3,spark_name3,company3

c.         上传“spark_data.txt”至HDFS。命令如下:

hadoop fs -put spark_data.txt /tmp/

2.         通过Fiber访问Hive的操作步骤。

a.         确保以Hive Thrift Server服务正常启动并正常提供服务。

b.         创建“hive_data.txt”文件,内容如下:

1,hive_name1,company1
2,hive_name2,company2
3,hive_name3,company3

c.         上传“hive_data.txt”至HDFS

hadoop fs -put hive_data.txt /tmp/

3.         通过Fiber访问HBase的操作步骤。

样例中会插入数据进行查询,数据为:

101,phoenix_user1,company1
102,phoenix_user2,company2
103,phoenix_user3,company3

1.2 开发思路

开发思路

1.         通过Fiber访问Spark SQL的开发思路。

a.         default数据库下创建tb_spark表。

b.         把“/tmp/spark_data.txt”的数据加载进tb_spark表中。

c.         查询tb_spark表中的数据。

d.         删除tb_spark表。

2.         通过Fiber访问Hive的开发思路。

a.         default数据库下创建tb_hive表。

b.         把“/tmp/hive_data.txt”的数据加载进tb_hive表中。

c.         查询tb_hive表中的数据。

d.         删除tb_hive表。

3.         通过Fiber访问HBase的开发思路。

a.         default数据库下创建tb_phoenix表。

b.         把数据插入tb_phoenix表中。

c.         查询tb_phoenix表中的数据。

d.         删除tb_phoenix表。

1.3 样例代码说明

JAVA样例代码

l   建立连接

注册Fiber JDBC Driver,创建一个连接,创建一个Statement

如下是代码片段,详细代码请参考com.huawei.fiber.example中的FiberJDBCExample类。

    //1.检查输入的参数。
    if (args.length != 3) 
    {
      System.err.println("The number of parameter should be three.");
      System.err.println("Usage:  cmd\"jdbc:fiber://fiberconfig=<fiber.xml_path>;defaultDriver=<driver_name>\" <spark_data_path> <hive_data_path>");
      System.exit(-1);
    }
     //2.解析输入的参数。
    //url:Fiber jdbc连接的url
    //sparkDataPath:样例中tb_spark表的文本数据路径,样例会将该文本数据加载到tb_spark表。
    //hiveDataPath:样例中tb_hive表的文本数据路径,样例会将该文本数据加载到tb_hive表中。
    String url = args[0];
    String sparkDataPath = args[1];
    String hiveDataPath = args[2];
    //3.注册Fiber Driver
    Class.forName("com.huawei.fiber.FiberDriver");
    
    Connection conn = null;
    Statement stmt = null;    
    ResultSet rs = null;
    //4.创建FiberConnection,创建一个Statement.
    conn = DriverManager.getConnection(url);
    stmt = conn.createStatement();

l   通过Fiber访问Spark SQL

使用FiberJDBC接口连接Spark JDBC服务器,执行Spark SQL相关命令进行数据表的创建、数据加载、查询和删除,并返回结果。

l   切换至Spark执行引擎。

//1.切换至Spark执行引擎。
stmt.execute("set fiber.execution.engine = spark");

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过conn.createStatement就得到FiberStatement

Statement stmt = conn.createStatement();
stmt.execute("set fiber.execution.engine = spark");

示例2

PreparedStatement  stmt = conn.prepareStatement("set fiber.execution.engine = spark");
stmt.execute();

l   执行SQL语句并打印结果。

try {
        //2.tb_spark数据表存在则删除。
        stmt.execute("DROP TABLE IF EXISTS tb_spark");
        //3.创建tb_spark数据表。
        stmt.execute("CREATE TABLE IF NOT EXISTS tb_spark(Id INT, Name String, Company String)" +
          " row format delimited fields terminated by \",\" STORED AS TEXTFILE");
        stmt.execute("load data inpath '" + sparkDataPath + "' overwrite into table tb_spark");
        //4.查询tb_spark的记录数。  
        stmt.execute("select count(*) from tb_spark");
        rs = stmt.getResultSet();
        System.out.println("--------- count of tb_spark--------");
        System.out.println("| count |");
        while (rs.next()) {
          long cnt = rs.getLong(1);
          System.out.println("| " + cnt + " |");
        }
        //5.查询tb_spark的内容。
        stmt.execute("select * from tb_spark");
        rs = stmt.getResultSet();
        System.out.println("---------content of tb_spark--------");
        System.out.println("| id | name | company |");
        while (rs.next()) {
          int id = rs.getInt(1);
          String name = rs.getString(2);
          String company = rs.getString(3);
          System.out.println("|  " + id + " | " + name + " | " + company + " | ");
        }
      } catch (SQLException e) {
        System.out.println("Exception happened when engine is spark. " + e.getMessage());
      } finally {
        stmt.execute("DROP TABLE IF EXISTS tb_spark");
      }

l   通过Fiber访问Hive

使用FiberJDBC接口连接Hive Thrift Server,执行Hive相关命令进行数据表的创建、数据加载、查询和删除,并返回结果。

l   切换至“hive”执行引擎。

//1.切换至“hive”执行引擎。
stmt.execute("set fiber.execution.engine = hive");

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过conn.createStatement就得到FiberStatement

Statement stmt = conn.createStatement();
stmt.execute("set fiber.execution.engine = spark");

示例2

PreparedStatement  stmt = conn.prepareStatement("set fiber.execution.engine = spark");
stmt.execute();

l   执行SQL语句并打印结果。

try {
        //2.tb_hive数据表存在则删除。
        stmt.execute("DROP TABLE IF EXISTS tb_hive");
        //3.创建tb_hive数据表。
        stmt.execute("CREATE TABLE IF NOT EXISTS tb_hive(Id INT, Name String, Company String)" +
          " row format delimited fields terminated by \",\" STORED AS TEXTFILE");
        stmt.execute("load data inpath '" + hiveDataPath + "' overwrite into table tb_hive");
        //4.查询tb_hive的记录数。  
        stmt.execute("select count(*) from tb_hive");
        rs = stmt.getResultSet();
        System.out.println("--------- count of tb_hive--------");
        System.out.println("| count |");
        while (rs.next()) {
          long cnt = rs.getLong(1);
          System.out.println("| " + cnt + " |");
        }
        //5.查询tb_hive的内容。
        stmt.execute("select * from tb_hive");
        rs = stmt.getResultSet();
        System.out.println("---------content of tb_hive--------");
        System.out.println("| id | name | company |");
        while (rs.next()) {
          int id = rs.getInt(1);
          String name = rs.getString(2);
          String company = rs.getString(3);
          System.out.println("|  " + id + " | " + name + " | " + company + " | ");
        }
      } catch (SQLException e) {
        System.out.println("Exception happened when engine is hive. " + e.getMessage());
      } finally {
        stmt.execute("DROP TABLE IF EXISTS tb_hive");
      }

l   通过Fiber访问HBase

使用FiberJDBC接口连接HBase,执行Phoenix SQL进行数据表的创建、插入数据、查询和删除操作,并返回结果。

l   切换至Phoenix(即HBaseSQL入口)执行引擎。

//1.切换至Phoenix执行引擎。
stmt.execute("set fiber.execution.engine = phoenix");

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过conn.createStatement就得到FiberStatement

Statement stmt = conn.createStatement();
stmt.execute("set fiber.execution.engine = spark");

示例2

PreparedStatement  stmt = conn.prepareStatement("set fiber.execution.engine = spark");
stmt.execute();

l   执行SQL语句并打印结果。

try {
        //2.tb_phoenix数据表存在则删除。
        conn.setAutoCommit(true);
        stmt.execute("DROP TABLE IF EXISTS tb_phoenix");
        //3.创建tb_phoenix数据表。
        stmt.execute("CREATE TABLE IF NOT EXISTS tb_phoenix(Id INTEGER not null primary key, Name VARCHAR(20), Company VARCHAR(20))");
        stmt.execute("UPSERT into tb_phoenix(Id, Name,Company) values (101,'phoenix_user1','company1')");
        stmt.execute("UPSERT into tb_phoenix(Id, Name,Company) values (102,'phoenix_user2','company2')");
        stmt.execute("UPSERT into tb_phoenix(Id, Name,Company) values (103,'phoenix_user3','company3')");
        //4.查询tb_phoenix的记录数。
        stmt.execute("select count(*) from tb_phoenix");
        rs = stmt.getResultSet();
        System.out.println("--------- count of tb_phoenix--------");
        System.out.println("| count |");
        while (rs.next()) {
          long cnt = rs.getLong(1);
          System.out.println("| " + cnt + " |");
        }
        //5.查询tb_phoenix的内容。
        stmt.execute("select * from tb_phoenix");
        rs = stmt.getResultSet();
        System.out.println("---------content of tb_phoenix--------");
        System.out.println("| id | name | company |");
        while (rs.next()) {
          int id = rs.getInt(1);
          String name = rs.getString(2);
          String company = rs.getString(3);
          System.out.println("|  " + id + " | " + name + " | " + company + " | ");
        }
      } catch (SQLException e) {
        System.out.println("Exception happened when engine is phoenix. " + e.getMessage());
      } finally {
        stmt.execute("DROP TABLE IF EXISTS tb_phoenix");
      }

l   关闭连接

关闭结果集,关闭Statement,关闭连接。

如下是代码片段,详细代码请参考com.huawei.fiber.example中的FiberJDBCExample类。

      //1.关闭结果集。
      try {
        if (null != rs)
          rs.close();
      } catch (SQLException e) {
          System.out.println("Exception happened when close ResultSet! " + e);
      }
      //2.关闭statement
      try {
        if (null != stmt)
          stmt.close();
      } catch (SQLException e) {
          System.out.println("Exception happened when close Statement! " + e);
      }
      //3.关闭连接。
      try {
        if (null != conn)
          conn.close();
      } catch (SQLException e) {
         System.out.println("Exception happened when close Connection! " + e);
      }

Scala样例代码

l   建立连接

注册Fiber JDBC Driver,创建一个连接,创建一个Statement

如下是代码片段,详细代码请参考com.huawei.fiber.example中的FiberJDBCExample类。

    //1.检查输入的参数。
    if (args.length != 3){
      System.err.println("The number of parameter should be three.")
      System.err.println("Usage:  cmd \"jdbc:fiber://fiberconfig=<fiber.xml_path>;defaultDriver=<driver_name>\" <spark_data_path> <hive_data_path>")
      System.exit(-1)
    }
    //2.解析输入的参数。
    //urlFiber jdbc连接的url
    //sparkDataPath:样例中tb_spark表的文本数据路径,样例会将该文本数据加载到tb_spark表。
    //hiveDataPath:例中tb_hive表的文本数据路径,样例会将该文本数据加载到tb_hive表中。
    val url: String = args(0)
    val sparkDataPath: String = args(1)
    val hiveDataPath: String = args(2)
    //3.注册FiberDriver
    Class.forName("com.huawei.fiber.FiberDriver")
    var connection: Option[Connection] = None
    var statement: Option[Statement] = None
    var resultSet: Option[ResultSet] = None
    //4.创建连接,创建一个Statement
    connection = Some(DriverManager.getConnection(url))
    statement = Some(connection.get.createStatement)

l   通过Fiber访问Spark SQL

使用FiberJDBC接口连接Spark JDBC服务器,执行Spark SQL相关命令进行数据表的创建、数据加载、查询和删除,并返回结果。

l   切换至Spark执行引擎。

//1.切换至Spark执行引擎。
statement.get.execute("set fiber.execution.engine = spark")

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过connection.get.createStatement就得到FiberStatement

statement = Some(connection.get.createStatement)
statement.get.execute("set fiber.execution.engine = spark")

示例2

statement = Some(connection.get.prepareStatement("set fiber.execution.engine = spark "))
statement.get.execute()

l   执行SQL语句并打印结果。

try {
        //2.tb_spark数据表存在则删除。
        statement.get.execute("DROP TABLE IF EXISTS tb_spark")
        //3.创建tb_spark数据表。
        statement.get.execute("CREATE TABLE IF NOT EXISTS tb_spark(Id INT, Name String, Company String)" +
          "row format delimited fields terminated by \",\" STORED AS TEXTFILE")
        statement.get.execute("load data inpath '" + sparkDataPath + "' overwrite into table tb_spark")
        //4.查询tb_spark的记录数。 
        statement.get.execute("select count(*) from tb_spark")
        resultSet = Some(statement.get.getResultSet)
        println("---------count of tb_spark--------")
        println(" | count |")
        while (resultSet.get.next()) {
          val cnt = resultSet.get.getLong(1)
          println(" | " + cnt + " | ")
        }
        //5.查询tb_spark的内容。
        statement.get.execute("select * from tb_spark")
        resultSet = Some(statement.get.getResultSet)
        println("---------content  of tb_spark--------")
        println(" | id | name | company |")
        while (resultSet.get.next()) {
          val id = resultSet.get.getInt(1)
          val name = resultSet.get.getString(2)
          val company = resultSet.get.getString(3)
          println(" | " + id + " | " + name + " | " + company + " | ")
        }
      } finally {
        statement.get.execute("DROP TABLE IF EXISTS tb_spark")
      }

l   通过Fiber访问Hive

使用FiberJDBC接口连接Hive Thrift Server,执行Hive相关命令进行数据表的创建、数据加载、查询和删除,并返回结果。

l   切换至“hive”执行引擎。

//1.切换至“hive”执行引擎。
statement.get.execute("set fiber.execution.engine = hive")

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过connection.get.createStatement就得到FiberStatement

statement = Some(connection.get.createStatement)
statement.get.execute("set fiber.execution.engine = spark")

示例2

statement = Some(connection.get.prepareStatement("set fiber.execution.engine = spark "))
statement.get.execute()

l   执行SQL语句并打印结果。

try{ 
        //2.tb_hive数据表存在则删除。
        statement.get.execute("DROP TABLE IF EXISTS tb_hive")
        //3.创建tb_hive数据表。
        statement.get.execute("CREATE TABLE IF NOT EXISTS tb_hive(Id INT, Name String, Company String)" +
          "row format delimited fields terminated by \",\" STORED AS TEXTFILE")
        statement.get.execute("load data inpath '" + hiveDataPath + "' overwrite into table tb_hive")
        //4.查询tb_hive表的记录数。
        statement.get.execute("select count(*) from tb_hive")
        resultSet = Some(statement.get.getResultSet)
        println("---------count of tb_hive--------")
        println(" | count |")
        while (resultSet.get.next()) {
          val cnt = resultSet.get.getLong(1)
          println(" | " + cnt + " | ")
        }
        //5.查询tb_hive的内容。
        statement.get.execute("select * from tb_hive")
        resultSet = Some(statement.get.getResultSet)
        println("---------content  of tb_hive--------")
        println(" | id | name | company |")
        while (resultSet.get.next()) {
          val id = resultSet.get.getInt(1)
          val name = resultSet.get.getString(2)
          val company = resultSet.get.getString(3)
          println(" | " + id + " | " + name + " | " + company + " | ")
        }
      } finally {
        statement.get.execute("DROP TABLE IF EXISTS tb_hive")
      }

l   通过Fiber访问HBase

使用FiberJDBC接口连接HBase,执行Phoenix SQL进行数据表的创建、插入数据、查询和删除操作,并返回结果。

l   切换至Phoenix(即HBaseSQL入口)执行引擎。

//1.切换至Phoenix执行引擎。
statement.get.execute("set fiber.execution.engine = phoenix")

说明

l  fiber.execution.engine”的值必须设置为Fiber配置文件中的“drivers”参数的其中一个driver名,Fiber配置文件是在用户运行Fiber样例程序的命令中指定的。

l  切换引擎语句只能通过FiberStatement类的execute方法、FiberPreparedStatement类的execute方法或executeUpdate方法来执行。例如:

示例1

//StatementFiberStatement的父类,通过connection.get.createStatement就得到FiberStatement

statement = Some(connection.get.createStatement)
statement.get.execute("set fiber.execution.engine = spark")

示例2

statement = Some(connection.get.prepareStatement("set fiber.execution.engine = spark "))
statement.get.execute()

l   执行SQL语句并打印结果。

try {
        //2.tb_phoenix数据表存在则删除。
        connection.get.setAutoCommit(true)
        statement.get.execute("DROP TABLE IF EXISTS tb_phoenix");
        //3.创建tb_phoenix数据表。
        statement.get.execute("CREATE TABLE IF NOT EXISTS tb_phoenix(Id INTEGER not null primary key, Name VARCHAR(20), Company VARCHAR(20))")
        statement.get.execute("UPSERT into tb_phoenix(Id,Name,Company) values (101,'phoenix_user1','company1')");
        statement.get.execute("UPSERT into tb_phoenix(Id,Name,Company) values (102,'phoenix_user2','company2')");
        statement.get.execute("UPSERT into tb_phoenix(Id,Name,Company) values (103,'phoenix_user3','company3')");
        //4.查询tb_phoenix的记录数。
        statement.get.execute("select count(*) from tb_phoenix")
        resultSet = Some(statement.get.getResultSet)
        println("---------count of tb_phoenix--------")
        println(" | count |")
        while (resultSet.get.next()) {
          val cnt = resultSet.get.getLong(1)
          println(" | " + cnt + " |")
        }
        //5.查询tb_phoenix的内容。
        statement.get.execute("select * from tb_phoenix")
        resultSet = Some(statement.get.getResultSet)
        println("---------content  of tb_phoenix--------")
        println(" | id | name | company |")
        while (resultSet.get.next()) {
          val id = resultSet.get.getInt(1)
          val name = resultSet.get.getString(2)
          val company = resultSet.get.getString(3)
          println(" | " + id + " | " + name + " | " + company + " | ")
        }
      } finally {
        statement.get.execute("DROP TABLE IF EXISTS tb_phoenix")
      }

l   关闭连接

关闭结果集,关闭Statement,关闭连接。

如下是代码片段。

      try {
        //1.关闭结果集。
        if (resultSet != null) {
          resultSet.get.close()
        }
      }
      catch {
        case ex: SQLException => {
          System.out.println("Exception happened when close ResultSet! " + ex)
        }
      }
      try {
        //2.关闭statement
        if (statement != null) {
          statement.get.close()
        }
      }
      catch {
        case ex: SQLException => {
          System.out.println("Exception happened when close Statement! " + ex)
        }
      }
      try {
        //3.关闭连接。
        if (connection != null) {
          connection.get.close()
        }
      }
      catch {
        case ex: SQLException => {
          System.out.println("Exception happened when close Connection! " + ex)
        }

1.4 样例代码获取

FusionInsight客户端方式

获取客户端解压文件“FusionInsight_Services_ClientConfig”中“publicLib\Fiber”目录下的“fiber-example-normal”、“fiber-example-security”。

Maven工程方式

从华为云代码广场上将“components/fiber”下代码下载到本地。网址:https://codehubcn- 

south-1.devcloud.huaweicloud.com/codehub/7076065/home

1.5 调测程序

1.5.1 编包并运行程序

操作场景

在程序代码完成开发后,您可以编译成jar包并上传至Linux客户端环境中运行应用。使用ScalaJava语言开发的应用程序在Fiber客户端的运行步骤是一样的。

前提条件

l   已按照开发和运行环境简介中在Liunx环境下安装了集群客户端。

l   确认客户端和集群时间一致性。客户端机器的时间与集群的时间要保持一致,时间差要小于5分钟。

操作步骤

1.         检查Fiber客户端的“fiber.xml”配置文件中的配置项是否配置正确。

2.         验证Fiber客户端已正确安装,并正常运行。

a.         执行kinit命令登录集群。

b.         执行fiber-beeline hive

c.         beeline提示符出现以下信息则表示连接成功(defaulthive)。

0: hive@jdbc:hive2:/hiveserverip:hiveserverport/>

d.         beeline中执行以下命令,查看各个组件是否能够连接成功。

set fiber.execution.engine=spark;

set fiber.execution.engine=phoenix;

出现以下信息表示连接成功:

0: spark@jdbc:.....>
0: phoenix@jdbc:.....>

3.         IntelliJ IDEA中,在生成Jar包之前配置工程的Artifacts信息。

a.         IDEA主页面,选择“File > Project Structure...”进入“Project Structure”页面。

b.         在“Project Structure”页面,选择“Artifacts”,单击“+”并选择“Jar > From modules with dependencies...”。

图1-1 添加Artifacts

20180529095724380006.png

 

c.         选择对应的ModuleJava样例工程中对应的ModuleFiberJDBCJavaExample,单击“OK”。

图1-2 Create Jar from Modules

20180529095725356007.png

 

d.         您可以根据实际情况设置Jar包的名称、类型以及输出路径。

图1-3 设置基本信息

20180529095725434008.png

 

e.         选中“FiberJDBCJavaExample”,右键选择“Put into Output Root”。然后单击“Apply”。

图1-4 Put into Output Root

20180529095726278009.png

 

f.          最后单击“OK”完成配置。

4.         生成Jar包。

a.         IDEA主页面,选择“Build > Build Artifacts...”。

图1-5 Build Artifacts

20180529095727219010.png

 

b.         在弹出的菜单中,选择“FiberJDBCJavaExample > Build”开始生成Jar包。

图1-6 Build

20180529095727358011.png

 

c.         Event log中出现如下类似日志时,表示Jar包生成成功。您可以从步骤3.d中配置的路径下获取到Jar包。

16:56:47 Compilation completed successfully in 10 sec

5.         将步骤4中生成的Jar包(如FiberJDBCJavaExample.jar)上传到Fiber客户端的运行环境上,如“/opt/example”目录上。

6.         登录Fiber客户端的运行环境,进入“/opt/example”目录,执行以下命令运行Fiber样例程序。

java -cp ${FIBER_HOME}/conf/:${FIBER_HOME}/lib/*:FiberJDBCJavaExample.jar com.huawei.fiber.example.FiberJDBCExample "jdbc:fiber://fiberconfig=${FIBER_HOME}/conf/fiber.xml;defaultDriver=hive" <spark_data_path_in_hdfs> <hive_data_path_in_hdfs>

其中,${FIBER_HOME}Fiber客户端所在的路径。<spark_data_path_in_hdfs>为“spark_data.txt”在HDFS文件系统上的路径,如“hdfs://hacluster/tmp/spark_data.txt”。<hive_data_path_in_hdfs>为“hive_data.txt”在HDFS文件系统上的路径,如“hdfs://hacluster/tmp/hive_data.txt”。

参考信息

通过JDBC访问Fiber样例程序(ScalaJava语言),其对应的运行依赖包如下,在Fiber客户端安装目录中已经包含了以下这些依赖包,其所在的路径为${FIBER_HOME}/lib/

l   fiber-jdbc-1.0.jar

l   log4j-1.2.17.jar

l   slf4j-api-1.7.10.jar

1.5.2 查看调测结果

操作场景

Fiber应用程序运行完成后,您可以直接通过运行结果查看应用程序运行情况。

操作步骤

查看运行结果获取应用运行情况。

l   通过Fiber访问Spark SQL的样例代码,运行结果中包含如下打印信息。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/FI-client/client/Spark/spark/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/FI-client/fiber/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
--------- count of tb_spark--------
| count |
| 3 |
---------content of tb_spark--------
| id | name | company |
|  1 | spark_name1 | company1 | 
|  2 | spark_name2 | company2 | 
|  3 | spark_name3 | company3 |

l   通过Fiber访问Hive的样例代码,运行结果中包含如下打印信息。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/FI-client/client/Hive/Beeline/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/FI-client/fiber/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
--------- count of tb_hive--------
| count |
| 3 |
---------content of tb_hive--------
| id | name | company |
|  1 | hive_name1 | company1 | 
|  2 | hive_name2 | company2 | 
|  3 | hive_name3 | company3 |

l   通过Fiber访问HBase的样例代码,运行结果中包含如下打印信息。

--------- count of tb_phoenix--------
| count |
| 3 |
---------content of tb_phoenix--------
| id | name | company |
|  101 | phoenix_user1 | company1 | 
|  102 | phoenix_user2 | company2 | 
|  103 | phoenix_user3 | company3 |

 

本帖最后由 lWX387225 于 2018-06-29 15:55 编辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
  • x
  • 常规:

点评 回复

跳转到指定楼层
lWX387225
lWX387225  新锐 发表于 2018-5-29 10:13:30 已赞(0) 赞(0)

欢迎使用!
  • x
  • 常规:

点评 回复

user_3204347
user_3204347   发表于 2018-10-30 12:08:01 已赞(0) 赞(0)

你好,这个架构应该实现不了hbase和hive中数据join的操作吧,执行引擎貌似是分离的:我目前的问题是kudu和hive想连在一起
  • x
  • 常规:

点评 回复

郭和远
郭和远   发表于 2019-8-29 11:18:05 已赞(0) 赞(0)

样例代码如何获取?
  • x
  • 常规:

点评 回复

郭和远
郭和远   发表于 2019-8-29 11:18:27 已赞(0) 赞(0)

以下这个地址,样例代码无法获取,为之奈何

https://codehubcn-south-1.devclo ... odehub/7076065/home

  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录