MAPREDUCE服务 MRS-配置HDFS同分布策略(Colocation):代码样例

时间:2024-10-18 17:22:18

代码样例

完整样例代码可参考com.huawei.bigdata.hdfs.examples.ColocationExample。

  • 在运行Colocation工程时,需要将HDFS用户绑定supergroup用户组。
  • 在运行Colocation工程时,HDFS的配置项fs.defaultFS不能配置为viewfs://ClusterX。
  1. 初始化

    使用Colocation前需要进行kerberos安全认证。

    private static void init() throws IOException {
    
        conf.set(KEYTAB, PATH_TO_KEYTAB);
        conf.set(PRINCIPAL, PRNCIPAL_NAME);
    
        LoginUtil.setJaasConf( LOG IN_CONTEXT_NAME, PRNCIPAL_NAME, PATH_TO_KEYTAB);
        LoginUtil.setZookeeperServerPrincipal(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL);
        LoginUtil.login(PRNCIPAL_NAME, PATH_TO_KEYTAB, PATH_TO_KRB5_CONF, conf);
    }
  2. 获取实例

    样例:Colocation的操作使用DFSColocationAdmin和DFSColocationClient实例,在进行创建group等操作前需获取实例。

        dfsAdmin = new DFSColocationAdmin(conf);
        dfs = new DFSColocationClient();
        dfs.initialize(URI.create(conf.get("fs.defaultFS")), conf);
  3. 创建group

    样例:创建一个gid01组,组中包含3个locator。

    /**
     * 创建group
     * 
     * @throws java.io.IOException
     */
    private static void createGroup() throws IOException {
        dfsAdmin.createColocationGroup(COLOCATION_GROUP_GROUP01,
                Arrays.asList(new String[] { "lid01", "lid02", "lid03" }));
    }
  4. 写文件,写文件前必须创建对应的group
    样例:写入testfile.txt文件。
    /**
     * 创建并写入文件
     * 
     * @throws java.io.IOException
     */
    private static void put() throws IOException {
        FSDataOutputStream out = dfs.create(new Path(TESTFILE_TXT), true, COLOCATION_GROUP_GROUP01, "lid01");
        // 待写入HDFS的数据
        byte[] readBuf = "Hello World".getBytes("UTF-8");
        out.write(readBuf, 0, readBuf.length);
        out.close();
    }
  5. 删除文件
    样例:删除testfile.txt文件。
    /**
     * 删除文件
     * 
     * @throws java.io.IOException
     */
    @SuppressWarnings("deprecation")
    private static void delete() throws IOException {
        dfs.delete(new Path(TESTFILE_TXT));
    }
  6. 删除group
    样例:删除gid01。
    /**
     * 删除group
     * 
     * @throws java.io.IOException
     */
    private static void deleteGroup() throws IOException {
        dfsAdmin.deleteColocationGroup(COLOCATION_GROUP_GROUP01);
    }
support.huaweicloud.com/devg-lts-mrs/mrs_07_090023.html