hadoop分区二次排序和统计示例

1、实验要求:

对基站数据进行排序,要求按电话号码升序,到达时间降序进行排序,并且同时统计用户数和用户拨打电话次数。

2、实验平台

hadoop版本:hadoop-3.2.0
jdk版本:jdk1.8-271
虚拟机:centos7

3、常用命令

运行java程序的jar包:hadoop jar hadoop_sort.jar com.hadoop.sort.My_hadoopsort /input /outfile
(其中第一个参数是jar包路径(在linux本地),第二个参数是main()函数所在的完整类名,第三个参数是输入数据的路径(在hdfs上),第四个参数是输出数据的文件夹(在hdfs上)outfile这个文件夹不能已经存在

删除linux文件夹:rm -rf /home/hz/Docunments/
删除hdfs文件夹:hadoop fs -rm -r -skipTrash /outfile

将得到的hdfs的分区文件合并下载到linux本地:

hadoop fs -getmerge /outfile /home/hz/Documents/result.txt

当我将分散在各个文件的类,集中到一起时:写一个外部类,里面包含各个内部类。(这时内部类要设置成静态:public static class …,因为在后面会直接调用 内部类.class),这样写是为了解除一条警告
在这里插入图片描述
注意:
(1)所有节点都要关闭防火墙
(2)当改变mapper,reducer的输入、输出格式时,继承类的泛型也要对应修改,还要在run()函数里面修改设置的格式。

4、代码实现

(1)实现按电话号码升序,到达时间降序进行排序
创建Maven项目,在pom.xml文件中添加以下内容,自动下载hadoop所需的jar依赖包:

 <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>3.2.0</version>
  </dependency>

如果报错出现了:org.slf4j的错误,就把以下代码粘贴上去

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.5</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.5</version>
</dependency>

https://download.csdn.net/download/qq_42428154/13940220

(2)实现同时统计用户数和用户拨打电话次数,文件中包含了基站数据集,只需要将代码打包成jar即可在hadoop集群上运行。

https://download.csdn.net/download/qq_42428154/13937561

5、问题

(1)当我定义java全局变量统计所有用户数目的时候,发现每个partition是单独计算的,每个partition都是从0开始计数的。
(2)通过hadoop的configure.set()和configure.get()函数来进行统计计数,出现同样的问题
(3)由此,当只设置一个reducetask的情况下就可以直接统计计数了,但这种方式放弃了hadoop的分布式效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值