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

[经验分享] Linux系统 分布式文件系统 hadoop 调用 php 脚本

[复制链接]

尚未签到

发表于 2018-10-31 13:39:37 | 显示全部楼层 |阅读模式
    本文重要是以安装和应用hadoop-0.12.0为例,指出在陈设Hadoop的时间轻易碰到的题目以及怎样办理。
  硬件环境
  共有3台呆板,均应用的FC5体系,Java应用的是jdk1.6.0。IP设置如下:
  dbrg-1:202.197.18.72
  dbrg-2:202.197.18.73
  dbrg-3:202.197.18.74这里有一点必要夸大的就是,务须要确保每台呆板的主机名和IP所在之间能精确理会。一个很大略的测试办法就是ping一下主机名,比如在dbrg-1上ping dbrg-2,假如能ping通就OK!若不能精确理会,可以批改/etc/hosts文件,假如该台呆板作Namenode用,则必要在hosts文件 中加上集群中全部呆板的IP所在及其对应的主机名;假如该台呆板作Datanode用,则只必要在hosts文件中加上本机IP所在和Namenode机 器的IP所在。以本文为例,dbrg-1中的/etc/hosts文件看起来就应当是如许的:
  127.0.0.0 localhost localhost
  202.197.18.72 dbrg-1 dbrg-1
  202.197.18.73 dbrg-2 dbrg-2
  202.197.18.74 dbrg-3 dbrg-3dbrg-2中的/etc/hosts文件看起来就应当是如许的:
  127.0.0.0 localhost localhost
  202.197.18.72 dbrg-1 dbrg-1
  202.197.18.73 dbrg-2 dbrg-2在上一篇学习条记中提到过,对付Hadoop来说,在HDFS看来,节点分为Namenode和Datanode,此中Namenode只有一 个,Datanode可以是很多;在MapReduce看来,节点又分为Jobtracker和Tasktracker,此中Jobtracker只有一 个,Tasktracker可以是很多。
  我是将namenode和jobtracker陈设在dbrg-1上,dbrg-2,dbrg-3作为datanode和tasktracker。固然你也可以将namenode,datanode,jobtracker,tasktracker整个陈设在一台呆板上
  目次结构
  由于Hadoop哀求全部呆板上hadoop的陈设目次结构要相同,并且都有一个相同的用户名的帐户。
  我的三台呆板上是如许的:都有一个dbrg的帐户,主目次是/home/dbrg
  Hadoop陈设目次结构如下:/home/dbrg/HadoopInstall,全部的hadoop版本放在这个目次中。
  将hadoop0.12.0紧缩包解压至HadoopInstall中,为了利便以后升级,提议成立一个链接指向要应用的hadoop版本,不妨设为hadoop
  [dbrg@dbrg-1:HadoopInstall]$ln -s hadoop0.12.0 hadoop
  如许一来,全部的设置文件都在/hadoop/conf/目次中,全部推行措施都在/hadoop/bin目次中。
  但 是由于上述目次中hadoop的设置文件和hadoop的安装目次是放在一起的,如许一旦日后升级hadoop版本的时间全部的设置文件都市被覆盖,因此 提议将设置文件与安装目次星散,一种比拟好的行动就是成立一个寄放设置文件的目次,/home/dbrg/HadoopInstall/hadoop- config/,然后将/hadoop/conf/目次中的hadoop_site.xml,slaves,hadoop_env.sh三个文件拷贝到 hadoop-config/目次中(这个题目很稀疏,在官网上的Getting Started With Hadoop中说是只必要拷贝这个三个文件到本身创建的目次就可以了,但我在实际设置的时间创造还必需把masters这个文件也拷贝到hadoop- conf/目次中才行,不然启动Hadoop的时间就会报错说找不到masters这个文件),并指定环境变量$HADOOP_CONF_DIR指向该目 录。环境变量在/home/dbrg/.bashrc和/etc/profile中设定。
  综上所述,为了利便以后升级版本,我们必要做到设置文件与安装目次星散,并通过设定一个指向我们要应用的版本的hadoop的链接,如许可以镌汰我们对设置文件的掩护。在下面的部分,你就会了解到如许星散以及链接的好处了。
  SSH设置
  在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和收场各个节点上的种种守卫进程的,这就必要在节点之间推行指令的时间是不必要输入暗码的行动,故我们必要设置SSH应用无暗码公钥认证的行动。
  起首要担保每台呆板上都装了SSH做事器,且都正常启动。实际中我们用的都是OpenSSH,这是SSH协议的一个免费开源实现。FC5中默认安装的OpenSSH版本是OpenSSH4.3P2。
  以 本文中的三台呆板为例,如今dbrg-1是主节点,它必要主动提倡SSH毗连到dbrg-2和dbrg-3,对付SSH做事来说,dbrg-1就是SSH 客户端,而dbrg-2、dbrg-3则是SSH做事端,因此在dbrg-2,dbrg-3上必要断定sshd做事已经启动。大略的说,在dbrg-1上 必要天生一个密钥对,即一个私钥,一个公钥。将公钥拷贝到dbrg-2,dbrg-3上,如许,比如当dbrg-1向dbrg-2提倡ssh毗连的时 候,dbrg-2上就会天生一个随机数并用dbrg-1的公钥对这个随机数举办加密,并发送给dbrg-1;dbrg-1收到这个加密的数以后用私钥举办 解密,并将解密后的数发送回dbrg-2,dbrg-2确认解密的数无误后就允许dbrg-1举办毗连了。这就完成了一次公钥认证过程。对付本文中的三台呆板,起首在dbrg-1上天生密钥对:
  [dbrg@dbrg-1:~]$ssh-keygen -t rsa

  这 个下令将为dbrg-1上的用户dbrg天生其密钥对,扣问其生涯路径时直接回车采用默认路径,当提醒要为天生的密钥输入passphrase的时间,直 接回车,也就是将其设定为空暗码。天生的密钥对id_rsa,id_rsa.pub,默认存储在/home/dbrg/.ssh目次下。然后将>
  [dbrg@dbrg-1:.ssh]$cp>  [dbrg@dbrg-2:~]$mkdir .ssh
  [dbrg@dbrg-1:.ssh]$scp authorized_keys dbrg-2:/home/dbrg/.ssh/
  此处的scp就是通过ssh举办长途copy,此处必要输入长途主机的暗码,即dbrg-2呆板上dbrg帐户的暗码,固然,你也可以用其他行动将authorized_keys文件拷贝到其他呆板上[dbrg@dbrg-2:.ssh]$chmod 644 authorized_keys
  这一步非常关键,必需担保authorized_keys只对其全部者有读写权限,其他人不允许有写的权限,不然SSH是不会事变的。我就曾经在设置SSH的时间纳闷了好久。[dbrg@dbrg-2:.ssh]ls -la
  drwx------ 2 dbrg dbrg .
  drwx------ 3 dbrg dbrg ..
  -rw-r--r-- 1 dbrg dbrg authorized_keys
  留意每个呆板上的.ssh目次的ls -la都应当和上面是一样的
  接着,在三台呆板上都必要对sshd做事举办设置(着实是可以不消设置的,完成了上面的那些操纵了以后SSH就已经可以事变了),在三台呆板上批改文件/etc/ssh/sshd_config
  #去除暗码认证
  PasswordAuthentication no
  AuthorizedKeyFile .ssh/authorized_keys
