实验环境及配置


  • 版本:hadoop-2.7.3
  • 模式:伪分布式
  • 网络模式:NAT
  • 虚拟机ip:192.168.215.135(读者根据自己得实际情况修改)
  • 虚拟机主机名称:hadoop001
  • 虚拟机内存:4G
  • kettle版本5.4(由于虚拟机内存有限,尽量使用低版本的)
  • kettle环境安装及配置(参考之前的博客)

一、任务说明


  • 测试数据:电商日志weblogs_rebuild
  • 要求:将weblogs_rebuild中的数据进行格式化,格式化成如下内容:
    • 原始格式
      323.81.303.680 - - [25/Oct/2011:01:41:00 -0500] "GET /download/download6.zip HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19"
      
    • 格式化(预处理)格式
      323.81.303.680  25/Oct/2011:01:41:00 -0500      25      Oct     10      2011    01      41      00   -0500    GET     /download/download6.zip 200     0       -       Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.19) Gecko/2010031422 Firefox/3.0.19
      
    • 格式化(预处理)格式对应的字段
      client_ip
      full_request_date
      day
      month
      year
      hour
      minute
      second
      timezone
      http_verb
      uri
      http_status_code
      bytes_returned
      referrer
      user_agent
      firefox_gecko_version
      firefox_gecko_version_major
      firefox_gecko_version_minor
      firefox_gecko_version_a
      firefox_gecko_version_b 
      
    • 最终需要目标字段,如下:
      client_ip
      full_request_date
      day
      month
      month_num
      year
      hour
      minute
      second
      timezone
      http_verb
      uri
      http_status_code
      bytes_returned
      referrer
      user_agent
      

二、设计转换和作业


  1. 设计mapper的转换
    在这里插入图片描述
  2. 设计Job作业
    在这里插入图片描述

