• 搭建分布式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 参考文献

  • 相关阅读:
    AI听说读写
    C#文件夹检测与创建
    全球唯一标识符 System.Guid.NewGuid().ToString();
    mssql不允许删表方法
    SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具
    sql语句精剪数据长度函数substring(string,int,int)
    代码生成工具
    [Java123] POI CellType 数据类型
    FRM二级备考感想
    【Java123】XML与JSON互相转化
  • 原文地址:https://www.cnblogs.com/d0main/p/7080845.html
Copyright © 2020-2023  润新知