1、node1,2,3,4做免密钥登录
2、安装和配置jdk
2.1 将node1上的/etc/profile通过网络拷贝到node2、3、4
在node2、3、4上执行. /etc/profile让它生效
3、解压hadoop-2.6.5.tar.gz到/opt目录
4、在hadoop-env.sh中:主要配置jdk目录
export JAVA_HOME=/usr/java/jdk1.7.0_80
5、slaves,三个datanode所在的位置主机名称:
node2
node3
node4
slaves文件里面记录的是集群里所有DataNode的主机名
小故事:
三台机器,这时候如果突然间新增了一台机器,比如是host4,会发现在NN上host4也自动加入到集群里面了,HDFS的磁盘容量上来了,这下子不是出问题了?假如host4不是集群的机器,是别人的机器,然后配置的时候指向了NN,这时候NN没有做判断岂不是把数据也有可能写到host4上面?这对数据安全性影响很大。所以可以在hdfs-site.xml里面加限制。
dfs.hosts
/home/hadoop-2.0.0-cdh4.5.0/etc/hadoop/slaves
这相当于是一份对于DN的白名单,只有在白名单里面的主机才能被NN识别。配置了这个之后,就能排除阿猫阿狗的DN了。其实slaves文件里不一定要写主机名,最终的都是通过IP来判断,完全可以写一个IP就行。
我还尝试了配置了上面的dfs.hosts项之后,然后在slaves删除一个节点,然后
hadoop−daemon.shstopnamenode hadoop-daemon.sh start namenode
这时候NN就拒绝了那个被删除了的DN数据,而NN会自动把DN上丢失的数据重新备份,通过其他的备份来copy,这里是很智能的过程。
6、core-site.xml
<configuration>
<!-- 指定namenode的位置:在node1上的9000端口发布一个hdfs协议的服务,用于和datanode以及客户端以及secondarynamenode通信 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 指定该路径,该路径决定了datanode、namenode以及secondarynamenode放数据的目录
dfs.namenode.name.dir
dfs.datanode.data.dir
dfs.namenode.checkpoint.dir
-->
<property>
<name>hadoop.tmp.dir</name>
<value>/var/bjsxt/hadoop/full</value>
</property>
</configuration>
7、hdfs-site.xml
<configuration>
<!-- 指定block默认副本个数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--指定secondarynamenode的http服务所在的主机和端口号,同时也就指定了secondarynamenode所在的主机-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
</configuration>
8、在/etc/profile中添加HADOOP_PREFIX
在PATH中添加HADOOP的bin和sbin目录
9、将/opt/hadoop-2.6.5/etc/hadoop/* 网络拷贝到node2node3node4上
scp -r * node2:`pwd`
scp -r * node3:`pwd`
scp -r * node4:`pwd`
10、格式化
在node1上执行格式化操作:
hdfs namenode -format
11、启动集群:
在node1到node4上的任意一台服务器都可以执行:
start-dfs.sh
12、停止集群:
在node1到node4上的任意一台服务器都可以执行:
stop-dfs.sh
13、如果发生异常,看日志:/opt/hadoop-2.6.5/logs