Hadoop之Pig从安装到使用
2017-11-29 11:19
417 查看
简介
配置
local模式
mapreduce模式
经典案例
相比Java的MapReduce api,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。Pig还提供了一套更强大的数据变换操作,包括在MapReduce中被忽视的连接Join操作。[2]
使用的版本
hadoop:2.7.4
pig:0.16.0
http://mirrors.shuosc.org/apache/pig/pig-0.16.0/
我这里下载的是0.16.0,目前最新的是0.17.0
2、解压到适当目录后,配置环境变量
PIG_HOME 值是pig的根目录
PIG_CLASSPATH 值是hadoop目录下的etc/hadoop
PTAH 值是pig的bin目录
3、输入pig,默认是执行的mapreduce类型
可以选择执行类型,local和mapreduce以及tez
2、password文件内容
3、统计当前工作目录下password文件中用户
核心命令
4、统计结果
命令参考:Hadoop Pig安装及测试
试着在这个模式上执行上面的核心命令,会报错
(注:192.168.31.40 这个是我本地的局域网ip,因为刚开始测试pig是在本地伪分布式环境下测试的)
有人说是因为jobtracker没有启动导致的,然而我这里是hadoop 2.7.4版本,已经不存在这个进程
后来在csdn bbs论坛里搜到一篇自问自答到帖子,他也遇到里同样的问题,解决方法就是换了hadoop的版本就行
然后我就换了公司集群 2.6.5 版本的hadoop上去尝试,结果确实不报这个错误了,报了historyserver进程未启动的错误
之后就如第一种模式的运行结果一样,执行成功
至此Pig初步试用完毕
后续:今天在本地测试了wordcount发现也报同样类型的错误,就是在作业管理界面的logs里,都是说找不到java,所以说上面的问题可能不是hadoop的问题,至少目前来说,本地的单机hadoop都无法正常运行官方示例程序。
在stackoverflow上搜到同样的错误,他的解决方法是更改hadoop-env.sh中的java_home为绝对路径[4]
This was solved when I kept hard coded paths in hadoop-env.sh for JAVA_HOME and JAVA. Though these environment variables are set, somehow Hadoop fails to recognize them.
然而对于我这里的问题并没有效果
其中输入文件为存放在hdfs上/user/root目录下的一个名为111.txt的文件,文件具体内容如下
最终执行结果如下
我们再看一下普通的mapreduce的执行情况
普通的mapreduce执行结果
其实归根结底,pig最后也转化成mapreduce运行的
观察Hadoop Cluster Metrics 作业管理界面
发现两种方式的执行耗时基本一致,上例pig耗时18秒,mr耗时14秒
pig执行完成后直接显示结果,不像mr还得手动cat结果才行,总之各有千秋。
配置
local模式
mapreduce模式
经典案例
简介
Pig是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。[1]相比Java的MapReduce api,Pig为大型数据集的处理提供了更高层次的抽象,与MapReduce相比,Pig提供了更丰富的数据结构,一般都是多值和嵌套的数据结构。Pig还提供了一套更强大的数据变换操作,包括在MapReduce中被忽视的连接Join操作。[2]
使用的版本
hadoop:2.7.4
pig:0.16.0
配置
1、下载http://mirrors.shuosc.org/apache/pig/pig-0.16.0/
我这里下载的是0.16.0,目前最新的是0.17.0
2、解压到适当目录后,配置环境变量
PIG_HOME 值是pig的根目录
PIG_CLASSPATH 值是hadoop目录下的etc/hadoop
PTAH 值是pig的bin目录
3、输入pig,默认是执行的mapreduce类型
可以选择执行类型,local和mapreduce以及tez
pig -x, -exectype - Set execution mode: local|mapreduce|tez, default is mapreduce.
local模式
1、建立pig测试文件夹,启动pig shell 本地模式2、password文件内容
3、统计当前工作目录下password文件中用户
核心命令
grunt> A = load 'password' using PigStorage(':'); grunt> B = foreach A generate $0 as id; grunt> dump B;
4、统计结果
命令参考:Hadoop Pig安装及测试
mapreduce模式
这是pig的默认模式,在终端如果只输入pig就会以mapreduce运行试着在这个模式上执行上面的核心命令,会报错
Failed! Failed Jobs: JobId Alias Feature Message Outputs job_1510640240196_0008 A,B MAP_ONLY Message: Job failed! hdfs://192.168.31.40:9000/tmp/temp-1299691098/tmp835924451, Input(s): Failed to read data from "hdfs://192.168.31.40:9000/user/liuxunming/password" Output(s): Failed to produce result in "hdfs://192.168.31.40:9000/tmp/temp-1299691098/tmp835924451" Counters: Total records written : 0 Total bytes written : 0 Spillable Memory Manager spill count : 0 Total bags proactively spilled: 0 Total records proactively spilled: 0 Job DAG: job_1510640240196_0008 2017-11-27 16:01:18,715 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Failed! 2017-11-27 16:01:18,723 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias B Details at logfile: /Users/liuxunming/pigtest/pig_1511769651826.log
(注:192.168.31.40 这个是我本地的局域网ip,因为刚开始测试pig是在本地伪分布式环境下测试的)
有人说是因为jobtracker没有启动导致的,然而我这里是hadoop 2.7.4版本,已经不存在这个进程
后来在csdn bbs论坛里搜到一篇自问自答到帖子,他也遇到里同样的问题,解决方法就是换了hadoop的版本就行
然后我就换了公司集群 2.6.5 版本的hadoop上去尝试,结果确实不报这个错误了,报了historyserver进程未启动的错误
mr-jobhistory-daemon.sh start historyserver
之后就如第一种模式的运行结果一样,执行成功
至此Pig初步试用完毕
后续:今天在本地测试了wordcount发现也报同样类型的错误,就是在作业管理界面的logs里,都是说找不到java,所以说上面的问题可能不是hadoop的问题,至少目前来说,本地的单机hadoop都无法正常运行官方示例程序。
/bin/bash: /bin/java: No such file or directory
在stackoverflow上搜到同样的错误,他的解决方法是更改hadoop-env.sh中的java_home为绝对路径[4]
This was solved when I kept hard coded paths in hadoop-env.sh for JAVA_HOME and JAVA. Though these environment variables are set, somehow Hadoop fails to recognize them.
然而对于我这里的问题并没有效果
经典案例
wordcount[3]a = LOAD '111.txt' as (line:chararray); words = FOREACH a GENERATE flatten(TOKENIZE(line)) as w; g = GROUP words by w; wordcount = FOREACH g GENERATE group,COUNT(words); dump a
其中输入文件为存放在hdfs上/user/root目录下的一个名为111.txt的文件,文件具体内容如下
www.flyertea.com hm.baidu.com www.flyertea.com eclick.baidu.com www.flyertea.com eclick.baidu.com pos.baidu.com www.flyertea.com www.flyertea.com hm.baidu.com rec.m.sm.cn www.flyertea.com eclick.baidu.com
最终执行结果如下
(rec.m.sm.cn,1) (hm.baidu.com,2) (pos.baidu.com,1) (eclick.baidu.com,3) (www.flyertea.com,6)
我们再看一下普通的mapreduce的执行情况
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /user/root/111.txt /xm/112901
普通的mapreduce执行结果
eclick.baidu.com 3 hm.baidu.com 2 pos.baidu.com 1 rec.m.sm.cn 1 www.flyertea.com 6
其实归根结底,pig最后也转化成mapreduce运行的
观察Hadoop Cluster Metrics 作业管理界面
发现两种方式的执行耗时基本一致,上例pig耗时18秒,mr耗时14秒
pig执行完成后直接显示结果,不像mr还得手动cat结果才行,总之各有千秋。
相关文章推荐
- Alex 的 Hadoop 菜鸟教程: 第16课 Pig 安装使用教程
- Pig安装及简单使用(pig版本0.13.0,Hadoop版本2.5.0)
- Pig安装及简单使用(pig0.12.0 hadoop2.2.0)
- 【hadoop pig】pig安装及使用
- hadoop(十二) - pig安装与使用
- Hadoop 2.2.0下Pig安装及Pig的基础使用
- 在VMWare Workstation上使用RedHat Linux安装和配置Hadoop群集环境01_虚拟机的安装
- hadoop安装配置:使用cloudrea
- hadoop-0.20.2安装及简单使用
- pig,hive安装配置:使用cloudrea
- hadoop工具hive安装使用
- 使用FreeBSD的ports安装hadoop
- hadoop-0.20.2安装及简单使用 ubuntu
- pig安装使用
- pig安装与使用
- hadoop学习笔记之-pig安装及操作实例
- Pig的安装配置与基本使用
- 使用Cygwin模拟Linux环境安装配置运行基于单机的Hadoop
- hadoop安装及使用
- 在VMWare Workstation上使用RedHat Linux安装和配置Hadoop群集环境02_JDK的安装和配置