概述
最近在做课程设计,主要流程是从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开发过程中遇到的一些问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复