设为首页 收藏本站
查看: 2173|回复: 0

[经验分享] hadoop+pig实战

[复制链接]

尚未签到

发表于 2018-10-31 09:40:20 | 显示全部楼层 |阅读模式
  一:hadoop
  版本:hadoop-0.20.2.tar.gz
  1.部署
  1.1把hadoop-0.20.2.tar.gz部署到所有节点,通常部署在相同路径下。在conf/hadoop_env.sh里配置好java home,用bin/hadoop验证。
  更好地,编辑/etc/profile,加上下面这些
  export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
  export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre
  export HADOOP_HOME=/usr/local/hadoop
  export PIG_HOME=/usr/local/hadoop/pig-0.9.1
  export PATH=$PATH:$HADOOP_HOME/bin
  export PATH=$PATH:$PIG_HOME/bin
  1.2在master端的keygen传到所有节点上。验证:用master ssh所有节点,不用输入密码就能登录。
  1.3编辑conf/下的 masters slaves mapred-site.xml core-site.xml和hdfs-site.xml(可选)
  masters和slaves分别写入master和slaves的节点ip,一行一个
  mapred-site.xml 改成如下
  
  
  mapred.job.tracker
  masterIP:9001
  
  
  core-site.xml 改成如下
  
  
  fs.default.name
  hdfs://masterIP:9000
  
  
  hdfs-site.xml(可选) 改成如下:
  
  
  dfs.replication
  2
  Default block replication
  
  
  可以看到上面的定义的默认文件副本数是2(2),通常这个值也不会超过3.
  把这4个文件复制到其他节点的相同路径下。
  2.启动/关闭:bin/start-all.sh   bin/stop-all.sh
  二:pig(下载pig时注意版本与hadoop版本)
  于hadoop相同,解压后修改/etc/profile,
  export PIG_HOME=/usr/local/hadoop/pig-0.9.1
  export PATH=$PATH:$PIG_HOME/bin
  可见,我的pig安装在/usr/local/hadoop/pig-0.9.1目录下的。
  在pig/conf/pig.properties最后加上这两句话
  mapred.job.tracker=192.168.1.1:9001
  fs.default.name=hdfs://192.168.1.1:9000
  他们要与hadoop的mapred-site.xml,core-site.xml这两个配置文件内容一致。
  好了,试试吧。输入pig看看有没有刚刚配置的那两个变量hdfs和map-reduce job tracker的信息。
1pig -x local进入一个外壳程序。
DSC0000.png

  学习Hadoop一般的入门都是Oreilly的《《Hadoop权威指南》》中文版,其中测试MapReduce的第一个程序就是统计一个文本文件中单词出现的次数。Pig是为了简化MapReduce开发的,肯定也是能实现这个的。我以这个为例,写一个测试的例子。
  我准备了一个文件,文件名为:nie.txt 里边是一片普通的英文文章,比较长,大约52KB。
  我在自己的home下建立了一个workspace的文件夹,我是把它当作开始目录的。(为什么说这个?因为Pig Load数据的时候相对路径的起始文件路径很重要,搞错了就会出现文件找不到的错误。我开始就犯了这个错误)
  nie.txt文件的路径为: ~/workspace/nie.txt 而我进入Pig外壳程序的起始路径是:~/workspace/ 下面是我的Pig脚本:
1words = load'nie.txt'using PigStorage(' ') as (line); --以空格作为分隔符把内容分词读入2grpd = group words by line;     --以每个单词聚类,真实的是一个MapReduce的Map阶段3cntd = foreach grpd generate group, COUNT(words); -- 这里既上一步Map完成紧接着Reduce阶段进行统计4dump cntd;  --直接在终端打印结果便于查看把它保存到workspace命名为test1.txt。我们直接运行1pig -x localtest1.pig大约10多秒中经过大量的输出,最终会得到结果。01(So,1)02(We,1)03(as,7)04(at,1)05(be,3)06(he,2)07(if,1)08(in,12)09(is,10)10(it,9)11(no,2)12(of,21)13(on,3)14(or,1)15(so,1)16(to,11)17(us,2)18(we,1)前面是单词,后面是计数。当然我的结果很长,已经冲出终端了。  OK,我们的第一个例子已经完美的运行了。下面我解释一下代码。
  如上所见,Pig也支持注释的,他的注释方式有2中,
  一种是SQL的注释方式,如上面的--, --行后边的内容都会忽略
  另一种是Java中的注释方式, /* 注释内容 */ ,它的注释可以一行也可以跨行(Java的程序员是不是很友好?)。
  另外Pig Latin[忘了介绍了,Pig的脚本有专业的名字,叫Pig Latin,不知道神码意思]也是用;[分号]换行的,一条语句可以写在一行也可以多行。Pig在运行前会检查Pig Latin,并且对Pig Latin进行编译,用以确定程序逻辑和分析MapReduce。
  如果程序有简单逻辑错误,运行前都不会编译通过。如我写的时候把group words by line中的line意识的写成了word,运行时出现了:
