我是靠谱客的博主 谦让老鼠,最近开发中收集的这篇文章主要介绍HBase-MapReduce开发过程中遇到的一些问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在做课程设计,主要流程是从csv文件中采集数据,存储到HBase中,然后用MapReduce对数据进行统计分析。期间遇到了一些问题,通过各种搜索终于得到解决。在这里将这些问题及其解决方法记录下来。

1.HBase的HMaster自动关闭问题

进入zookeeper里面,删除HBase的数据(慎用),然后重启HBase

./zkCli.sh
rmr /hbase
stop-hbase.sh 
start-hbase.sh 

2.用Maven打包时多模块依赖的处理

项目结构如下图

在这里插入图片描述

其中ETL和statistics两个模块都引用了common模块,在对其单独打包时提示找不到common依赖,打包失败。

解决步骤:

1.对common进行maven package与maven install,我用的是IDEA,直接在右边maven中进行操作。

在这里插入图片描述

2.在最外层的总项目(root)运行maven clean 与maven install 命令

在这里插入图片描述

完成这两步之后就能解决问题。

3.中文存入HBase时变成了类似“xE5x8Fx91xE6x98x8E”的形式

经典的中文编码问题,在使用前调用如下方法进行解码便可解决。

public static String decodeUTF8Str(String xStr) throws UnsupportedEncodingException {
        return URLDecoder.decode(xStr.replaceAll("\\x", "%"), "utf-8");
    }

4.MapReduce的Job提交时报错

在本地写好代码打成jar包放到服务器上运行,结果报错如下:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.Job.getArchiveSharedCacheUploadPolicies(Lorg/apache/hadoop/conf/Configuration;)Ljava/util/Map;
    at org.apache.hadoop.mapreduce.v2.util.MRApps.setupDistributedCache(MRApps.java:491)
    at org.apache.hadoop.mapred.LocalDistributedCacheManager.setup(LocalDistributedCacheManager.java:92)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.<init>(LocalJobRunner.java:172)
    at org.apache.hadoop.mapred.LocalJobRunner.submitJob(LocalJobRunner.java:788)
    at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:240)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
    at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1762)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
    at MapReduce.main(MapReduce.java:49)

解决方法:添加依赖

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>3.1.3</version>
</dependency>

 <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-common</artifactId>
            <version>3.1.3</version>
        </dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>3.1.3</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-jobclient</artifactId>
    <version>3.1.3</version>
    <scope>provided</scope>
</dependency>

其中

hadoop-mapreduce-client-core.jar是支持放在集群上运行的

hadoop-mapreduce-client-common.jar是支持在本地运行的

解决了上述问题之后,我的代码就能顺利在服务器上运行了。

最后要注意的是MapReduce的输出路径不能是已经存在的,否则就会报错。

希望这篇文章能对遇到类似问题的你有所帮助。

最后

以上就是谦让老鼠为你收集整理的HBase-MapReduce开发过程中遇到的一些问题的全部内容,希望文章能够帮你解决HBase-MapReduce开发过程中遇到的一些问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部