分布式集群的实现
环境:
192.168.36.129 node1:NN,SNN,RM
192.168.36.130 node2:DN,NM
192.168.36.132 node3:DN,NM
192.168.36.133 node4:DN,NM
配置java环境,每个节点时间同步,基于主机名互相通信,定义/etc/hosts 文件
如果需要通过master节点启动或停止集群,还需要在master节点上配置运行服务的用户(如hdfs和yarn)能以密钥认证的方式通过ssh远程连接只各节点
1、配置java环境 – – – – – 每个节点
# vim /etc/profile.d/java.sh export JAVA_HOME=/usr # yum install java-1.8.0-openjdk-devel -y # java -version
2、基于主机名互相通信,定义/etc/hosts 文件 – – – – – 每个节点
192.168.36.129 node1 master
192.168.36.130 node2
192.168.36.132 node3
192.168.36.133 node4
3、创建用户(最好id相同)、密钥认证- – – – -每个节点
【 master 】
# groupadd hadoop
# useradd hadoop
# echo “queen” | passwd –stdin hadoop
【 其他节点 】
# useradd hadoop
# echo “queen” | passwd –stdin hadoop
【 master 】 # su - hadoop $ ssh-keygen -t rsa -P '' $ for i in 2 3 4; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@node{$i}; done
说明:在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。
以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。
( 说明:$ssh-keygen -t rsa
这个命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/dbrg/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行.)
4、安装并配置hadoop
4.1 【 node1 】 # mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} # chown -R hadoop:hadoop /data/hadoop/hdfs/ # wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz
# tar xf hadoop-2.7.4.tar.gz -C /bdapps/ # cd /bdapps # ln -sv hadoop-2.7.4 hadoop # cd hadoop/
# vim /etc/profile.d/hadoop.sh export HADOOP_PREFIX=/bdapps/hadoop export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin export HADOOP_YARN_HOME=${HADOOP_PREFIX} export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX} export HADOOP_COMMON_HOME=${HADOOP_PREFIX} export HADOOP_HDFS_HOME=${HADOOP_PREFIX} # ./etc/profile.d/hadoop.sh # scp /etc/profile.d/hadoop.sh node2:/etc/profile.d/ # scp /etc/profile.d/hadoop.sh node3:/etc/profile.d/ # scp /etc/profile.d/hadoop.sh node4:/etc/profile.d/
# mkdir logs # chmod g+w logs # chown -R hadoop:hadoop ./* # cd etc/hadoop
# vim core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> <final>true</final> </property> </configuration> # vim hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>2<value> 建议3个 </propery> <property> <name>dfs.namenode.name.dir</name> <value>file:///data/hadoop/hdfs/nn</value> </propery> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/hadoop/hdfs/dn</value> </propery> <property> <name>fs.checkpoint.dir</name> <value>file:///data/hadoop/hdfs/snn<value> </propery> <property> <name>fs.checkpoint.dir</name> <value>file:///data/hadoop/hdfs/snn<value> </propery> </configuration> 注意,如果需要其他用户对hdfs有写入权限,还需要添加 <property> <name>dfs.premissions</name> 不做严格权限限制 <value>false<value> </propery> # cp mapred-site.xml.template mapred-site.xml # vim mapred-site.xml <configuration> <property> <name>mapred.framwork.name</name> <value>yarn</value> </property> </configuration> # vim yarn-site.xml <configuration> <property> <name>yarn.resourcemanager.address</name> <value>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduleraddress</name> #调度器地址 <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> #资源追踪器地址 <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> #管理地址 <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> <property> <name>yarn.nodemanager.aux-service</name> #辅助服务 <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservice.mapreduce_shuffle.class</name> #shuffle类 <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> </configuration>
# vim slave node2 node3 node4 4.2 【 其他节点 】 # mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} # chown -R hadoop:hadoop /data/hadoop/hdfs/ # tar xf hadoop-2.7.4.tar.gz -C /bdapps/ # cd /bdapps # ln -sv hadoop-2.7.4 hadoop # cd hadoop/ # mkdir logs # chmod g+w logs # chown -R hadoop:hadoop ./* # cd etc/hadoop
【 node1 】
# su - hadoop # scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/ # scp /bdapps/hadoop/etc/hadoop/* node3:/bdapps/hadoop/etc/hadoop/ # scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/
4.3 格式化并启动hadoop
【 node1 】 # su - hdfs $ hadoop namenode -format 其中的“Storage directory /hadoop/temp/dfs/name has been successfully formatted”一行信息表明 对应的存储已经格式化成功。 在master节点上执行Hadoop的start-all.sh脚本即可实现启动整个集群。
$ start-dfs.sh 验证 node2:# su - hadoop $ jps node1:
$ hdfs dfs -mkdir /test drwxr-xr-x - hdfs supergroup $ hdfs -dfs -put /etc/fstab /test/fstab $ hdfs dfs -lsR / 查看是否上传成功 $ hdfs dfs -cat /test/fstab $ start-yarn.sh 验证 node2: $ jps
4.4 测试
1)HDFS和YARN ResourceManager各自提供了一个Web接口,通过这些接口可检查HDFS集群以及YARN集群的相关状态信息
HDFS-NameNode http://node1:50070
YARN-ResourceManager http://node1:8088
5. HDFS常用操作
hadoopdfs -ls 列出HDFS下的文件
hadoop dfs -ls in 列出HDFS下某个文档中的文件
hadoop dfs -put test1.txt test 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功
hadoop dfs -get in getin 从HDFS获取文件并且重新命名为getin,同put一样可操作文件也可操作目录
hadoop dfs -rmr out 删除指定文件从HDFS上
hadoop dfs -cat in/* 查看HDFS上in目录的内容
hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下
hadoop dfsadmin -safemode leave 退出安全模式
hadoop dfsadmin -safemode enter 进入安全模式
原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/89610