单机部署参考Hadoop安装——单机
集群部署
在每台主机配置好java环境,将hadoop安装到每台主机的
/usr/local/hadoop
目录下。修改每台主机Hadoop目录下
etc/hadoop/hadoop-env.sh
中的JAVA_HOME
# set to the root of your Java installation
export JAVA_HOME=/usr/local/jdk
- 修改每台主机的主机名,并修改DNS
#分别对应每台主机修改主机名,执行如下命令 $ hostname master #在10.0.30.70主机上执行 $ hostname slave1 #10.0.30.64 $ hostname slave2 #10.0.30.65
#将三个主机上的/etc/hosts 文件修改成如下内容 10.0.30.70 master 10.0.30.64 slave1 10.0.30.65 slave2
- 设置各主机之间免密登录,参考Linux 下 的ssh免密登录
- 在各主机下目录下
/usr/local/hadoop/
,创建hdfs的存储目录tmp/dfs/data
和tmp/dfs/name
,其中data目录用于存储hdfs的datanode数据,name目录用于存储hdfs的namnode数据 -
配置文件
Nameode和ResourceManger的文件配置,即在master的/usr/local/hadoop/etc/hadoop/
目录下
core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
hdfs-site.xml,其中配置了namenode的存储位置,如果只作为namenode,data.dir不起作用,可不配置。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
mapred-site.xml,配置hadoop的mapreduce框架
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml,配置yarn,ResourceManger
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</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>
slaves,从节点配置,即配置datanode
slave1
slave2
上述为datanode的文件配置,配置slave1和slave2的文几乎相同,将 core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml
复制到slave1和slave2的配置文件中。
在master下执行hdfs格式化
hadoop namenode -format
启动hdfs
./sbin/start-dfs.sh
, 之后通过jps
命令可以查看hadoop的进程启动yarn
./sbin/start-yarn.sh
启动job History Server
./sbin/mr-jobhistory-daemon.sh start historyserver
master和slave上的进程:
- 在master下运行示例:
hadoop fs -mkdir /input # 在hdfs上创建目录
hadoop fs -ls / # 显示hdfs上目录/下文件
hadoop fs -put input/*.xml /input #将 input/*.xml 上传到 hdfs上的/input文件夹下
hadoop fs -ls /input #显示hdfs上目录下/input下文件
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar grep /input /output 'd[a-z.]+' #运行example 输入为hdfs上的/input 输出在hdfs上的/output
hadoop fs -cat /output/* #输出结果
hadoop fs -get /output ./output #将hdfs上的 结果/output下载到 ./output
cat output/* #输出结果11
- WebUI:ResourceManager - http://localhost:8088/
WebUI:NameNode - http://localhost:50070/
WebUI:MapReduce JobHistory Server-http://10.0.30.70:19888/jobhistory
安装过程中遇到的问题
datanode 进程未启动,hdfs初始化的原因,查看datanode和namenode的存储路径下的
/current/VERSION
中的clusterID,将datanode的设成和namenode的一致期间有一个问题,进程都能启动,单机情况下可以正常运行示例,集群之后运行时卡在 map(0%) reduce(0%),然后报错... connection refused,from localhost.domian to ...
找了好久原因,最后发现是主机名没有设置,默认的主机名localhost.localdomain对应的ip是127.0.0.1,hadoop某个地方根据主机名获取域名ip,即127.0.0.1,单机情况下可以访问,但集群下127.0.0.1无法对外提供访问,所以报错connection refused,设置主机名,并在etc/hosts
中将主机名对应本机的ip,注释掉localhost.localdomain
即可报错
hdfs.DFSClient:Exception in createBlockOutputStream [Java].net.NoRouteToHostException:No route to host
,原因是未关闭防火墙,执行:service iptables stop
各主机之间时间同步,若时间不同步运行示例时也会出现异常
service ntpd stop #若报错the NTP socket is in use, exiting,则执行
ntpdate ntp.api.bz