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

标签 hadoop mapreduce apache-pig hdfs

我有两个问题:

我有一个很大的记录文件,有几百万条。我需要将此文件从一台机器传输到 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> ...

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

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

最佳答案

关于你的第一个问题,我想盖伊已经回答过了。 至于第二个问题,如果你只是想搜索包含特定字符串的记录,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 默认分隔符是制表符,因此请放置一个不会出现在您的文件中的分隔符。 那么您应该编写一个 UDF,为 CONTAINS 返回一个 bool 值,例如:

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 - 如何在 Hadoop 中的机器之间传输文件并使用 Pig 搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9745374/

相关文章:

hadoop - 幕后黑手

hadoop - Kafka连接HDFS Sink连接器错误

python - 在 Hadoop 上部署 Python pip 包?

hadoop-mapreduce reducer-combiner 输入

python - 在 Pig 中使用 Python UDF 时,如何让 Hadoop 找到导入的 Python 模块?

Hadoop MapReduce - Pig/Cassandra - 无法创建输入拆分

java - 使用 Hadoop-2.2.0 启动 hbase 时出错

database - Hive 的 Bucket Map Join

java - 使用Maven for Java程序在hdfs上写入时的Hadoop错误

Hadoop mapreduce getMapOutput 失败