private void writeLayout(
     OnlineDayLog2 onlineDayLog2, String dimType, String vkey, String suffix, Context context)
     throws IOException, InterruptedException {
   String[] paramArr =
       new String[] {
         onlineDayLog2.getAppId(),
         onlineDayLog2.getAppVer(),
         onlineDayLog2.getPlatform(),
         onlineDayLog2.getChannel(),
         onlineDayLog2.getExtendsHelper().getCnty(),
         onlineDayLog2.getExtendsHelper().getProv(),
         Constants.PLAYER_TYPE_ONLINE,
         dimType,
         vkey
       };
   keyObj.setOutFields(paramArr);
   valObj.setOutFields(one);
   keyObj.setSuffix(suffix);
   context.write(keyObj, valObj);
   if ("Y".equals(onlineDayLog2.getIsNewPlayer())) {
     paramArr[paramArr.length - 3] = Constants.PLAYER_TYPE_NEWADD;
     context.write(keyObj, valObj);
   }
 }
  @Override
  protected void map(LongWritable key, Text value, Context context)
      throws IOException, InterruptedException {

    String[] paraArr = value.toString().split(MRConstants.SEPERATOR_IN);
    OnlineDayLog2 onlineDayLog2 = new OnlineDayLog2(paraArr);

    // 新增活跃玩家数、登录次数、在线时长
    String[] keyFields =
        new String[] {
          onlineDayLog2.getAppId(),
          onlineDayLog2.getAppVer(),
          onlineDayLog2.getPlatform(),
          onlineDayLog2.getChannel(),
          onlineDayLog2.getExtendsHelper().getCnty(),
          onlineDayLog2.getExtendsHelper().getProv(),
          Constants.PLAYER_TYPE_ONLINE
        };
    String[] valFields =
        new String[] {
          onlineDayLog2.getTotalLoginTimes() + "", onlineDayLog2.getTotalOnlineTime() + ""
        };
    keyObj.setOutFields(keyFields);
    valObj.setOutFields(valFields);
    keyObj.setSuffix(Constants.SUFFIX_CHANNEL_ONLINE_SUM);
    context.write(keyObj, valObj);
    if ("Y".equals(onlineDayLog2.getIsNewPlayer())) {
      keyFields[keyFields.length - 1] = Constants.PLAYER_TYPE_NEWADD;
      context.write(keyObj, valObj);
    }

    // 机型分布
    String brand = onlineDayLog2.getExtendsHelper().getBrand();
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_BRAND_DIS + "",
        brand,
        Constants.SUFFIX_CHANNEL_LAYOUT_EQUIP,
        context);

    // 网络分布
    String netType = onlineDayLog2.getExtendsHelper().getNetwork(); // 网络类型
    String netOp = onlineDayLog2.getExtendsHelper().getNetop(); // 宽带运营商
    String mobileOp = onlineDayLog2.getExtendsHelper().getMobileop(); // 移动运营商
    mobileOp = StringUtil.isEmpty(mobileOp) ? "-" : mobileOp;
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_NET_TYPE_DIS + "",
        netType,
        Constants.SUFFIX_CHANNEL_LAYOUT_EQUIP,
        context);
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_BROAD_OPER_DIS + "",
        netOp,
        Constants.SUFFIX_CHANNEL_LAYOUT_EQUIP,
        context);
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_MOBILE_OPER_DIS + "",
        mobileOp,
        Constants.SUFFIX_CHANNEL_LAYOUT_EQUIP,
        context);

    // 登录时段分布
    String onlineRecoeds = onlineDayLog2.getOnlineRecords();
    Map<Integer, Integer> map = StringUtil.getMapFromJson(onlineRecoeds, type);
    if (null != map && !map.isEmpty()) {
      int minLoginTime = 0;
      for (int loginTime : map.keySet()) {
        // 计算得到一天登录的最小时间
        if (0 == minLoginTime) {
          minLoginTime = loginTime;
        }
        minLoginTime = Math.min(loginTime, minLoginTime);
      }
      cal.setTimeInMillis(1000L * minLoginTime);
      int hour = cal.get(Calendar.HOUR_OF_DAY);
      writeLayout(
          onlineDayLog2,
          Constants.DIM_TYPE_LOGIN_HOUR_DIS + "",
          hour + "",
          Constants.SUFFIX_CHANNEL_LAYOUT_ONLINE,
          context);
    }

    // 登录次数
    int loginTimes = onlineDayLog2.getTotalLoginTimes();
    int loginTimesRange = EnumConstants.getItval4DayLoginTimes(loginTimes);
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_LOGIN_TIMES_DIS + "",
        loginTimesRange + "",
        Constants.SUFFIX_CHANNEL_LAYOUT_ONLINE,
        context);

    // 用户城市分布
    String city = onlineDayLog2.getExtendsHelper().getCity();
    writeLayout(
        onlineDayLog2,
        Constants.DIM_TYPE_CITY_NUM_DIS + "",
        city,
        Constants.SUFFIX_CHANNEL_LAYOUT_ONLINE,
        context);
  }