zoukankan      html  css  js  c++  java
  • 搭建分布式Hadoop的填坑纪录

    1 每个节点ssh免密连接本机

    	cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
    	ssh-keygen -t rsa              # 会有提示,都按回车就可以
    	cat id_rsa.pub >> authorized_keys  # 加入授权
    	chmod 600 ./authorized_keys    # 修改文件权限
    

    排错:

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

    	Agent admitted failure to sign using the key
    

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

    	$ ssh-add   ~/.ssh/id_rsa 
    

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

    2 每个节点配置hostname和hosts

    	$sudo vim /etc/hostname
    

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

    	$sudo vim /etc/hosts
    

    形式是:ip(空格)节点名称(MasterSlaver1Slaver2...)。就像
    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 CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    	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

    12+1 参考文献

  • 相关阅读:
    POJ 1003 解题报告
    POJ 1004 解题报告
    POJ-1002 解题报告
    vi--文本编辑常用快捷键之光标移动
    常用图表工具
    September 05th 2017 Week 36th Tuesday
    September 04th 2017 Week 36th Monday
    September 03rd 2017 Week 36th Sunday
    September 02nd 2017 Week 35th Saturday
    September 01st 2017 Week 35th Friday
  • 原文地址:https://www.cnblogs.com/d0main/p/7080845.html
Copyright © 2011-2022 走看看