云服务器内容精选

  • 登录 MRS Manager 登录MRS管理控制台页面。 在“现有集群” 列表,单击指定的集群名称,进入集群信息页面。 单击“点击管理”,打开“访问MRS Manager页面”。 若用户创建集群时已经绑定弹性公网IP,如图1所示。 选择待添加的安全组规则所在安全组,该安全组在创建群时配置。 添加安全组规则,默认填充的是用户访问公网IP地址9022端口的规则,如需开放多个IP段为可信范围用于访问MRS Manager页面,请参考添加安全组规则。如需对安全组规则进行查看,修改和删除操作,请单击“管理安全组规则”。 自动获取的访问公网IP与用户本机IP不一致,属于正常现象,无需处理。 9022端口为knox的端口,需要开启访问knox的9022端口权限,才能访问MRS Manager服务。 勾选“我确认xx.xx.xx.xx为可信任的公网访问IP,并允许从该IP访问MRS Manager页面。” 图1 添加访问MRS Manager的安全组规则 若用户创建集群时暂未绑定弹性公网IP,如图2所示。 在弹性公网IP下拉框中选择可用的弹性公网IP或单击“管理弹性公网IP”创建弹性公网IP。 选择待添加的安全组规则所在安全组,该安全组在创建群时配置。 添加安全组规则,默认填充的是用户访问公网IP地址9022端口的规则,如需开放多个IP段为可信范围用于访问MRS Manager页面,请参考添加安全组规则。如需对安全组规则进行查看,修改和删除操作,请单击“管理安全组规则”。 自动获取的访问公网IP与用户本机IP不一致,属于正常现象,无需处理。 9022端口为knox的端口,需要开启访问knox的9022端口权限,才能访问MRS Manager服务。 勾选“我确认xx.xx.xx.xx为可信任的公网访问IP,并允许从该IP访问MRS Manager页面。” 图2 绑定弹性公网IP 单击“确定”,进入MRS Manager登录页面。 输入创建集群时默认的用户名“admin”及设置的密码,单击“登录”进入MRS Manager页面。
  • 添加安全组规则 如需为其他用户开通访问MRS Manager的权限,参考该小节内容添加对应用户访问公网的IP地址为可信范围。 在MRS管理控制台,在“现有集群” 列表,单击指定的集群名称,进入集群信息页面。 单击弹性公网IP后边的“添加安全组规则”,如图3所示。 图3 集群详情 进入“添加安全组规则”页面,添加需要开放权限用户访问公网的IP地址段并勾选“我确认这里设置的授权对象是可信任的公网访问IP范围,禁止使用0.0.0.0/0,否则会有安全风险。”如图4所示。 图4 添加安全组规则 默认填充的是用户访问公网的IP地址,用户可根据需要修改IP地址段,如需开放多个IP段为可信范围,请重复执行步骤6-步骤9。如需对安全组规则进行查看,修改和删除操作,请单击“管理安全组规则”。 单击“确定”完成安全组规则添加。
  • 准备认证机制代码 在开启Kerberos认证的环境下,各个组件之间的相互通信不能够简单的互通,而需要在通信之前进行相互认证,以确保通信的安全性。Kafka应用开发需要进行Kafka、ZooKeeper、Kerberos的安全认证,这些安全认证只需要生成一个jaas文件并设置相关环境变量即可。提供了LoginUtil相关接口来完成这些配置,如下样例代码中只需要配置用户自己申请的账号名称和对应的keytab文件名称即可,由于人机账号的keytab会随用户密码过期而失效,故建议使用机机账号进行配置。 认证样例代码: 设置keytab认证文件模块 /** * 用户自己申请的账号keytab文件名称 */ private static final String USER_KEYTAB_FILE = "用户自己申请的账号keytab文件名称"; /** * 用户自己申请的账号名称 */ private static final String USER_PRINCIPAL = "用户自己申请的账号名称"; MRS服务Kerberos认证模块,如果服务没有开启kerberos认证,这块逻辑不执行 public static void securityPrepare() throws IOException { String filePath = System.getProperty("user.dir") + File.separator + "conf" + File.separator; String krbFile = filePath + "krb5.conf"; String userKeyTableFile = filePath + USER_KEYTAB_FILE; //windows路径下分隔符替换 userKeyTableFile = userKeyTableFile.replace("\\", "\\\\"); krbFile = krbFile.replace("\\", "\\\\"); LoginUtil.setKrb5Config(krbFile); LoginUtil.setZookeeperServerPrincipal("zookeeper/hadoop.hadoop.com"); LoginUtil.setJaasFile(USER_PRINCIPAL, userKeyTableFile); } 如果修改了集群kerberos域名,需要在代码中增加kerberos.domain.name的配置,并按照hadoop.expr=toLowerCase(%{default_realm}%{KerberosServer})规则配置正确的域名信息。例如:修改域名为HUAWEI.COM,则配置为hadoop.huawei.com。
  • 样例工程获取地址 华为云MRS服务1.8之前版本的样例工程下载地址为:http://mapreduceservice.obs-website.cn-north-1.myhuaweicloud.com/。 华为云MRS服务1.8.x版本的样例工程下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-1.8。 华为云MRS服务1.9.x版本的样例工程下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-1.9。 华为云MRS服务2.1.x版本的样例工程下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-2.1。 图1 样例代码下载
  • 安全认证代码 目前是统一调用LoginUtil类进行安全认证。 在MapReduce样例工程代码中,test@HADOOP.COM、user.keytab和krb5.conf为示例,实际操作时请联系管理员获取相应账号对应权限的keytab文件和krb5.conf文件,并将keytab文件和krb5.conf文件放入到样例代码中的conf目录,安全登录方法如下代码所示。 认证信息需要根据实际环境修改。 public static final String PRINCIPAL= "test@HADOOP.COM"; public static final String KEYTAB = FemaleInfoCollector.class.getClassLoader().getResource("user.keytab").getPath(); public static final String KRB = FemaleInfoCollector.class.getClassLoader().getResource("krb5.conf").getPath(); // 判断是否为安全模式 if("kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))){ //安全登录 System.setProperty("java.security.krb5.conf", KRB); LoginUtil.login(PRINCIPAL, KEYTAB, KRB, conf); }
  • 场景说明 在kerberos认证集群环境下,各个组件之间的相互通信不能够简单的互通,而需要在通信之前进行相互认证,以确保通信的安全性。 用户在提交MapReduce应用程序时,需要与Yarn、HDFS等之间进行通信。那么提交MapReduce的应用程序中需要写入安全认证代码,确保MapReduce程序能够正常运行。 安全认证有两种方式。 命令行认证 提交MapReduce应用程序运行前,在MapReduce客户端执行如下命令获得认证。 kinit 组件业务用户 代码认证 通过获取客户端的principal和keytab文件在应用程序中进行认证。
  • Presto JDBC使用样例 下面的代码片段在PrestoJDBCExample类中,用于实现JDBC连接Presto TPCDS Catalog。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 private static Connection connection; private static Statement statement; /** * Only when Kerberos authentication enabled, configurations in presto-examples/conf/presto.properties * should be set. More details please refer to https://prestodb.io/docs/0.215/installation/jdbc.html. */ private static void initConnection(String url, boolean krbsEnabled) throws SQLException { if (krbsEnabled) { String filePath = System.getProperty("user.dir") + File.separator + "conf" + File.separator; File proFile = new File(filePath + "presto.properties");if (proFile.exists()) { Properties props = new Properties(); try { props.load(new FileInputStream(proFile)); } catch (IOException e) { e.printStackTrace(); } connection = DriverManager.getConnection(url, props); } } else { connection = DriverManager.getConnection(url, "presto", null); } statement = connection.createStatement(); } private static void releaseConnection() throws SQLException { statement.close(); connection.close(); } public static void main(String[] args) throws SQLException { try { /** * Replace example_ip with your cluster presto server ip. * By default, Kerberos authentication disabled cluster presto service port is 7520, Kerberos * authentication enabled cluster presto service port is 7521 * The postfix /tpcds/sf1 means to use tpcds catalog and sf1 schema, you can use hive catalog as well * If Kerberos authentication enabled, set the second param to true. * see PrestoJDBCExample#initConnection(java.lang.String, boolean). */ initConnection("jdbc:presto://example_ip:7520/tpcds/sf1", false); //initConnection("jdbc:presto://example_ip:7521/tpcds/sf1", true); ResultSet resultSet = statement.executeQuery("select * from call_center"); while (resultSet.next()) { System.out.println(resultSet.getString("cc_name") + " : " + resultSet.getString("cc_employees")); } } catch (SQLException e) { e.printStackTrace(); } finally { releaseConnection(); } }
  • 代码样例 如下是代码片段,详细代码请参考com.huawei.bigdata.hdfs.examples中的HdfsMain类。 在Linux客户端运行应用的初始化代码,代码样例如下所示。 /** * 初始化,获取一个FileSystem实例 * * @throws IOException */ private void init() throws IOException { confLoad(); authentication(); instanceBuild(); } /** * * 如果程序运行在Linux上,则需要core-site.xml、hdfs-site.xml的路径, * 修改为在Linux下客户端文件的绝对路径。 * */ private void confLoad() throws IOException { conf = new Configuration(); // conf file conf.addResource(new Path(PATH_TO_HDFS_SITE_XML)); conf.addResource(new Path(PATH_TO_CORE_SITE_XML)); } /** * kerberos security authentication * 如果程序运行在Linux上,则需要krb5.conf和keytab文件的路径, * 修改为在Linux下客户端文件的绝对路径。并且需要将样例代码中的keytab文件和principal文件 * 分别修改为当前用户的keytab文件名和用户名。 * */ private void authentication() throws IOException { // 安全模式 if ("kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); LoginUtil.login(PRNCIPAL_NAME, PATH_TO_KEYTAB, PATH_TO_KRB5_CONF, conf); } } /** * build HDFS instance */ private void instanceBuild() throws IOException { // get filesystem fSystem = FileSystem.get(conf); }
  • 配置文件介绍 登录HDFS时会使用到如表1所示的配置文件。这些文件均已导入到“hdfs-example”工程的“conf”目录。 表1 配置文件 文件名称 作用 获取地址 core-site.xml 配置HDFS详细参数。 MRS_Services_ClientConfig\HDFS\config\core-site.xml hdfs-site.xml 配置HDFS详细参数。 MRS_Services_ClientConfig\HDFS\config\hdfs-site.xml user.keytab 对于Kerberos安全认证提供HDFS用户信息。 如果是安全模式集群,您可以联系管理员获取相应账号对应权限的keytab文件和krb5文件。 krb5.conf Kerberos server配置信息。 不同集群的“user.keytab”、“krb5.conf”不能共用。 “conf”目录下的“log4j.properties”文件客户根据自己的需要进行配置。
  • 修订记录 发布日期 修改说明 2020-04-20 第16次正式发布: 新增MRS 1.9版本样例代码,详见样例工程获取地址。 新增Alluxio应用开发章节,详见应用开发简介。 2019-11-28 第15次正式发布: 新增Impala应用开发章节,详见应用开发简介。 2019-08-14 第14次正式发布: 新增OpenTSDB应用开发章节,详见应用开发简介。 新增Flink应用开发章节,详见应用开发简介。 2019-04-02 第13次正式发布: 新增如下章节: HBase Phoenix样例代码调测 HBase python样例代码调测 应用开发简介 常用概念 开发流程 开发环境简介 准备环境 准备开发用户 准备JDBC客户端开发环境 准备HCatalog开发环境 典型场景说明 样例代码说明 调测程序 Presto接口 2019-02-01 第12次正式发布: 修改如下章节: 创建表 修改表 使用过滤器Filter 添加二级索引 使用二级索引读取数据 配置HBase文件存储 HFS的JAVA API 2019-01-25 第11次正式发布: 新增如下章节: 编译并运行程序 查看调测结果 JDBC客户端运行及结果查询 2019-01-10 第10次正式发布: 修改如下章节: Phoenix 2018-12-18 第九次正式发布: 修改如下章节: 场景说明 场景说明 场景说明 2018-12-03 第八次正式发布: 修改如下章节: 准备Linux客户端运行环境 2018-10-19 第七次正式发布: 修改如下章节: 使用Scan读取数据 运行SparkStreamingKafka样例工程时报“类不存在”问题 Storm-HDFS开发指引 Storm-OBS开发指引 2018-09-19 第六次正式发布: 新增如下章节: Spark on Yarn的client模式下spark-submit提交任务出现FileNotFoundException异常 2018-06-15 第五次正式发布: 修改如下章节: 通过开源镜像站获取MRS样例工程 2018-06-04 第四次正式发布: 翻译答疑过程中发现问题,优化描述。 2018-05-04 第三次正式发布: 修改帮助中心引入的命令换行问题。 2018-04-08 第二次正式发布。 修改如下章节: 通过开源镜像站获取MRS样例工程 2018-02-02 第一次正式发布。 父主题: 附录
  • 操作步骤 运行结果会有如下成功信息: ... 2020-01-09 10:43:49,338 INFO [main] examples.HBaseExample: Entering dropTable. 2020-01-09 10:43:49,341 INFO [main] client.HBaseAdmin: Started disable of hbase_sample_table 2020-01-09 10:43:50,080 INFO [main] client.HBaseAdmin: Operation: DISABLE, Table Name: default:hbase_sample_table, procId: 41 completed 2020-01-09 10:43:50,550 INFO [main] client.HBaseAdmin: Operation: DELETE, Table Name: default:hbase_sample_table, procId: 43 completed 2020-01-09 10:43:50,550 INFO [main] examples.HBaseExample: Drop table successfully. 2020-01-09 10:43:50,550 INFO [main] examples.HBaseExample: Exiting dropTable. 2020-01-09 10:43:50,550 INFO [main] client.ConnectionImplementation: Closing master protocol: MasterService 2020-01-09 10:43:50,556 INFO [main] examples.TestMain: -----------finish to test HBase API------------------- 在Windows环境运行样例代码时会出现下面的异常,但是不影响业务: java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 日志说明 日志级别默认为INFO,可以通过调整日志打印级别(DEBUG,INFO,WARN,ERROR,FATAL)来显示更详细的信息。可以通过修改log4j.properties文件来实现,如: hbase.root.logger=INFO,console log4j.logger.org.apache.zookeeper=INFO #log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG log4j.logger.org.apache.hadoop.hbase=INFO # Make these two classes DEBUG-level. Make them DEBUG to see more zk debug. log4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO log4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO
  • MRS各组件样例工程汇总 样例工程获取地址参见通过开源镜像站获取MRS样例工程,切换分支为与MRS集群相匹配的版本分支,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 MRS样例代码库提供了各组件的基本功能样例工程供用户使用,当前版本各组件提供的样例工程汇总参见表1。 表1 各组件样例工程汇总(2.x) 组件 样例工程位置 描述 Alluxio alluxio-examples 使用Alluxio通过公共接口连接到存储系统示例程序。可实现写文件、读文件等功能。 Flink flink-examples 该样例工程提供以下样例程序: DataStream程序 Flink构造DataStream的Java/Scala示例程序。本工程示例为基于业务要求分析用户日志数据,读取文本数据后生成相应的DataStream,然后筛选指定条件的数据,并获取结果。 向Kafka生产并消费数据程序 Flink向Kafka生产并消费数据的Java/Scala示例程序。在本工程中,假定某个Flink业务每秒就会收到1个消息记录,启动Producer应用向Kafka发送数据,然后启动Consumer应用从Kafka接收数据,对数据内容进行处理后并打印输出。 异步Checkpoint机制程序 Flink异步Checkpoint机制的Java/Scala示例程序。本工程中,程序使用自定义算子持续产生数据,产生的数据为一个四元组(Long,String,String,Integer)。数据经统计后,将统计结果打印到终端输出。每隔6秒钟触发一次checkpoint,然后将checkpoint的结果保存到HDFS中。 Stream SQL Join程序 Flink SQL Join示例程序。本工程示例调用flink-connector-kafka模块的接口,生产并消费数据。生成Table1和Table2,并使用Flink SQL对Table1和Table2进行联合查询,打印输出结果。 HBase hbase-examples HBase数据读写操作的应用开发示例。 通过调用HBase接口可实现创建用户表、导入用户数据、增加用户信息、查询用户信息及为用户表创建二级索引等功能。 HDFS hdfs-examples HDFS文件操作的Java示例程序。 本工程主要给出了创建HDFS文件夹、写文件、追加文件内容、读文件和删除文件/文件夹等相关接口操作示例。 Hive hive-examples 该样例工程提供以下JDBC/HCatalog样例程序: Hive JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Hive,在Hive中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能。 Hive HCatalog处理数据Java示例程序。 使用HCatalog接口实现通过Hive命令行方式对MRS Hive元数据进行数据定义和查询操作。 Impala impala-examples Impala JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Impala,在Impala中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能。 Kafka kafka-examples Kafka流式数据的处理Java示例程序。 本工程基于Kafka Streams完成单词统计功能,通过读取输入Topic中的消息,统计每条消息中的单词个数,从输出Topic消费数据,然后将统计结果以Key-Value的形式输出。 MapReduce mapreduce-examples MapReduce任务提交Java示例程序。 本工程提供了一个MapReduce统计数据的应用开发示例,实现数据分析、处理,并输出满足用户需要的数据信息。 另外以MapReduce访问HDFS、HBase、Hive为例,介绍如何编写MapReduce作业访问多个服务组件。帮助用户理解认证、配置加载等关键使用方式。 Presto presto-examples 该样例工程提供以下JDBC/HCatalog样例程序: Presto JDBC处理数据Java示例程序。 本工程使用JDBC接口连接Presto,在Presto中执行相关数据操作。使用JDBC接口实现创建表、加载数据、查询数据等功能。 Presto HCatalog处理数据Java示例程序。 OpenTSDB opentsdb-examples 通过调用OpenTSDB接口可实现采集大规模集群中的监控类信息,并可实现数据的秒级查询。该样例程序主要实现写入数据、查询数据、删除数据等功能。 Spark spark-examples SparkHbasetoHbaseJavaExample Spark从HBase读取数据再写入HBase的Java/Scala示例程序。 本示例工程中,Spark应用程序实现两个HBase表数据的分析汇总。 SparkHbasetoHbaseScalaExample SparkHivetoHbaseJavaExample Spark从Hive读取数据再写入到HBase的Java/Scala示例程序。 本示例工程中,Spark应用程序实现分析处理Hive表中的数据,并将结果写入HBase表。 SparkHivetoHbaseScalaExample SparkJavaExample Spark Core任务的Java/Python/Scala示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkPythonExample SparkScalaExample SparkLauncherJavaExample 使用Spark Launcher提交作业的Java/Scala示例程序。 本工程应用程序通过org.apache.spark.launcher.SparkLauncher类采用Java/Scala命令方式提交Spark应用。 SparkLauncherScalaExample SparkOnHbaseJavaExample Spark on HBase场景的Java/Scala示例程序。 本工程应用程序以数据源的方式去使用HBase,将数据以Avro格式存储在HBase中,并从中读取数据以及对读取的数据进行过滤等操作。 SparkOnHbaseScalaExample SparkSQLJavaExample Spark SQL任务的Java/Scala示例程序。 本工程应用程序实现从HDFS上读取文本数据并计算分析。 SparkSQLScalaExample SparkStreamingJavaExample Spark Streaming从Kafka接收数据并进行统计分析的Java/Scala示例程序。 本工程示例为基于业务要求分析用户日志数据,读取文本数据后生成相应的DataStream,然后筛选指定条件的数据,并获取结果。 SparkStreamingScalaExample SparkStreamingKafka010JavaExample Spark Streaming从Kafka接收数据并进行统计分析的Java/Scala示例程序。 本工程应用程序实时累加计算Kafka中的流数据,统计每个单词的记录总数。 SparkStreamingKafka010ScalaExample SparkStreamingtoHbaseJavaExample Spark Streaming读取Kafka数据并写入HBase的Java/Scala示例程序。 本工程应用程序每5秒启动一次任务,读取Kafka中的数据并更新到指定的HBase表中。 SparkStreamingtoHbaseScalaExample SparkStructuredStreamingJavaExample 在Spark应用中,通过使用StructuredStreaming调用Kafka接口来获取单词记录,然后把单词记录分类统计,得到每个单词记录数。 SparkStructuredStreamingScalaExample SparkThriftServerJavaExample 通过JDBC访问Spark SQL的Java/Scala示例程序。 本示例中,用户自定义JD BCS erver的客户端,使用JDBC连接来进行表的创建、数据加载、查询和删除。 SparkThriftServerScalaExample Storm storm-examples storm-common-examples 构造Storm拓扑和开发Spout/Bolt样例程序。可实现创建Spout、创建Bolt、创建Topology等功能。 storm-hbase-examples MRS的Storm与HBase组件实现交互的示例程序。实现提交Storm拓扑将数据存储到HBase的WordCount表中。 storm-hdfs-examples MRS的Storm与HDFS组件实现交互的示例程序。实现提交Storm拓扑数据存储到HDFS的功能。 storm-jdbc-examples 使用JDBC访问MRS Storm的样例程序。实现使用Storm拓扑向表中插入数据功能。 storm-kafka-examples MRS的Storm与Kafka组件实现交互的示例程序。实现使用Storm拓扑向Kafka中发送数据并查看。 storm-obs-examples MRS的Storm与OBS实现交互的示例程序。实现提交Storm拓扑数据存储到OBS功能。
  • 安全认证代码(Java版) 目前样例代码统一调用LoginUtil类进行安全认证。 在Spark样例工程代码中,不同的样例工程,使用的认证代码不同,基本安全认证或带ZooKeeper认证。样例工程中使用的示例认证参数如表2所示,请根据实际情况修改对应参数值。 表2 参数描述 参数 示例参数值 描述 userPrincipal sparkuser 用户用于认证的账号Principal,您可以联系管理员获取此账号。 userKeytabPath /opt/FIclient/user.keytab 用户用于认证的Keytab文件,您可以联系管理员获取文件。 krb5ConfPath /opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf krb5.conf文件路径和文件名称。 ZKServerPrincipal zookeeper/hadoop.hadoop.com ZooKeeper服务端principal。请联系管理员获取对应账号。 基本安全认证: Spark Core和Spark SQL程序不需要访问HBase或ZooKeeper,所以使用基本的安全认证代码即可。请在程序中添加如下代码,并根据实际情况设置安全认证相关参数: String userPrincipal = "sparkuser"; String userKeytabPath = "/opt/FIclient/user.keytab"; String krb5ConfPath = "/opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf"; Configuration hadoopConf = new Configuration(); LoginUtil.login(userPrincipal, userKeytabPath, krb5ConfPath, hadoopConf); 带ZooKeeper认证: 由于“Spark Streaming”、“通过JDBC访问Spark SQL”和“Spark on HBase”样例程序,不仅需要基础安全认证,还需要添加ZooKeeper服务端Principal才能完成安全认证。请在程序中添加如下代码,并根据实际情况设置安全认证相关参数: String userPrincipal = "sparkuser"; String userKeytabPath = "/opt/FIclient/user.keytab"; String krb5ConfPath = "/opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf"; String ZKServerPrincipal = "zookeeper/hadoop.hadoop.com"; String ZOOKEEPER_DEFAULT_ LOG IN_CONTEXT_NAME = "Client"; String ZOOKEEPER_SERVER_PRINCIPAL_KEY = "zookeeper.server.principal"; Configuration hadoopConf = new Configuration(); LoginUtil.setJaasConf(ZOOKEEPER_DEFAULT_LOGIN_CONTEXT_NAME, userPrincipal, userKeytabPath); LoginUtil.setZookeeperServerPrincipal(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZKServerPrincipal); LoginUtil.login(userPrincipal, userKeytabPath, krb5ConfPath, hadoopConf);
  • 安全认证代码(Scala版) 目前样例代码统一调用LoginUtil类进行安全认证。 在Spark样例工程代码中,不同的样例工程,使用的认证代码不同,基本安全认证或带ZooKeeper认证。样例工程中使用的示例认证参数如表3所示,请根据实际情况修改对应参数值。 表3 参数描述 参数 示例参数值 描述 userPrincipal sparkuser 用户用于认证的账号Principal,您可以联系管理员获取此账号。 userKeytabPath /opt/FIclient/user.keytab 用户用于认证的Keytab文件,您可以联系管理员获取文件。 krb5ConfPath /opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf krb5.conf文件路径和文件名称。 ZKServerPrincipal zookeeper/hadoop.hadoop.com ZooKeeper服务端principal。请联系管理员获取对应账号。 基本安全认证: Spark Core和Spark SQL程序不需要访问HBase或ZooKeeper,所以使用基本的安全认证代码即可。请在程序中添加如下代码,并根据实际情况设置安全认证相关参数: val userPrincipal = "sparkuser" val userKeytabPath = "/opt/FIclient/user.keytab" val krb5ConfPath = "/opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf" val hadoopConf: Configuration = new Configuration() LoginUtil.login(userPrincipal, userKeytabPath, krb5ConfPath, hadoopConf); 带ZooKeeper认证: 由于“Spark Streaming”、“通过JDBC访问Spark SQL”和“Spark on HBase”样例程序,不仅需要基础安全认证,还需要添加ZooKeeper服务端Principal才能完成安全认证。请在程序中添加如下代码,并根据实际情况设置安全认证相关参数: val userPrincipal = "sparkuser" val userKeytabPath = "/opt/FIclient/user.keytab" val krb5ConfPath = "/opt/FIclient/KrbClient/kerberos/var/krb5kdc/krb5.conf" val ZKServerPrincipal = "zookeeper/hadoop.hadoop.com" val ZOOKEEPER_DEFAULT_LOGIN_CONTEXT_NAME: String = "Client" val ZOOKEEPER_SERVER_PRINCIPAL_KEY: String = "zookeeper.server.principal" val hadoopConf: Configuration = new Configuration(); LoginUtil.setJaasConf(ZOOKEEPER_DEFAULT_LOGIN_CONTEXT_NAME, userPrincipal, userKeytabPath) LoginUtil.setZookeeperServerPrincipal(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZKServerPrincipal) LoginUtil.login(userPrincipal, userKeytabPath, krb5ConfPath, hadoopConf);
  • 样例工程获取地址 MRS服务3.1.2-LTS.3版本的样例工程Git下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.1.2。 MRS服务3.2.0-LTS.1版本的样例工程Git下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.2.0.1。 MRS服务3.3.0-LTS版本的样例工程Git下载地址为:https://github.com/huaweicloud/huaweicloud-mrs-example/tree/mrs-3.3.0。 图1 样例代码下载 切换分支为与MRS集群相匹配的版本分支,例如“mrs-3.2.0.1”,然后下载压缩包到本地后解压,即可获取各组件对应的样例代码工程。 MRS服务普通版本获取样例工程请参考通过开源镜像站获取样例工程。