基于配置单机hadoop的基础上继续
ssh连接密钥步骤1:改权限
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh连接密钥步骤2:添加本机密钥到远程主机的允许访问列表,参考远程执行ssh代码
ssh <remote_hostname> 'cat ~/.ssh/id_rsa.pub' >> ~/.ssh/authorized_keys
配置xml步骤1:分布式HDFS
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://c-1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
</configuration>
其中的fs.defaultFS表示主节点URL
hadoop.tmp.dir是其他目录的基础目录,如果没有指定其他目录,就都放在这个文件夹里
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
以上是设置文件块的复本数量,默认是3个
slaves
c-1
c-2
c-3
以上文本文件中包含了所有datanode的hostname
注意,以上三个文件要在所有节点上修改一致,并放在同样的目录中
否则,三个节点不一样,子节点有配置错误就可能无法启动,主节点不显示子节点报错
启动分布式HDFS集群
export HADOOP_CONF_DIR=`pwd`
$HADOOP_HOME/bin/hadoop namenode -format
$HADOOP_HOME/sbin/start-dfs.sh
第一次启动前要记得格式化namenode,后续不需要
如果,datanode,比如c-2连接不上,可以尝试
手工启动datanode,在datanode上(之前xml配置中namenode自己也配置了datanode角色)运行
sbin/hadoop-daemon.sh start datanode
如果格式化namenode但与datanode没连上,可能两次格式化产生的clusterID不同,检查办法见参考链接1,参考链接2
此时HDFS服务应该已经启动,可以命令查看
curl c-1:50070
或者在网页查看
http://c-1:50070
可以使用命令查看HDFS文件,或者上传文件到HDFS
echo "hello world" >> input
hadoop fs -mkdir -p .
hadoop fs -put input .
hadoop fs -ls .
hadoop fs -cat input
以上先为当前用户创建了文件夹,因为在HDFS里本来是没有/user/<username>的
这些命令可以在集群内使用相同的$HADOOP_HOME文件夹内的程序调用,也可以在其他能访问到namenode节点的主机上,使用其他主机上的hadoop程序包运行
下面设置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>c-1</value>
</property>
</configuration>
以上aux-services表示yarn的nodemanager需要提供map/reduce算法之间的shuffle功能,这个功能是连接map算法与reduce算法间的桥梁
之前给HDFS配置的slaves同样会用于yarn,resourcemanager管理的nodemanager在启动时会尝试连接resourcemanager,如果没有配置,默认就是它自己。start-yarn在主节点发起,会让slave节点启动datanode和nodemanager,而并不会在上面启动namenode或者resourcemanager,所以slave节点上没有启动resourcemanager,它也找不到。而看起来,集群就是没有主节点。参考链接
下面启动yarn集群
sbin/start-yarn.sh
现在可以查看yarn页面了
http://c-1:8088
下面运行hello world程序
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-examples-x.y.z.jar wordcount input output
hadoop fs -ls output/
hadoop fs -cat output/*
以上命令可以在集群内运行,也可以在客户端运行。根据xml配置,其中input文件是保存在HDFS上的。
下面删除输出文件
hadoop fs -rm -r -f output
关闭集群
sbin/stop-yarn.sh
sbin/stop-dfs.sh
重启集群时,可能会处于safemode一段时间,比如半分钟,可以在namenode网页查看startup progress
使用命令查看safemode状态
hdfs dfsadmin -safemode get
无论在namenode还是datanode都可以在utility查看log,而namenode查看文件系统