首页科技 › 透过不难瘦身,化解Dataworks 10M文本限制难点

透过不难瘦身,化解Dataworks 10M文本限制难点

原标题:通过不难瘦身,消除Dataworks 10M文件限制难点

我们的事务是要使用mongodb的Hadoop
driver处理输出。大家重写的mongodbInputFormat的时候传递数据的时候是把多少写入conf,然后再从mongoSplitter里面里面从conf里面读出来。比如上面那样:

摘要:
用户在DataWorks上实施MapReduce作业的时候,文件大于十M的JA汉兰达和财富文件无法上传到Dataworks,导致力不从心利用调度去定期执行MapReduce作业。
化解方案: jar -resources test_mr.

把数量放入数据conf:

用户在DataWorks上进行MapReduce作业的时候,文件大于十M的JA途睿欧和能源文件不能够上传到Dataworks,导致力不从心运用调度去定期执行MapReduce作业。

List<Long> tagsUrns =null;
 //tagUrns 赋值.....
 conf.set("tagUrns",
            ObjectSerializer.serialize((Serializable) tagsUrns));

消除方案:

在mapper,reduce,只怕mongoSpiltter里拿出conf里的数目:

率先步:大于10M的resources通过马克斯Compute CLI客户端上传,

List<Long> tagUrns = (List<Long>) ObjectSerializer
            .deserialize(context.getConfiguration().get("tagUrns"));

客户端下载地址:

是因为conf只好放入boolean、int、string的值,而自小编索要给hadoop
Configuration放入的是list大概此外对象,所以须求选择一个行列化学工业具类。

客户端配置AK、EndPoint:

队列化学工业具类代码:

add jar C:\test_mr\test_mr.jar -f;//添加财富

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

第叁步:近期由此马克斯Compute
CLI上传的财富,在Dataworks左边财富列表是找不到的,只可以通过list
resources查看确认能源;

import java.io.*;

list resources;//查看能源

public class ObjectSerializer {

其三步:瘦身Jar,因为Dataworks执行M兰德Murano作业的时候,一定要本地执行,所以保留个main就足以;

private static final Log log =
LogFactory.getLog(ObjectSerializer.class);

图片 1

public static String serialize(Serializable obj) throws IOException {
    if (obj == null)
        return "";
    try {
        ByteArrayOutputStream serialObj = new ByteArrayOutputStream();
        ObjectOutputStream objStream = new
ObjectOutputStream(serialObj);
        objStream.writeObject(obj);
        objStream.close();
        return encodeBytes(serialObj.toByteArray());
    } catch (Exception e) {
        throw new IOException("Serialization error: " + e.getMessage(),
e);
    }
}

因此上述方法,咱们能够在Dataworks上跑大于十M的MQashqai作业。

public static Object deserialize(String str) throws IOException {
    if (str == null || str.length() == 0)
        return null;
    try {
        ByteArrayInputStream serialObj = new ByteArrayInputStream(
                decodeBytes(str));
        ObjectInputStream objStream = new
ObjectInputStream(serialObj);
        return objStream.readObject();
    } catch (Exception e) {
        throw new IOException("Deserialization error: " +
e.getMessage(), e);
    }
}

作者:隐林

public static String encodeBytes(byte[] bytes) {
    StringBuffer strBuf = new StringBuffer();

​本文为云栖社区原创内容,未经同意不得转发。回来和讯,查看越来越多

    for (int i = 0; i < bytes.length; i++) {
        strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int)
'a')));
        strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));
    }

主要编辑:

    return strBuf.toString();
}

public static byte[] decodeBytes(String str) {
    byte[] bytes = new byte[str.length() / 2];
    for (int i = 0; i < str.length(); i += 2) {
        char c = str.charAt(i);
        bytes[i / 2] = (byte) ((c - 'a') << 4);
        c = str.charAt(i + 1);
        bytes[i / 2] += (c - 'a');
    }
    return bytes;
}

}

只是当自家放入的数码太大时,运维hadoop职分时报错,错误消息:

图片 2

错误音讯表达hadoop的conf是有限定的,查询下发现限制为五M:

图片 3

故此马上就懵了。那不从conf传入,好像又拿不到。最终想着能否从hdfs文件间接读数据文件。不过本身的多寡必须在mongospliter里面获取数据,而那里不得不获得conf。最终发现hadoop获取FileSystem情势为:

@Resource(name = "hadoopConfiguration")
private Configuration configuration = null;

...........

 fileSystem = FileSystem.get(configuration);

越多详情见请继续读书下一页的特出内容:
http://www.linuxidc.com/Linux/2013-11/92407p2.htm

推荐介绍阅读

Hadoop 贰.0 安装向导 (0.二三.x)
http://www.linuxidc.com/Linux/2012-05/61463.htm

Hadoop 一.2.一 单节点安装(Single Node Setup)步骤
http://www.linuxidc.com/Linux/2013-08/89377.htm

在CentOS上安装Hadoop
http://www.linuxidc.com/Linux/2013-08/88600.htm

Ubuntu 12.04安装Hadoop
http://www.linuxidc.com/Linux/2013-08/88187.htm

CentOS 6.3 x86_6肆安装与布署Hadoop-一.0
http://www.linuxidc.com/Linux/2013-07/87959.htm

Hadoop入门--Hadoop二伪分布式安装
http://www.linuxidc.com/Linux/2013-06/86403.htm

Hadoop二.二.0单节点安装及测试
http://www.linuxidc.com/Linux/2013-10/91911.htm

图片 4

转载本站文章请注明出处:亚洲城手机客户端登录 https://www.little-lily.com/?p=1988

上一篇:

下一篇:

相关文章