• 落叶飞逝的恋
    2018-11-13
    老师,我是个大数据的初学者,因为这个专栏是从零入门的,但是目前的我还不知道如何在自己机器上安装哪些软件?如何操作?因为这些问题没解决,所以没办法真切的体会到文中的处理单词统计大数据的魅力。所以希望老师能讲下必备软件的安装的内容,及操作环节。谢谢
     4
     66
  • intuition
    2018-11-13
    李老师的文章已经不仅仅局限于技术本身 更多的是对人生的的思考 如何去成为一个思考者才是我们所追求的目标
    
     28
  • 西贝木土
    2018-11-13
    package com.company.sparkcore

    import org.apache.log4j.{Level, Logger}
    import org.apache.spark.{SparkConf, SparkContext}

    object CountPVByGroup {
      def main(args: Array[String]): Unit = {
        val conf = new SparkConf()
          .setAppName(CountPVByGroup.getClass.getSimpleName)
          .setMaster("local")
        Logger.getLogger("org.apache.spark").setLevel(Level.OFF)
        Logger.getLogger("org.apache.hadoop").setLevel(Level.OFF)
        val sc = new SparkContext(conf)
        val lines = sc.textFile("file:///e:/pv_users.txt")
        //拼接成(1_25,1)的形式
        val newKeyValue = lines.map(_.split(",")).map(pvdata => ((pvdata(0)+ "_" + pvdata(1)),1))
       //对上述KV进行统计
        val pvcount = newKeyValue.reduceByKey(_ + _)
        //将拼接符号去掉,组合成形如(1,25,1)的形式
        val pvid_age_count = pvcount.map(newkv => (newkv._1.split("_")(0),newkv._1.split("_")(1),newkv._2))
        //结果输出
    // (1,25,1)
    // (2,25,2)
    // (1,32,1)
        pvid_age_count.collect().foreach(println)
      }

    }
    展开

    作者回复: 👍🏻

    
     18
  • 无形
    2018-11-13
    把pageID和age当做key计算出现的次数并做汇总,然后对key排序,输出排序后的key和其对应的总次数
    
     18
  • 朱国伟
    2018-11-17
    单机安装伪hadoop集群
    见:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html
    注:在Mac中安装遇到了一些问题 但是google一下就能解决 恕不一一道来

    思考题解答步骤
    cat pv_users
    1,25
    2,25
    1,32
    2,25

    # 导入该文件到dfs中
    bin/hdfs dfs -put pv_users pv_users

    # 因为每一行只有pageid, age并且中间没有空格 可以直接利用hadoop自带的wordcount程序
    # 读取dfs中的pv_user文件 进行统计 然后将结果输出到pv_users_count中
    bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount pv_users pv_users_count
    # 读取统计结果
    bin/hdfs dfs -cat pv_users_count/part-r-00000
    1,25    1
    1,32    1
    2,25    2
    展开

    作者回复: 👍🏻

    
     16
  • Ahikaka
    2018-11-13
    老师能不能推荐些学大数据的书籍,博客,网站 。
    
     9
  • 喜笑延开
    2018-11-23
    不能光想,必须动手实践:
    ## Mapper
    public class PageMapper extends Mapper<LongWritable,Text,Text,IntWritable> {
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String data = value.toString();
            String[] words = data.split("\n");
            for (String word : words) {
                context.write(new Text(word), new IntWritable(1));
            }
        }
    }
    ## Reducer
    public class PageReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
        @Override
        protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int total=0;
            for (IntWritable value : values) {
                total=total+value.get();
            }
            context.write(key, new IntWritable(total));
        }
    }
    ## Main
    public class PageMain {
        public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
            Job job = Job.getInstance();
            job.setJarByClass(PageMain.class);

            job.setMapperClass(PageMapper.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(IntWritable.class);

            job.setReducerClass(PageReducer.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);

            FileInputFormat.setInputPaths(job,new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));

            job.waitForCompletion(true);


        }
    }

    ## 命令行
    hadoop jar page-1.0-SNAPSHOT.jar PageMain /input/page /output5
    ps:第一次运行报错了~~(不练不知道)
    错误:Initialization of all the collectors failed. Error in last collector was :interface javax.xml.soap.
    原因:编写Main的时候,Text的引用import错了,习惯了弹出提示直接确定~应该导入`import org.apache.hadoop.io.Text;`
    展开

    作者回复: 👍🏻

    
     8
  • 有铭
    2018-11-15
    我想问一下那个计算过程的示意图里map输入部分,上面的是0,12,下面是0,13,是啥意思?

    作者回复: map函数输入的key,表示这行数据在文件中的偏移量,通常忽略掉

     1
     8
  • 一箭中的
    2018-11-13
    将pageid和 age拼接成字符串当做一个key,然后通过Map和Reduce计算即可得出对应的count
    
     8
  • 三木子
    2018-11-13
    看到这个问题,我在想我在怎么想?
    
     5
  • 呆猫
    2018-11-15
    文章真的是看的赏心悦目,尤其是那段描述抽象的文字😃

    作者回复: 谢谢

    
     4
  • Lambda
    2018-11-13
    好像中间拉下了 shuffle
    
     4
  • 小成
    2019-01-01
    老师,我是大数据初学者,除了编程语言本身的,可以推荐一些书籍或者资料辅助这个专栏的学习吗,像hadoop相关类的,这期的代码看不懂了。
    
     3
  • 无处不在
    2018-11-21
    这个如果在复杂或者高级一点,就需要用mapreduce的序列化对象作为key的功能去实现了,最近也在学习大数据,学的时候感觉找到了sql的本质,记得公司前年的项目就是手写了一堆js函数,实现了mongodb的类似sql的分组聚合操作。
    后续可以开设视频的专栏就更好了
    
     3
  • 糊糊
    2018-11-15
    mapreduce核心思想就跟传统的SQL中的group by一样
    
     3
  • 小辉辉
    2018-11-13
    java8中的流式框架也用的MapReduce,之前一直没理解用MapReduce的意义何在,今天突然顿悟。
    软件中很多思想和设计都是通用的,今天接触一种新东西,明天说不定在其它地方又能碰到,又能加深一遍印象。所以说学得多了,很多时间就可以融会贯通了。

    作者回复: 👍🏻

    
     3
  • ward-wolf
    2018-11-14
    我的思路和前面几个同学的类似,就是把文本直接当做key,value使用数字统计,最后就是通过reduce统计出现次数了

    作者回复: 是的

    
     2
  • 曾海飞
    2018-11-14
    为什么相同key的合并是形成<key, value集合>而不是直接形成一个<key, value reduce后的结果>呢?后者不是效率更高吗?

    作者回复: map任务有很多,所以map任务输出的key全部合并在一起才能reduce,请看下期文章。

    
     2
  • 明天更美好
    2018-11-13
    对于大数据来说是盲区,如果应用直接往hbase中写可以吗?2.5万的并发。hbase可以满足我们的查询需求吗?还有日志分析

    作者回复: 你可能需要一个完整的技术架构方案,而不只是HBASE能不能搞定的问题,建议你看下我写另一本书《大型网站技术架构:核心原理与案例分析》,专栏后面也会对大数据架构有各个角度的探讨,欢迎持续关注

    
     2
  • 老男孩
    2018-11-13
    老师关于抽象是洞察事物本质的总结很精辟。关于思考题,我的思路是把pageid+age作为map函数计算key值,value分别是1。然后reduce再根据key对value的集合进行sum。就可以得出sql的结果。

    作者回复: 是的

    
     2
我们在线,来聊聊吧