至此各个呆板上的SSH设置已经完成,可以测试一下了,比如dbrg-1向dbrg-2提倡ssh毗连  [dbrg@dbrg-1:~]$ssh dbrg-2
  假如ssh设置好了,就会出现以下提醒信息
  The authenticity of host [dbrg-2] can't be established.
  Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
  Are you sure you want to continue connecting (yes/no)?
  OpenSSH见告你它不知道这台主机,但是你不消担忧这个题目,由于你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别符号”加到“~/.ssh/know_hosts”文件中。第二次拜访这台主机的时间就不会再表现这条提醒信息了。
  然后你会创造不必要输入暗码就可以成立ssh毗连了,恭喜你,设置乐成了
  不外,别忘了测试本机ssh dbrg-1
  Hadoop环境变量
  在/home/dbrg/HadoopInstall/hadoop-conf目次下的 hadoop_env.sh中设置Hadoop必要的环境变量,此中JAVA_HOME是必需设定的变量。HADOOP_HOME变量可以设定也可以不设 定,假如不设定,HADOOP_HOME默认的是bin目次的父目次,即本文中的/home/dbrg/HadoopInstall/hadoop。我的 是如许设置的
  export HADOOP_HOME=/home/dbrg/HadoopInstall/hadoop
  export JAVA_HOME=/usr/java/jdk1.6.0
  从这个地方就可以看出前面所述的创建hadoop0.12.0的链接hadoop的利益了,当以后更新hadoop的版本的时间,就不必要在改设置文件,只必要变动链接就可以了。
  Hadoop设置文件
  如前所述,在hadoop-conf/目次下,打开slaves文件,该文件用来指定全部的从节点,一行指定一个主机名。即本文中的dbrg-2,dbrg-3,因此slaves文件看起来应当是如许的
  dbrg-2
  dbrg-3
  在 conf/目次中的hadoop-default.xml中包孕了Hadoop的全部设置项,但是不允许直接批改!可以在hadoop-conf/目次下 的hadoop-site.xml内里界说我们必要的项,其值会覆盖hadoop-default.xml中的默认值。可以按照本身的实际必要来举办定 制。以下是我的设置档:
  
  
  
  
  
  fs.default.name
  dbrg-1:9000
  The name of the default file system. Either the literal string "local" or a host:port for DFS.
  
  
  mapred.job.tracker
  dbrg-1:9001
  The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.
  
  
  hadoop.tmp.dir
  /home/dbrg/HadoopInstall/tmp
  A base for other temporary directories.
  
  
  dfs.name.dir
  /home/dbrg/HadoopInstall/filesystem/name
  Determines where on the local filesystem the DFS name node should store the name table. If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.
  
  
  dfs.data.dir
  /home/dbrg/HadoopInstall/filesystem/data
  Determines where on the local filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices. Directories that do not exist are ignored.
  
  
  dfs.replication
  1
  Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.
  
  
  陈设Hadoop
  前面讲的这么多Hadoop的环境变量和设置文件都是在dbrg-1这台呆板上的,如今必要将hadoop陈设到其他的呆板上,担保目次结构同等。
  [dbrg@dbrg-1:~]$scp -r /home/dbrg/HadoopInstall dbrg-2:/home/dbrg/
  [dbrg@dbrg-1:~]$scp -r /home/dbrg/HadoopInstall dbrg-3:/home/dbrg/
  至此,可以说,Hadoop已经在各个呆板上陈设完毕了下面就让我们起头启动Hadoop吧
  启动Hadoop
  启动之前,我们先要技俩化namenode,先辈入~/HadoopInstall/hadoop目次,推行下面的下令
  [dbrg@dbrg-1:hadoop]$bin/hadoop namenode -format
  不出不测,应当会提醒技俩化乐成。假如不乐成,就去hadoop/logs/目次下去查察日记文件
  下面就该正式启动hadoop啦,在bin/下面有很多启动脚本,可以按照本身的必要来启动。
  * start-all.sh 启动全部的Hadoop守卫。包孕namenode, datanode, jobtracker, tasktrack
  * stop-all.sh 收场合有的Hadoop
  * start-mapred.sh 启动Map/Reduce守卫。包孕Jobtracker和Tasktrack
  * stop-mapred.sh 收场Map/Reduce守卫
  * start-dfs.sh 启动Hadoop DFS守卫.Namenode和Datanode
  * stop-dfs.sh 收场DFS守卫