三、配置转换和作业


  1. 配置mapper转换

    1. 上图所示中的 "Input"指的是左边菜单栏中Big Data菜单下的MapReduce Input 组件,双击进行编辑:
      在这里插入图片描述

    2. 上图所示中的【正则表达式】 指的是左边菜单栏中【脚本】菜单下的【正则表达式】组件,双击进行编辑:注意: 其中的"步骤名称":可以任意取名的,按照如图进行配置
      在这里插入图片描述
      上图中的【正则表达式】部分的内容如下:

      ^([^\s]{7,15})\s            # client_ip
      -\s                         # unused IDENT field
      -\s                         # unused USER field
      \[((\d{2})/(\w{3})/(\d{4})  # request date dd/MMM/yyyy
      :(\d{2}):(\d{2}):(\d{2})\s([-+ ]\d{4}))\]
                                  # request time :HH:mm:ss -0800
      \s"(GET|POST)\s             # HTTP verb
      ([^\s]*)                     # HTTP URI
      \sHTTP/1\.[01]"\s           # HTTP version
       
      (\d{3})\s                   # HTTP status code
      (\d+)\s                     # bytes returned
      "([^"]+)"\s                 # referrer field
       
      "                           # User agent parsing, always quoted.
      "?                          # Sometimes if the user spoofs the user_agent, they incorrectly quote it.
      (                           # The UA string
        [^"]*?                    # Uninteresting bits
        (?:
          (?:
           rv:                    # Beginning of the gecko engine version token
           (?=[^;)]{3,15}[;)])    # ensure version string size
           (                      # Whole gecko version
             (\d{1,2})                   # version_component_major
             \.(\d{1,2}[^.;)]{0,8})      # version_component_minor
             (?:\.(\d{1,2}[^.;)]{0,8}))? # version_component_a
             (?:\.(\d{1,2}[^.;)]{0,8}))? # version_component_b
           )
           [^"]*                  # More uninteresting bits
          )
         |
          [^"]*                   # More uninteresting bits
        )
      )                           # End of UA string
      "?
      "
      

      为上图中的【捕获组(Capture Group)】字段新增新的【字段】,字段类型都为【String】类型,具体字段如下所示:

      client_ip
      full_request_date
      day
      month
      year
      hour
      minute
      second
      timezone
      http_verb
      uri
      http_status_code
      bytes_returned
      referrer
      user_agent
      firefox_gecko_version
      firefox_gecko_version_major
      firefox_gecko_version_minor
      firefox_gecko_version_a
      firefox_gecko_version_b 
      

      部分截图如下:
      在这里插入图片描述
      切换到【正则表达式】的【内容】部分,按照如下截图进行配置,勾选【在表达式中允许有空格和注释】
      在这里插入图片描述

    3. 设计图中所示的【过滤记录】组件属于【流程】中的组件,根据条件进行过滤,如判断从前面步骤传递过来的字段是否存在或者不为空或者字段数量和类型是符合要求的则走【值映射】,否则走【空操作】,具体配置如下图:
      在这里插入图片描述

    4. 【值映射】组件配置,是将前面步骤传递过来的月份(month)字段做映射,将其数字化,如下所示:
      在这里插入图片描述

    5. 【空操作】组件,无需做任何配置,只需将组件图标拖拽至对应的位置即可;

    6. 上图所示中的"利用Janino计算Java表达式" 指的是左边菜单栏中"脚本"菜单下的“利用Janino计算Java表达式” 组件,双击进行编辑:
      在这里插入图片描述
      其中【Java expression】中的内容为最终需要输出格式,具体内容如下:

      client_ip + '\t' + full_request_date + '\t' + day + '\t' + month + '\t' + month_num + '\t' + year + '\t' + hour + '\t' + minute + '\t' + second + '\t' + timezone + '\t' + http_verb + '\t' + uri + '\t' + http_status_code + '\t' + bytes_returned + '\t' + referrer + '\t' + user_agent
      
    7. 上图所示中的【MapReduce Output】组件配置如下:
      在这里插入图片描述

  2. 配置Job作业

    1. 上图所示中的"START" 指的是左边菜单栏中"通用"菜单下的START组件,如下所示:
      在这里插入图片描述
    2. 上图所示中的"Pentaho MapReduce" 指的是左边菜单栏中Big Data菜单下的Pentaho MapReduce组件,双击进行编辑:
      1. 【A】配置Hadoop Cluster:
        在这里插入图片描述

        特别注意: 如下配置,如果在Windows上(C:\Windows\System32\drivers\etc\hosts)配置了虚拟机主机名称和虚拟机的IP映射关系,则如下配置写IP地址或者主机名称都可以
        在这里插入图片描述

      2. 【B】配置Mapper,把之前新建的mapper的转换放进来
        在这里插入图片描述

      3. 【C】配置Job Setup
        在这里插入图片描述
        其中InputFormat类为:org.apache.hadoop.mapred.TextInputFormat
        其中OutputFormat类为:org.apache.hadoop.mapred.TextOutputFormat

      4. 【D】配置Cluster,选择自己新建的Hadoop Cluster,设置Reduce Task为0,勾选【Enable Blocking】
        在这里插入图片描述

四、运行转换和作业


  1. 前提: 运行前,务必确保hadoop集群已经启动,并且已经下载好将【测试数据】并上传至HDFS上/user/root/raw目录下
  2. 选择job任务,切换到job视图后,点击kettle工作区顶部的启动按钮,在弹窗中,点击执行按钮
  3. 运行
    在这里插入图片描述

五、查看结果


  1. 在kettle控制台查看结果:
    在这里插入图片描述

    在这里插入图片描述

  2. 在Hadoop上查看结果,即查看Yarn容器上是否接收到该任务:
    在这里插入图片描述

    等待执行结束!

  3. 成功后的查看结果: 如成功,则可以查看下HDFS上的结果:
    执行: hdfs dfs -cat /user/root/mr/log/part-00000|head
    在这里插入图片描述

    如不成功,请查看报错日志,解决错误后,请在继续上述步骤
    我的成功了,可以喝杯咖啡去咯祝大家好运!!!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