说明:搭建平台为ubuntu16.04 (为什么在Ubuntu 上,请看hadoop第一课)
一:环境准备(必备)
1:jdk oracle
我使用的是java version “1.8.0_101”
没有的话,$ wget http://download.oracle.com/otn-pub/java/jdk/8u111-b14/jdk-8u111-linux-x64.tar.gz
解压配好环境变量
~/.bashrc添加
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_101
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
2:ssh远程免登录
具体见:ssh远程免登陆配置
3:hadoop下载
$:wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
二:配置hadoop(搭建三台,一个master两个slave)
1:分别对应修改/etc/hostname为master slave1 slave2
2:分别对应修改/etc/hosts改为:
192.168.0.26 master
192.168.0.24 slave1
192.168.0.27 slave2
3:进入hadoop/etc目录
1:master文件–>>改为master
2:slaves文件–>>增加slave节点
slave1
slave2
4:core-site.xml文件–>>增加hadoop核心配置(hdfs文件端口是9000、file:/hadoop/tmp、)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/tengxing/dev/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.spark.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.spark.groups</name>
<value>*</value>
</property>
</configuration>
4:hdfs-site.xml 文件–>>增加hdfs配置信息(namenode、datanode端口和目录位置)
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/tengxing/dev/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/tengxing/dev/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.1.100:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
5:mapred-site.xml 文件–>>增加mapreduce配置(使用yarn框架、jobhistory使用地址以及web地址)
<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 文件–>>增加yarn功能
“`
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.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:8035</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>
“`——————到此hadoop搭建完毕
小技巧:先在master配好相关文件(~/.ssh/id_rsa.pub,hosts,hadoop整个文件夹)再通过scp 远程拷贝到其他机器,替换即可
——————————————————————————————————————
三:启动hadoop
①:格式化
./bin/hdfsnamenode−format②:启动
./sbin/start-all.sh
③:看群集状态
$ ./bin/hdfs dfsadmin -report
进入浏览器
查看hdfs:http://master:50070/
查看RM:http://master:8088/
————————————————————————华丽的分界线—————————————————————
b贴出一个刚刚搭建时候容易出的一个问题:
执行$ ./sbin/start-all.sh
明明看到说启动了。而http://master:50070/里面就是没有live nodes
看日志很重要
报错:WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/tmp/hadoop-hadoop/dfs/data/
Java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-hadoop/dfs/data: namenode clusterID = CID-1ac4e49a-ff06-4a34-bfa2-4e9d7248855b; datanode clusterID = CID-3ae02e74-742f-4915-92e7-0625fa8afcc5
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:775)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadStorageDirectory(DataStorage.java:300)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.loadDataStorage(DataStorage.java:416)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:395)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:573)
…
java.io.IOException: All specified directories are failed to load.
……
分析原因:因为多次对namenode进行format,每一次format主节点NameNode产生新的clusterID、namespaceID,于是导致主节点的clusterID、namespaceID与各个子节点DataNode不一致。当format过后再启动hadoop,hadoop尝试创建新的current目录,但是由于已存在current目录,导致创建失败,最终引起DataNode节点的DataNode进程启动失败,从而引起hadoop集群完全启动失败
我就是这样格式化了很多次。
解决:
一个简单的解决方法是:直接删除数据节点DataNode的current文件夹
再次启动,OK