如何在Hadoop中的机器之间传输文件,并使用Pig搜索字符串



我有两个问题:

我有一大堆记录,几百万张。我需要将这个文件从一台机器传输到hadoop集群机器。我猜hadoop中没有scp命令(或者有吗?)如何将文件传输到hadoop机器?

此外,一旦文件在我的hadoop集群上,我想搜索包含特定字符串的记录,比如"XYZTechnologies"。猪是怎么做到的?一些示例代码会让我领先一步。

这是我第一次使用Hadoop/Pig。所以,如果这是一个"太基本"的问题,请原谅我。

编辑1

我尝试了Jagaran的建议,得到了以下错误:

2012-03-18 04:12:55,655 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1000: Error during parsing. Encountered " "(" "( "" at line 3, column 26.
Was expecting:
    <QUOTEDSTRING> ...

此外,请注意,我想在记录中的任何位置搜索字符串,所以我将以制表符分隔的记录作为一列读取:

A=使用PigStorage('\n')AS(Y:chararray)加载'/user/abc/part-00000';

对于你的第一个问题,我认为Guy已经回答了。至于第二个问题,如果你只想搜索包含特定字符串的记录,bash脚本会更好,但如果你坚持Pig,这就是我的建议:

A = load '/user/abc/' using PigStorage(',') AS (Y:chararray);
B = filter A by CONTAINS(A, 'XYZTechnologies');
store B into 'output' using PigStorage()

请记住,PigStorage默认的delimeter是tab,所以放一个不会出现在文件中的delimet。然后应该编写一个UDF,为CONTAINS返回布尔值,类似于:

public class Contains extends EvalFunc<Boolean> {
@Override
public Boolean exec(Tuple input) throws IOException  
{
    return input.get(0).toString().contains(input.get(1).toString());
}
}

我没有测试这个,但这是我会尝试的方向。

用于复制到Hadoop。1.您可以在另一台机器上安装Hadoop客户端,然后执行hadoop-dfs-copyFromLocal来自命令行2.您可以简单地编写一个java代码,使用FileSystem API将其复制到hadoop。

给猪。假设您知道字段2可能包含XYZ技术

A = load '<input-hadoop-dir>' using PigStorage() as (X:chararray,Y:chararray);
-- There should not be "(" and ")" after 'matches'
B = Filter A by Y matches '.*XYZTechnologies.*';
STORE B into 'Hadoop=Path'  using PigStorage();

嗨,您可以使用hadoop grep函数来查找文件中的特定字符串。例如,我的文件包含一些数据,如下

你好xyz。我喜欢hadoop。hadoop很好。我在练习

因此hadoop命令是hadoop fs-text"要查找的带有路径的文件名"|grep"字符串"

清管器外壳:--将文件数据加载到清管器变量中

**data=LOAD"带路径的文件",使用PigStorage()作为(text:chararray);

--查找所需的文本

txt=过滤数据依据($0 MATCHES'.要查找的字符串。')

--显示数据。

转储txt----或使用Illustrated txt;

--将其存储在另一个文件中使用PigStorage()将txt存储到"路径"中;

相关内容

  • 没有找到相关文章

最新更新