12013-04-13 22:21:12,619 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/zhenqin/workspace/pig_1365862872616.log22013-04-13 22:21:12,713 [main] INFO  org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop filesystem at: file:///32013-04-13 22:21:13,225 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1025:4Invalid field projection. Projected field [word] does not exist inschema: line:bytearray.5Details at logfile: /home/zhenqin/workspace/pig_1365862872616.log提示没有定义word, 错误是不是也很友好? 哈哈。。。  下面我解释一下我出现过的问题。我在起初测试时进入Pig时不是从workspace进入的,我是从pighome,以bin/pig运行的,而我的统计文件存储在 ~/workspace/下,尽管我在Pig Latin脚本中使用了 load ‘/home/zhenqin/workspace/’或者 load ‘file:///home/zhenqin/workspace/’ 都报错,无法找到文件。为此我纠结了很长时间。
  原来Pig的外壳程序Grunt也是有当前路径的。因此可以使用cd 跳转当前路径。
  如我从pighome下进入Grunt,执行ls命令出现如下:
view sourceprint?01grunt> ls02file:/opt/pig-0.9.2/testfile:/opt/pig-0.9.2/tutorialfile:/opt/pig-0.9.2/libfile:/opt/pig-0.9.2/ivyfile:/opt/pig-0.9.2/CHANGES.txt8750603file:/opt/pig-0.9.2/RELEASE_NOTES.txt222404file:/opt/pig-0.9.2/LICENSE.txt1135805file:/opt/pig-0.9.2/conffile:/opt/pig-0.9.2/licensefile:/opt/pig-0.9.2/NOTICE.txt212006file:/opt/pig-0.9.2/binfile:/opt/pig-0.9.2/build.xml7742707file:/opt/pig-0.9.2/pig-0.9.2.jar1758588208file:/opt/pig-0.9.2/README.txt130709file:/opt/pig-0.9.2/ivy.xml1350910file:/opt/pig-0.9.2/scriptsfile:/opt/pig-0.9.2/pig-0.9.2-withouthadoop.jar6018058当然上面的ls cd等命令都类似Linux的命名,如:chmod,chown,cp,mkdir,mv,cat,rm[相当于rm -R]等。  它同时也支持Hadoop的一些命名,如:
1copyFromLocal localfile hdfsfile2copyToLocal   hdfsfile  localfile在Pig 0.8以上的版本,输入sh 后跟命令, 还可以支持原生的Linux命令,如:1grunt> sh ls-l2总用量 63-rw------- 1 zhenqin zhenqin 52220  2月  3  2012 nie.txt4-rw-rw-r-- 1 zhenqin zhenqin  2896  4月 13 22:03 pig_1365861790591.log5-rw-rw-r-- 1 zhenqin zhenqin  2896  4月 13 22:21 pig_1365862872616.log6-rw-rw-r-- 1 zhenqin zhenqin   443  4月 13 22:21 test1.pig7-rw-rw-r-- 1 zhenqin zhenqin   210  4月 12 21:35 test2.pig8-rw-rw-r-- 1 zhenqin zhenqin   245  4月 12 22:40 test3.pig  三:通过hadoop流向hadoop提交map/reduce job。
  首先,创建maper和reducer脚本。这里使用的是perl。
  cat maper.pl
  while ($line = )
  {
  chomp($line);
  ($rib,$nquery,@rest) = split (/- /, $line);
  my @joined = ($nquery, @rest);
  my $results = join("\t", @joined);
  print "$results\n";
  }
  cat reducer.pl
  while ($line = )
  {
  chomp($line);
  ($nquery,@rest) = split (/ /, $line);
  my @joined = ($nquery, @rest);
  my $results = join("\t", @joined);
  print "$results\n";
  }
  hadoop jar /usr/local/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-streaming.jar  -file ./maper.pl -mapper "perl maper.pl" -file ./reducer.pl -reducer "perl reducer.pl" -input /user/root/test/* -output /user/root/output
  # hadoop fs -cat /user/root/test/test.txt
  - aaaaa 123:123
  - ddddd 321:321
  # hadoop fs -cat /user/root/output/part-00000
  aaaaa   123:123
  ddddd   321:321
  四:给集群添加数据节点
  有的时候, datanode或者tasktracker crash,或者需要向集群中增加新的机器时又不能重启集群。下面方法也许对你有用。
  1.把新机器的增加到conf/slaves文件中(datanode或者tasktracker crash则可跳过)
  2.在新机器上进入hadoop安装目录
  $bin/hadoop-daemon.sh start datanode
  $bin/hadoop-daemon.sh start tasktracker
  3.在namenode上
  $bin/hadoop balancer
  五:另外几下一些常用命令
  解除hdfs安全模式   hadoop dfsadmin -safemode leave
  格式化名称节点 hadoop namenode -format(记得要删除dn的/tmp/hadoop-root目录)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628799-1-1.html 上篇帖子: hadoop 1.0跟hadoop2.0对比 下篇帖子: hadoop 命令手册
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表