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

[经验分享] 搭建分布式Hadoop的填坑纪录

[复制链接]

尚未签到

发表于 2017-12-17 16:43:02 | 显示全部楼层 |阅读模式
1 每个节点ssh免密连接本机
  

    cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost  ssh-keygen -t rsa              # 会有提示,都按回车就可以

  cat>  chmod 600 ./authorized_keys    # 修改文件权限
  

  排错:
  如果ssh链接服务器是出现:
  

    Agent admitted failure to sign using the key  


  解決方式 使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改>  

    $ ssh-add   ~/.ssh/id_rsa   

  再通过ssh 主机名 就可以实现无密码登录了。

2 每个节点配置hostname和hosts
  

    $sudo vim /etc/hostname  

  主节点仅留一行Master,从节点仅留一行Slaver$
  

    $sudo vim /etc/hosts  

  形式是:ip(空格)节点名称(Master\Slaver1\Slaver2...)。就像
  
127.0.0.1 localhost localhost4 localhost4.localdomain4
  
::1 localhost localhost6 localhost6.localdomain6
  

    192.168.1.2  Master  192.168.1.3  Slaver1
  

3 设置ssh能免密登录所有Slavers
  注意:执行这一步前,要删除节点中原有的id_rsa和id_rsa.pub,再重新生成密钥对。

4 删除操作系统中预装的jdk
  

    $ rpm -qa | grep java #列出已经安装的jdk  

  

  $ rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.2.el7_2.x86_64 #删除全部,noarch文件可以不用删除
  

  如果还没有删除,则用yum -y remove去删除他们。

5 安装准备好的jdk

5.1 配置环境变量(顺便把后续要装的软件的路径也一起搞定了)
  vim ~/.bashrc
  

    export JAVA_HOME=/home/hadoop/opt/jdk1.8.0_101
  export>  export HADOOP_HOME=/home/hadoop/opt/hadoop
  export HADOOP_INSTALL=$HADOOP_HOME
  export HADOOP_MAPRED_HOME=$HADOOP_HOME
  export HADOOP_COMMON_HOME=$HADOOP_HOME
  export HADOOP_HDFS_HOME=$HADOOP_HOME
  export YARN_HOME=$HADOOP_HOME
  export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  export ZOOKEEPER_HOME=/home/hadoop/opt/zookeeper
  export HBASE_HOME=/home/hadoop/opt/hbase
  export ROCKETMQ_HOME=/home/hadoop/opt/RocketMQ/devenv
  export ROCKETMQ_CLASSPATH=$ROCKETMQ_HOME/lib
  export NAMESRV_ADDR='10.61.2.118:9876;10.61.2.119:9876'
  export MAVEN_HOME=/home/hadoop/opt/maven
  export SCALA_HOME=/home/hadoop/opt/scala
  export SPARK_HOME=/home/hadoop/opt/spark
  export PATH=$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$ROCKETMQ_HOME/bin:$MAVEN_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
  

  使变量设置生效
  

    $source ~/.bashrc      

5.2 测试
  

    java -version  $JAVA_HOME/bin/java -version  # 与直接执行 java -version 一样
  Shell 命令
  

  如果设置正确的话,$JAVA_HOME/bin/java -version 会输出 java 的版本信息,且和 java -version 的输出结果一样。

6 在Master上安装Hadoop

6.1 环境变量

6.2 配置
  修改/hadoop/etc/hadoop/中的配置文件。
  
注意,Master是只作为NameNode还是即作为NameNode又作为DataNode,需要考量。
  集群/分布式模式需要修改 /home/hadoop/opt/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
  1, 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。
  本教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:Slave1。
  2, 文件 core-site.xml 改为下面的配置:
  

    <configuration>  <property>
  <name>fs.defaultFS</name>
  <value>hdfs://Master:9000</value>
  </property>
  <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/home/hadoop/opt/hadoop/tmp</value>
  <description>Abase for other temporary directories.</description>
  </property>
  </configuration>
  

  3, 文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值还是设为 1:
  

    <configuration>  <property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>Master:50090</value>
  </property>
  <property>
  <name>dfs.replication</name>
  <value>1</value>
  </property>
  <property>
  <name>dfs.namenode.name.dir</name>
  <value>file:/home/hadoop/opt/hadoop/tmp/dfs/name</value>
  </property>
  <property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/home/hadoop/opt/hadoop/tmp/dfs/data</value>
  </property>
  </configuration>
  

  4, 文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:
  

    <configuration>  <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
  </property>
  <property>
  <name>mapreduce.jobhistory.address</name>
  <value>Master:10020</value>
  </property>
  <property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>Master:19888</value>
  </property>
  </configuration>
  

  5, 文件 yarn-site.xml:
  

    <configuration>  <property>
  <name>yarn.resourcemanager.hostname</name>
  <value>Master</value>
  </property>
  <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
  </property>
  </configuration>
  

6.3 删除/hadoop/tmp/(如果有的话)和logs/

7 复制Master上的hadoop到所有Slavers的/home/hadoop/opt/

8 在Master上格式化NameNode
  

    $hdfs namenode -format       # 首次运行需要执行初始化,之后不需要  

  成功的话,会看到 "successfully formatted" 和 "Exitting with status 0" 的提示,若为 "Exitting with status 1" 则是出错。

9 关闭所有节点的防火墙
  

    $systemctl stop firewalld.service    # 关闭firewall  $systemctl disable firewalld.service # 禁止firewall开机启动
  

10 在Master上启动hadoop

10.1 启动进程
  

    $start-dfs.sh  $start-yarn.sh
  $mr-jobhistory-daemon.sh start historyserver
  

10.2 验证
  通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程。
  缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。
  在 Slave 节点可以看到 DataNode 和 NodeManager 进程。

10.3 排错
  执行hadoop namenode -format出现了
  

Cannot create directory /usr/hadoop/tmp/hdfs/name/current  

  则有可能需要修改tmp的权限。
  

    $chown -R hadoop:hadoop ~/opt/hadoop/tmp  

  然后重启hadoop。
  

    $stop-yarn.sh  $stop-dfs.sh
  $mr-jobhistory-daemon.sh stop historyserver
  

11 示例程序
  运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作。
  执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录:
  

    $hdfs dfs -mkdir -p /user/hadoop  $hdfs dfs -mkdir input
  $hdfs dfs -put /home/hadoop/opt/hadoop/etc/hadoop/*.xml input
  

  通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中。可以访问 Web 界面 http://localhost:50070/ 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
  接着就可以运行 MapReduce 作业了:
  

    $hadoop jar  /home/hadoop/opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'  

  运行时的输出信息与伪分布式类似,会显示 Job 的进度。
  可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。
  同样可以通过 Web 界面查看任务进度 http://master:8088/cluster,在 Web 界面点击 "Tracking UI" 这一列的 History 连接,可以看到任务的运行信息。前提是你开启了YARN。
  执行完后输出结果:
  

    $hdfs dfs -cat output/*  

  注意:按照上面的一系列操作,如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成 mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 "Retrying connect to server: 0.0.0.0/0.0.0.0:8032" 的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。

12 Web UI


  •   http://localhost:50070/

  •   http://master:8088/

12+1 参考文献


  • Hadoop安装教程_伪分布式配置_CentOS6.4/Hadoop2.6.0
  • Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

运维网声明 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-425063-1-1.html 上篇帖子: hadoop FileSystem类和SequenceFile类实例 下篇帖子: Hadoop RPC Client 端源码分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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