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

5sxhfpxr  于 2021-06-21  发布在  Pig
关注(0)|答案(3)|浏览(291)

我有两个问题:
我有一大堆记录,几百万张。我需要将此文件从一台计算机传输到hadoop群集计算机。我猜hadoop中没有scp命令(或者有吗?)如何将文件传输到hadoop机器?
另外,一旦文件在hadoop集群上,我想搜索包含特定字符串的记录,比如“xyztechnologies”。怎么做这是Pig?一些示例代码会给我一个很好的开端。
这是我第一次使用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> ...

另外,请注意,我想在记录中的任何位置搜索字符串,因此我将tab分隔的记录作为一列进行读取:
a=使用pigstorage('\n')作为(y:chararray)加载'/user//part-00000';

tpxzln5u

tpxzln5u1#

对于你的第一个问题,我想那家伙已经回答了。至于第二个问题,如果您只想搜索包含特定字符串的记录,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,所以请放置一个不出现在文件中的delimeter。然后,您应该编写一个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());
}
}

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

jc3wubiy

jc3wubiy2#

用于复制到hadoop。1您可以在另一台计算机上安装hadoop客户端,然后从命令行2执行hadoop dfs-copyfromlocal。您可以简单地编写一个java代码,使用文件系统api复制到hadoop。
为了Pig。假设您知道字段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();
ukdjmx9f

ukdjmx9f3#

您好,您可以使用hadoop grep函数来查找文件中的特定字符串。例如,我的文件包含以下数据
嗨,我自己。我喜欢hadoop。hadoop很好。我在练习。
所以hadoop命令是hadoop fs-text“file name with path'| grep“string to be found out”
pig shell:——将文件数据加载到pig变量中

**数据=使用pigstorage()作为(text:chararray);

--查找所需文本
txt=筛选数据依据($0匹配项'。要查找的字符串');
--显示数据。
转储txt---或使用txt;
--将其存储在另一个文件中,使用pigstorage()将txt存储到“path”中;

相关问题