tencent cloud

文档反馈

EMR on TKE 快速入门

最后更新时间:2024-10-30 10:02:06
    本文为您介绍通过 EMR 控制台快速创建一个 EMR on TKE 集群、并完成作业提交及查看运行结果的整套操作流程。

    准备工作

    1. 在使用 EMR 集群前,需要注册腾讯云账号并完成实名认证,具体操作请参见 企业实名认证指引
    2. 完成对弹性 MapReduce 的服务账号授予系统默认角色 EMR_QCSRole,具体操作请参见 角色授权
    3. 完成对弹性 MapReduce的服务账号授权服务相关角色,具体操作请参见 管理权限
    4. 在线账号充值,EMR on TKE 提供按量计费,在创建集群前需要进行账号余额充值,确保余额大于等于创建集群所需配置费用(不包含:代金券等),具体操作请参见 充值流程说明

    创建集群

    登录 EMR 控制台,在 EMR on TKE 集群列表页单击创建集群,在购买页面完成相关配置;当集群状态显示为运行中时,表示集群创建成功。
    配置项
    配置项说明
    示例
    集群名称
    集群的名称,可自定义
    EMR-7sx2aqmu
    地域
    集群所部署的物理数据中心
    注意:集群创建后,无法更改地域,请谨慎选择。
    北京、上海、广州、南京、新加坡等
    容器类型
    服务角色由底层容器提供资源进行部署,支持 TKE 标准集群和 TKE Serverless 集群
    TKE
    集群网络及子网
    用于购买 db 使用,需保持网络与容器集群网络一致
    广州七区
    安全组
    集群维度配置安全组
    创建新安全组
    计费模式
    集群部署计费模式
    按量计费
    产品版本
    不同产品版本上捆绑的组件和组件的版本不同
    EMR-TKE1.0.0 版本中内置的是 Hadoop 2.8.5、Spark 3.2.1 等。
    部署服务
    非必选组件,根据自身需求组合搭配自定义部署,最少选择一个组件
    Hive-2.3.9、Impala-3.4.1等
    COS 存储桶
    用于存储日志,jar 包等信息
    -
    设置密码
    设置 webUI 密码,当前密码仅用于初始设置服务 webUI 访问密码。
    8-16个字符,包含大写字母、小写字母、数字和特殊字符四种,特殊符号仅支持!@%^*,密码第一位不能为特殊字符

    提交作业及查看运行结果

    集群创建成功后,您可以在该集群创建并提交作业。本文以提交 Kyuubi Spark 和 Hive on Spark 作业和查看作业信息为例,操作如下。

    Hue 提交

    1. 在集群列表中单击对应的集群 ID/名称进入集群详情页。
    2. 在集群详情页中单击集群服务,选择 hue。
    3. 在角色管理页面的操作列中打开更多下拉选项框,单击开启网络访问,然后选择公网LB,单击确认开启,待流程结束后,hue 所在 pod 的公网 LB 成功创建。
    4. 单击右上角查看信息/查看WebUI,查看 HUE 的访问地址,单击访问 hue的WebUI
    5. 通过认证进入 hue 页面,通常认证用户为 root,密码为集群创建时的密码。
    6. 通过 hive tab 可以提交 hive on spark 任务。
    7. 通过 SparkSql_Kyuubi 可以提交 sparksql 任务。 Hive on Spark 建表及查询:
    
    
    
    Kyuubi 查询:
    
    

    JDBC 提交 Hive Spark

    1. 如果您需要使用外网 IP 连接 hiveserver,请在集群服务 > Hive > HiveServer2 > 操作 > 更多 > 开启网络访问中开启 hiveserver2外网。
    2. 如果使用外网链接,需要到集群信息中查看安全组,前往云服务器 > 安全组中编辑该安全组,为7001端口放开客户端 IP 的访问,若使用内网访问,则可跳过1,2步骤。

    使用 maven 编写 jdbc 代码

    首先在 pom.xml 中引入以下 jdbc 所需依赖:
    <dependency>
    <groupId>org.apache.hive</groupId>
    <artifactId>hive-jdbc</artifactId>
    <version>2.3.7</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.8.5</version>
    </dependency>
    引入以下打包和编译插件:
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>utf-8</encoding>
    </configuration>
    </plugin>
    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
    <descriptorRefs>
    <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
    </configuration>
    <executions>
    <execution>
    <id>make-assembly</id>
    <phase>package</phase>
    <goals>
    <goal>single</goal>
    </goals>
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>
    新建 HiveJdbcTest.java 如下:
    package org.apache.hive;
    import java.sql.*;
    
    
    /**
    * Created by tencent on 2023/6/20.
    */
    public class HiveJdbcTest {
    private static String driverName =
    "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args)
    throws SQLException {
    try {
    Class.forName(driverName);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    System.exit(1);
    }
    Connection con = DriverManager.getConnection(
    "jdbc:hive2://$hs2host:7001/test_db", "hadoop", "");
    Statement stmt = con.createStatement();
    String tableName = "test_jdbc";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName +
    " (key int, value string)");
    System.out.println("Create table success!");
    // show tables
    String sql = "show tables '" + tableName + "'";
    System.out.println("Running: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    if (res.next()) {
    System.out.println(res.getString(1));
    }
    // describe table
    sql = "describe " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(res.getString(1) + "\\t" + res.getString(2));
    }
    sql = "insert into " + tableName + " values (42,\\"hello\\"),(48,\\"world\\")";
    stmt.execute(sql);
    sql = "select * from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(String.valueOf(res.getInt(1)) + "\\t"
    + res.getString(2));
    }
    sql = "select count(1) from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(res.getString(1));
    }
    }
    }
    将代码中的 $hs2host 替换为您的 hiveserver2 地址。 该程序会在 test_db 中创建 test_jdbc 表,写入两条数据并查询输出该数据。执行下面的命令对整个工程打包:
    mvn package

    上传 jar 并运行

    将上述命令打包的 jar 上传到可以访问到 hiveserver2 服务的机器或者本地(如果是本地,则保证能正常访问 hiveserver2),通过以下命令运行:
    java -classpath ${package}-jar-with-dependencies.jar org.apache.hive.HiveJdbcTest
    其中 package 为您自定义的 artifactId-version。运行结果如下:
    Create table success!
    Running: show tables 'test_jdbc'
    test_jdbc
    Running: describe test_jdbc
    key int
    value string
    
    Running: select * from test_jdbc
    42 hello
    48 world
    Running: select count(1) from test_jdbc
    2

    JDBC 提交 Kyuubi Spark

    1. 如果您需要使用外网 IP 连接 KyuubiServer,请在集群服务 >Kyuubi > KyuubiServer > 操作 > 更多 > 开启网络访问中开启 KyuubiServer 外网。
    2. 如果使用外网链接,需要到集群信息中查看安全组,前往云服务器 > 安全组中编辑该安全组,为10009端口放开客户端 IP 的访问,若使用内网访问,则可跳过1,2步骤。

    使用 maven 编写 jdbc 代码

    jdbc 依赖和打包插件配置与 JDBC 提交 Hive Spark 中一致。需要创建创建 KyuubiJdbcTest.java,内容如下:
    package org.apache.hive;
    import java.sql.*;
    
    
    /**
    * Created by tencent on 2023/6/20.
    */
    public class KyuubiJdbcTest {
    private static String driverName =
    "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args)
    throws SQLException {
    try {
    Class.forName(driverName);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    System.exit(1);
    }
    Connection con = DriverManager.getConnection(
    "jdbc:hive2://$kyuubihost:10009/test_db", "hadoop", "");
    Statement stmt = con.createStatement();
    String tableName = "test_kyuubi";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName +
    " (key int, value string)");
    System.out.println("Create table success!");
    // show tables
    String sql = "show tables '" + tableName + "'";
    System.out.println("Running: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    if (res.next()) {
    System.out.println(res.getString(1));
    }
    // describe table
    sql = "describe " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(res.getString(1) + "\\t" + res.getString(2));
    }
    sql = "insert into " + tableName + " values (42,\\"hello\\"),(48,\\"world\\")";
    stmt.execute(sql);
    sql = "select * from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(String.valueOf(res.getInt(1)) + "\\t"
    + res.getString(2));
    }
    sql = "select count(1) from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
    System.out.println(res.getString(1));
    }
    }
    }
    将代码中的 $kyuubihost 替换为您的 kyuubiserver 地址。 该程序会在 test_db 中创建 test_jdbc 表,写入两条数据并查询输出该数据。执行下面的命令对整个工程打包:
    mvn package

    上传 jar 并运行

    上传过程与 JDBC 提交 Hive Spark 中一致,通过以下命令运行 KyuubiJdbcTest:
    java -classpath ${package}-jar-with-dependencies.jar org.apache.hive.KyuubiJdbcTest
    
    其中package为您自定义的artifactId-version。运行结果如下:
    Create table success!
    Running: show tables 'test_kyuubi'
    test_db
    Running: describe test_kyuubi
    key int
    value string
    Running: select * from test_kyuubi
    42 hello
    48 world
    Running: select count(1) from test_kyuubi
    2

    销毁集群

    当创建的集群不再使用时,可以销毁集群,退还关联资源;销毁集群将强制终止集群所提供的服务,并释放关联资源。
    在 EMR on TKE 页面,选择目标集群的更多中的销毁;在弹出的对话框中,单击立即销毁
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持