当前位置: 代码迷 >> Ruby/Rails >> Hadoop集群上基于Pig的通话记录的查询及异常排解(ERROR 2998: Unhandled internal error. name)
  详细解决方案

Hadoop集群上基于Pig的通话记录的查询及异常排解(ERROR 2998: Unhandled internal error. name)

热度:211   发布时间:2016-04-29 02:14:54.0
Hadoop集群上基于Pig的通话记录的查询及错误排解(ERROR 2998: Unhandled internal error. name)

(1) 安装Pig, 先下载Pig-0.9.2-tar.gz(本人hadoop版本是1.0.1),然后上传到hadoop集群/usr/目录下,然后解压:tar –xzf Pig-0.9.2-tar.gz,并重命名为pig;

(2) 在/etc/profile文件里面添加下面内容:

vim /etc/profile

#set pig path

export PIG_HOME=/usr/pig

export PATH=${PIG_HOME}/bin:${PATH}

export PIG_CLASSPATH=/usr/hadoop/conf  (需要把hadoop/conf目录下的文件拷贝到pig/conf目录下,并添加classpath;由于本人的hadoopclasspath已经指向了hadoopconf目录,所以可以不添加上面的黄色背景的一句,添加也不会错误!)

然后source /etc/profile 使其生效;

(3) 在/usr/pig/目录下 新建logs目录,mkdir logs;并修改文件vim  pig.properties,在其中添加指向logs的路径:pig.logfile=/usr/pig/logs

(4) 然后测试pig配置是否成功:如下所示,证明基本上配置完成!

[[email protected] ~]$ pig

2015-03-25 18:56:41,348 [main] INFO  org.apache.pig.Main - Logging error messages to: /usr/pig/logs/pig_1427281001347.log

2015-03-25 18:56:41,551 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://172.16.2.42:9000

2015-03-25 18:56:41,786 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to map-reduce job tracker at: http://172.16.2.42:9001

grunt>

(5) 接下来就进行实战了:问题说明:由于电信公司一般把通话记录CDR存放在传统的关系数据库中,需要统计或者查询时,只需要简单的几条sql语句即可查找出来;但是随着数据量的不断增大,特别数据量达到海量级别时,如果还是从传统数据库来进行查找的话,将是非常费时的;由于查询可以分解为过滤,聚合,统计等步骤,用分布式(mapreduce)的方式来处理是十分适合的。

(6) 假设关系数据库有一个CDR对应的表CDR_TABLE,其字段分别为start_time(开始时间), end_time(结束时间),calling_number(主叫号码),called_number(被叫号码)cdr_type(通话类型);如下所示:每一行代表一条通话记录:

1312444562132   1312444580006   13712341234     13712341235     1

1312444159800   1312444170000   13712345678     10086   2

假设:查询任务是查询  开始时间是 XXX,被叫号码是10086,通话类型是2的通话记录;因为操作对每一条记录都是独立的,因此可以将表中所有数据存放在hdfs的一个文件cdr.txt中,由于cdr.txtHDFS中是存放在多台计算机中,之间没有相关性,因此可以将计算分布到这些机器,从而减少数据转输的网络开销,达到高的吞吐量。存放后如下所示:

grunt> cat /user/hadoop/cdr.txt

1312444562132   1312444580006   13712341234     13712341235     1

1312444159800   1312444170000   13712345679     10086   2

1312544159800   1312554170000   13712345677     10086   2

1312644159800   1312654170000   13712345676     10086   2

1312744159800   1312764170000   13712345675     10086   2

1312844159800   1312854170000   13712345674     13552132453     2

1312944159800   1312974170000   13712345673     10086   2

1313444159800   1313454170000   13712345672     10086   2

1314444159800   1314544170000   13712345678     10086   2

grunt>

 

(7) 现在有pig来实现mapreduce的方法:

grunt> A = LOAD 'hdfs://172.16.2.42:9000/user/hadoop/cdr.txt' USING PigStorage('\t') AS (start_time:long, end_time:long,calling_number:long, called_number:long, cdr_type:int);

2015-03-25 19:27:58,624 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 2998: Unhandled internal error. name

Details at logfile: /usr/pig/logs/pig_1427282702115.log

grunt>

 

出现上述错误:经过googlebaidu的尝试后也没能把问题解决,但是从中得到一个信息,就是有人说pighive安装在同一台机器上时,会引起一些冲突,但是没有说具体的解决方法;

经过一番的调试后,终于找出了问题的所在:为之前搭建hive环境并运行hive程序时,需要把hive/lib目录下的jar包拷贝到hadoop/lib目录下,然后在/etc/profile里面设置classpath路径指向hadoop/lib下面,这样估计引起了一些冲突,经过详细的排解,发现只需要把从hive拷贝到hadoop的一个jar包删除,即可把问题解决:这个jar包就是:antlr-runtime-3.0.1.jar,现在只需要把hadoop/lib目录下的这个包删除即可,这样既不影响hive的程序运行,也不运行pig程序的运行,执行下面命名:

[[email protected] lib]$ rm -r antlr-runtime-3.0.1.jar

 

删除后,重新执行pig程序:

grunt> A = LOAD 'hdfs://172.16.2.42:9000/user/hadoop/cdr.txt' USING PigStorage('\t') AS (start_time:long, end_time:long,calling_number:long, called_number:long, cdr_type:int);

grunt> B = FILTER A BY start_time > 1300835802 AND called_number ==10086 AND cdr_type ==2;

2015-03-25 20:13:00,021 [main] WARN  org.apache.pig.PigServer - Encountered Warning IMPLICIT_CAST_TO_LONG 2 time(s).

grunt> STORE B INTO 'hdfs://172.16.2.42:9000/user/hadoop/CDR/cdr_result.txt' using PigStorage(); //输入这句后程序才真正运行起来,这完全是分布式,用户不需要关心mapreduce的具体实现方法,因为这是都有pig来实现,这大大降低了程序员的编程难度,显得人性化!

2015-03-25 20:14:42,788 [main] WARN  org.apache.pig.PigServer - Encountered Warning IMPLICIT_CAST_TO_LONG 2 time(s).

 。。。。。。

2015-03-25 20:14:45,026 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 1 map-reduce job(s) waiting for submission.

****hdfs://172.16.2.42:9000/user/hadoop/cdr.txt

 。。。。。。

2015-03-25 20:15:10,767 [main] INFO  org.apache.pig.tools.pigstats.SimplePigStats - Script Statistics: 

HadoopVersion   PigVersion      UserId  StartedAt       FinishedAt      Features

1.0.1   0.9.2   hadoop  2015-03-25 20:14:42     2015-03-25 20:15:10     FILTER

Success!

。。。。。。

2015-03-25 20:15:10,773 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!

 

查看hdfs上的输出结果:

grunt> cat /user/hadoop/CDR/cdr_result.txt

1312444159800   1312444170000   13712345679     10086   2

1312544159800   1312554170000   13712345677     10086   2

1312644159800   1312654170000   13712345676     10086   2

1312744159800   1312764170000   13712345675     10086   2

1312944159800   1312974170000   13712345673     10086   2

1313444159800   1313454170000   13712345672     10086   2

1314444159800   1314544170000   13712345678     10086   2

grunt>

运行成功!

  相关解决方案