【问题标题】:how to load twitter data from hdfs using pig?如何使用 pig 从 hdfs 加载 twitter 数据?
【发布时间】:2016-03-17 14:22:27
【问题描述】:

我只是使用 Flume 流式传输一些 twitter 数据并将其集群到 HDFS 现在我尝试将其加载到 pig 中进行分析。由于默认的 JsonLoader 函数无法加载数据,所以我在谷歌搜索一些可以加载这种类型的库数据。我找到了这个link 并按照那里的说明进行操作。

这是结果

REGISTER '/home/hduser/Downloads/json-simple-1.1.1.jar';

2016-02-22 20:54:46,539 [main] INFO  org.apache.hadoop.conf.Configuration.deprecation - fs.default.name is deprecated. Instead, use fs.defaultFS

其他拖曳命令也一样。

现在,当我尝试使用此命令加载数据时

load_tweets = LOAD '/TwitterData/' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS myMap;

它告诉我这个错误

2016-02-22 20:58:01,639 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1070: Could not resolve com.twitter.elephantbird.pig.load.JsonLoader using imports: [, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.]
Details at logfile: /home/hduser/pig-0.15.0/pig_1456153061619.log

那么如何解决并正确加载呢?

注意:我的数据是关于最近上映的电影死侍推特数据。

【问题讨论】:

    标签: hadoop twitter apache-pig


    【解决方案1】:

    您需要在 pig 中注册下面的 jar,此 jar 包含您尝试访问的相应类。

    象鸟猪4.1.jar

    已编辑:正确的步骤。

    REGISTER '/home/hdfs/json-simple-1.1.jar';
    
    REGISTER '/home/hdfs/elephant-bird-hadoop-compat-4.1.jar';
    
    REGISTER '/home/hdfs/elephant-bird-pig-4.1.jar';
    
    load_tweets = LOAD '/user/hdfs/twittes.txt' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS myMap;
    
    dump load_tweets;
    

    我在本地集群上使用了上述步骤并且工作正常,因此您需要在运行负载之前添加这些 jar。

    【讨论】:

    • 我提到我注册这条指令是 REGISTER '/home/hduser/Downloads/elephant-bird-pig-4.1.jar';并且输出是 2016-02-22 22:06:43,318 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - fs.default.name 已弃用。相反,使用 fs.defaultFS 2016-02-22 22:06:43,319 [main] INFO org.apache.hadoop.conf.Configuration.deprecation - io.bytes.per.checksum 已弃用。相反,使用 dfs.bytes-per-checksum
    • 这些只是 INFO 消息,您是否在添加该 jar 后执行了您的猪负载?如果是,那么执行加载命令后的输出是什么?
    • ok,那么可能你的“load”命令执行成功了,你可以用“dump load_tweets”命令检查一下,看看输出?
    • dump load_tweets; 输出为 2016-02-22 23:34:19,500 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1003 :无法在日志文件中找到别名 load_tweets 的操作员详细信息:/home/hduser/pig-0.15.0/pig_1456162429420.log
    • 我期待一些数据的地方
    【解决方案2】:

    您需要注册 3 个 Jar 文件,如博客所示。每个罐子都有其重要性。

    elephant-bird-hadoop-compat-4.1.jar-Utilities 用于处理 Hadoop 1.x 和 2.x 之间的不兼容问题。

    elephant-bird-pig-4.1.jar--pig的Json加载器,它将每条Json记录加载到Pig中。

    json-simple-1.1.1.jar--Java中可用的Json Parser之一

    注册jar后,你可以通过下面的猪脚本加载推文。

    load_tweets = LOAD '/user/flume/tweets/' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS myMap;
    

    加载推文后,您可以通过转储查看它们

    dump load_tweets
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      • 2017-04-27
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多