hadoop常见错误

xml jar冲突:

https://issues.apache.org/jira/browse/NUTCH-964


三方包依赖:测试时可以先打成一个jar包:

<!-- 包含依赖,打成一个jar包 -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>


hadoop上xml文件读取解析:

这个确实比较麻烦,因为FSDataInputStream对象无法直接传给Digester.parse(InputStream input)作解析,而且直接读取文件也必须依赖Configuration,

可以采用FSDataInputStream先读入文件,后用缓存中文件构造一个输入流或inputsource,具体代码如下:

FSDataInputStream fsdis = null;
        try {
            fs = FileSystem.get(conf);
            Path vcPath = new Path(vcfile);
            if (fs.exists(vcPath)) {
                fsdis = fs.open(vcPath);
            } else {
                logger.error("not find vcfile, filepath=" + vcfile);
            }

            int resultlen = 0;
            byte[] result = new byte[1024 * 1024 * 100];
            
            int bufferlen = -1;
            byte[] buffer = new byte[1024 * 256];
            while ((bufferlen=fsdis.read(buffer)) > 0) {
                for (int i = 0; i < bufferlen; i++, resultlen++) {
                    result[resultlen] = buffer[i];
                }
            }
            
            StringReader sr = new StringReader(new String(result, 0, resultlen));
            InputSource is = new InputSource(sr);
            if (this.is != null) {
                vc = (XXXObject) digester.parse(is);
            }

更合理:

if (CategoryLogic.getNestTree() == null) {
            FileSystem fs = null;
            FSDataInputStream fsdis = null;

            BufferedReader bf = null;
            InputSource is = null;
            try {
                fs = FileSystem.get(conf);
                Path vcPath = new Path(vcfile);
                if (fs.exists(vcPath)) {
                    fsdis = fs.open(vcPath);
                } else {
                    logger.error("not find vcfile, filepath=" + vcfile);
                }

                bf = new BufferedReader(new InputStreamReader(fsdis));
                is = new InputSource(bf);
                CategoryLogic.init(is);
            } catch (IOException e) {
                logger.error("get filesystm error.", e);
            } finally {
                IOUtils.closeQuietly(fsdis);
                IOUtils.closeQuietly(bf);
            }
        }





hadoop上运行的任务出现一部分被kill掉,但是运行结果正常:

这是因为hadoop在运行时发现 一个任务节点运行太慢,会去多个节点运行同一个任务,当一个结束,会kill掉还没结束的点,具体设置如下:

<property>
       <name>mapred.map.tasks.speculative.execution</name>
       <value>false</value>
   </property>

   <property>
       <name>mapred.reduce.tasks.speculative.execution</name>
       <value>false</value>
   </property>


任务没运行完就被结束掉了:

这个是因为任务运行的时间超过了设置任务的最大运行时间,可以先调整以下任务参数,再优化代码

<property>
       <name>mapred.task.timeout</name>
       <value>900000</value>
   </property>


在作mapreduce时,如果需要加载外部文件作解析需要一定内存,如vc解析,默认512m内存不够用,可以修改以下参数作调整:

<property>
  <name>mapred.child.java.opts</name>
  <value>-Xmx1G</value>
</property>


设置map,reduce任务数:

一个job的任务数差不多是固定的,如果map和reduce能同时运行的数量不同,带来的整体速度必然提高

<property>
       <name>mapred.map.tasks</name>
       <value>200</value>
   </property>
   <property>
       <name>mapred.reduce.tasks</name>
       <value>60</value>
   </property>








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Hadoop时,可能会遇到以下一些常见问题: 1. Hadoop集群的配置和部署:在构建Hadoop集群时,可能会遇到配置和部署问题,例如节点的添加、网络设置和安全性配置等。 2. 数据丢失或损坏:在数据处理过程中,可能会发生数据丢失或损坏的情况。这可能是由于硬件故障、网络问题或错误的数据处理操作引起的。 3. 任务调度和资源管理:Hadoop使用了YARN(Yet Another Resource Negotiator)来进行任务调度和资源管理。在配置和使用YARN时,可能会遇到问题,例如任务队列管理、资源限制和优先级等。 4. 性能调优:在处理大规模数据时,性能问题可能成为一个挑战。可能需要进行性能调优,例如调整数据块大小、优化数据压缩和并行度设置等。 5. 安全性和权限控制:Hadoop提供了一些安全性和权限控制机制,如Kerberos认证和访问控制列表(ACL)。在配置和使用这些机制时,可能会遇到问题,例如配置错误、权限不足或用户认证失败等。 6. 日志和故障排查:当Hadoop集群发生故障或出现错误时,查看日志文件是一种常见的排查方法。但是,理解和分析日志可能会具有挑战性,特别是在大规模集群和复杂的应用程序中。 这些是使用Hadoop常见的问题,但每个问题的具体解决方案可能会因环境和应用场景而异。为了解决这些问题,可以查阅Hadoop官方文档、在线论坛或咨询专业人士的意见。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值