在这里,大略启动全部守卫  [dbrg@dbrg-1:hadoop]$bin/start-all.sh
同样,假如要收场hadoop,则  [dbrg@dbrg-1:hadoop]$bin/stop-all.sh
  HDFS操纵
  运行bin/目次的hadoop下令,可以查察Haoop全部支持的操纵及其用法,这里以几个大略的操纵为例。
成立目次  [dbrg@dbrg-1:hadoop]$bin/hadoop dfs -mkdir testdir
  在HDFS中成立一个名为testdir的目次
复制文件  [dbrg@dbrg-1:hadoop]$bin/hadoop dfs -put /home/dbrg/large.zip testfile.zip
  把内地文件large.zip拷贝到HDFS的根目次/user/dbrg/下,文件名为testfile.zip
查察现有文件  [dbrg@dbrg-1:hadoop]$bin/hadoop dfs -ls
  下边是我改写的php脚本
  maper.php
  #!/usr/local/php/bin/php
  
  reducer.php
  #!/usr/local/php/bin/php
  

  •   预备措施所必要的作为输入的文本文件的目次,
  
  mkdir /tmp/countfile
  

  •   下载长途的两个TXT文本作为输入
  
  wget http://pge.rastko.net/dirs/2/0/4/1/20417/20417-8.txt


  •   把文件放入HADOOP 的DFS中
  
  cd /home/guest/hadoop/
  bin/hadoop dfs -copyFromLocal /tmp/countfile countfile
  

  •   推行php措施处理赏罚这些文本
  ./bin/hadoop jar /home/hadoop/contrib/streaming/hadoop-0.19.2-streaming.jar -mapper /home/hadoop/mapper.php -reducer /home/hadoop/reducer.php -input countfile/pgmonthly_2009_01_21.txt -output coutout/ -file /home/hadoop/reducer.php -file /home/hadoop/mapper.php
  记取肯定要加-file 参数 如许手法把php 脚天职发给其他的slave 呆板 举办运算 每台呆板都要安装php
  别忘怀变动主机名称 和hosts文件 然后重新天生namenode hadoop namenode -format

  •   查察输出的结果
  bin/hadoop dfs -ls countfile-output
  bin/hadoop dfs -cat countfile-output/part-00000


运维网声明 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-629030-1-1.html 上篇帖子: Hadoop HDFS分布式文件系统特点 下篇帖子: hadoop Partitioner 分区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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