您的位置:首页 > 运维架构

<Hadoop>Pig安装及测试

2016-06-10 10:48 417 查看
参考 http://pig.apache.org/docs/r0.16.0/start.html http://blog.csdn.net/inkfish/article/details/5205999 http://news.tuxi.com.cn/news/122/1225068.html http://www.infoq.com/cn/articles/apache-tez-saha-murthy

一、安装
#只需在主节点上
1.解压授权
sudo cp pig-0.16.0.tar.gz /usr/local
cd /usr/local
sudo tar xzf pig-0.16.0.tar.gz
mv pig-0.16.0 pig
sudo chown -R h:hadoop_group pig

2.配环境变量
sudo gedit ~/.bashrc
#############################
export PIG_HOME=/usr/local/pig
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$ANT_HOME/bin:$PIG_HOME/bin
#############################
source  ~/.bashrc

3.测试安装成功
pig --help  打印出正确的东西

二、四种运行模式
1.本地模式    #本地也可以tez
2.MapReduce模式:需要能访问一个Hadoop集群,并且需要装上HDFS。
#tez模式:Tez能够合并多个阶段的过程,直接无须落地,就能进行下一阶段的任务处理  #内存大时能让小猪飞起来

三、调用方式
Grunt shell方式:通过交互的方式,输入命令执行任务;
Pig script方式:通过script脚本的方式来运行任务;
嵌入式方式:嵌入java源代码中,通过java调用来运行任务。

四、示例
1.grunt shell #local mode
查看所有用户id号
$mkdir pigtest
$cp /etc/passwd ~/pigtest/
$cd ~/pigtest
$pig -x local
grunt> A = load 'passwd' using PigStorage(':');                #注意:等号前后都有空格,语句必须以分号结束。运行时可能出一堆INFO,INFO和WARN不要紧,只要不是ERROR
grunt>  B = foreach A generate $0 as id;
grunt> dump B;         #输出B。运行时会出一堆INFO。在末尾可以看到那些id



grunt> quit; #退出

2.grunt shell#mapreduce mode
start-all.sh   #启动hdfs和yarn服务
pig -x mapreduce
继续上一个例子的操作,在dump的时候是要报错的。因为hdfs中没有配置。这个在官方started中有说明。
配置 hdfs位置
sudo gedit ~/.bashrc
#################也可以不这样指定,而通过pig/conf中的配置
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop
#################
source ~/.bashrc
$pig     #此时,输入 pig 而完整打入就可以进入mapreduce模式。处在pigtest目录下
#重新输入上一个示例
报错 ERROR 2118: Input path does not exist: hdfs://master/user/h/passwd    #注:h是我的用户名
只是因为hdfs中并没有passwd这个文件
重开一个终端
hadoop fs -mkdir /user
hadoop fs -mkdir /user/h
hadoop fs -put /etc/passwd /user/h/
#回到grunt终端,上滚到dump B; 回车
报错 INFO:Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server
这是因为在start-all.sh的时候只启动了hdfs和yarn服务而并没启动 hadoop 的history server 进程
重开一个终端,启动这个进程  $   mr-jobhistory-daemon.sh start historyserver   #此时用jps可以看到这个进程了
回到grunt终端,上滚到dump B; 回车
等待15秒后,mapreduce过程完毕,输出和上一个例子一致的结果。

3.使用tez模式加速#未成功
参见  http://doc.okbase.net/qindongliang1922/archive/157359.html
附上guice3.0文件    
配置tez
cd  /usr/local/pig/lib/h2
hadoop fs -mkdir /user/tez
hadoop fs -put ./* /user/tez
gedit /usr/local/hadoop/etc/hadoop/tez-site.xml
################################################指定在hdfs中的路径,也可以把这个xml放在其他路径,但是需要在环境变量  PIG_CLASSPATH 中添加
<configuration>
    <property>
        <name>tez.lib.uris</name>
       <value>/user/tez</value>
    </property>
</configuration>
#################################################
使用 pig -x tez
遇到问题

Unable to open iterator for alias Final_Events. Backend error : Vertex failed

见此贴
https://issues.apache.org/jira/browse/PIG-4843    和   http://qiita.com/kimutansk/items/35371169e3d7c5022959
#我未能解决,因为反正是要做spark,就不解决tez的问题了,而且tez引擎不够稳定。tez同样适用于hadoop和hive,若要安装tez,请前往
http://tez.apache.org/install.html
http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.0.2/bk_installing_manually_book/content/rpm-chap-tez-1.html

4.嵌入java运行
嵌入式方式与运行于运行普通java类方式没有任何不同,如:
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idmapreduce
    java -cp .:/opt/hadoop/pig/pig-0.5.0-core.jar Idlocal

5.写成(Batch Mode)脚本作为文件参数传入运行
$gedit test.pig
##########################
A = load 'passwd' using PigStorage(':');  -- load the passwd file
B = foreach A generate $0 as id;  -- extract the user IDs
store B into 'id.out';  -- write the results to a folder name id.out
##########################

$pig -x mapreduce test.pig

$hadoop fs -cat /user/h/id.out/*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop pig 集群 2.7.2