解决Hadoop的大数据问题

时间:2014-02-07 08:30:12

标签: java hadoop

我的项目包括比较具有相同数据但结构不同的两个大文件(csv文件> 4Go)(列id可以是文件1中的第一个文件,文件2中的第9个文件...)。 我以为我可以使用MapReduce程序解决这个问题。但实际上我对阅读Pig和Hive有点困惑......

Hive是否更容易解决这个问题,我是否需要使用map / reduce程序?

2 个答案:

答案 0 :(得分:1)

如果您愿意查看非Hadoop解决方案,那么对于HPCC平台(http://hpccsystems.com/)的代码来说,这个问题相对简单。

首先,您将文件喷洒到HPCC平台上,然后使用各自的结构定义这两个文件,并进行比较,最有可能使用JOIN函数。这里有一些功能齐全的代码来演示它是如何完成的:

rec1 := RECORD  //record layout of first file
  UNSIGNED ID;
  STRING20 txt1;
  STRING20 txt2;
  STRING20 txt3;
END;    

rec2 := RECORD  //record layout of second file
  STRING20 Str2;
  STRING20 Str1;
  STRING20 Str3;
  UNSIGNED ColumnID; 
END;    

// This is the way the files would be defined using your CSV files:
// ds1 := DATASET('FirstCSVfile',rec1,CSV);
// ds2 := DATASET('SecondCSVfile',rec2,CSV);

// These inline files just demo the code:
ds1 := DATASET([{1,'Field1','Field2','Field3'},
                {2,'Field1','Field2','Field3'},
                {3,'Field1','Field2','Field3'},
                {4,'Field1','Field2','Field3'},
                {5,'Field1','Field2','Field3'}],rec1);

ds2 := DATASET([{'Field2','Field1','Field3',1},
                {'F2','Field1','Field3',2},
                {'Field2','F1','Field3',3},
                {'Field2','Field1','Field3',5}],rec2);

Rec1 CmpFields(Rec1 L, Rec2 R) := TRANSFORM
  SELF.ID := L.ID;
  SELF.txt1 := IF(L.txt1=R.Str1,L.txt1,'');
  SELF.txt2 := IF(L.txt2=R.Str2,L.txt2,'');
  SELF.txt3 := IF(L.txt3=R.Str3,L.txt3,'');
END;

Cmp := JOIN(ds1,ds2,LEFT.ID = RIGHT.ColumnID,CmpFields(LEFT,RIGHT),LEFT OUTER);

Cmp;                                  //just show the result
Cmp(txt1='' AND txt2='' AND txt3=''); // filter for only non-matches on ID
Cmp(txt1='' OR  txt2='' OR  txt3=''); // filter for all non-matching field data

这是基于匹配的ID字段值的两个文件的简单LEFT OUTER JOIN(即使它们的命名和定位不同)。 TRANSFORM函数进行逐字段比较(注意,这两个文本字段在两个文件中的名称也不同),只是在字段值不匹配时产生空白。

答案 1 :(得分:0)

Hive基本上是用于在数据上放置表结构,并允许您执行SQL命令。如果您很好地了解数据结构并可以创建相应的表,则可以将数据上传到HDFS和create an external table over the top

创建查询时,Hive会将其解释为MapReduce作业并针对数据运行它。无需编写自己的地图缩减工作。

我个人并不喜欢Talend,但它可能值得一看,因为它是免费的并且确实做得很好。我不喜欢它,因为你下载Talend试图销售咨询服务时会有一连串的联系。

给Talend一个机会,看看Talend by example