- vm中安装Centos7,secureCTR,WinSCP,安装后使用完全克隆方式,产生三台Centos7做分布式安装。克隆出来后的网卡并没有新增,还是原来的ens33,而且ip地址也都不重复,且都能上网,所以没有做其他配置,等后期出现问题在行解决。(在克隆玩几台机子后,远程连接的时候总是会出现这样的问题,在机子上ifconfig后int addr总是会消失,在命令断执行命令 service network restart 就可以了)
- 几台机子上的名字都是一样的,所以要经过配置文件将其名字修改
Vim /etc/hostname
- 修改映射:三台机子上全部这样配置
然后 ping slave1 这样看配置是否成功
- 检查防火墙,全部机器都要监察使用secureCRT快捷命令(同时给全部机子发命令)
View ->command window(打开命令窗口) ->输入
查看防火墙状态命令
关闭防火墙
结果
- SSH远程登录
生成公钥匙(Centos7中已经装好了ssh工具)
建立authorized_keys 文件 ssh本地登录免密码
分别再三台机子上做上述操作,使得三台机子都可以免密码登录
异机登录:
将master生成的公钥匙传递到slave1中去
在slave1中的目录下就能看到id_rsa.pub这个文件
然后将这个文件追加到authorized_keys文件中。
回到master机子中
就实现了异机子登录了。
查看原Centos7中安装的jdk
删除
安装sun的 java
在opt下创建java目录,所有的java相关都放在这里
使用WinSCP将jdk上传
解压jdk
/etc/profile配置java
检测java版本
给其他两台机子上安装java,先删除openJDK的文件,删除方式和上面的一样
然后使用scp –r 命令将master机子上的java整个安装目录(-r参数复制整个安装目录)复制到其他两台机子上,也将master机子上 /etc/profile文件也复制到其他机子上,注意在最后source /etc/profile 使文件生效,最后可以使用java –version 后者 which java命令来查看安装情况。
安装hadoop
WinSCP上传hadoop-2.6.4,hadoop mv 到 /usr下,并解压 tar –zxvf
剩下的事情就是配置文件
Core –size.xml配置
Hdfs-size.xml 修改副本数,默认是3
配置secondarynamenode 的位置
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
我搭建的机子是1个NN2个dataN,所以副本数为2.
配置谁是dataNode,谁是NN
Vim slaves 配置dataNode,直接写主机名,就OK了
现在NN,dataNode都已经定义好,但是SNN还没有,定义SNN只需要满足SNN不是和NN在同一台机子上就可以
将SNN放到slave1中,这样slave2就有两个节点一个dataNode可一个SNN
修改master文件就OK,2.6.4中没有master文件,所以我建立了一个,core-site中就已经配置好的NN的。
修改Centos文件/etc/profile配置
Source /etc/profile
格式化namenode hadoop nemanode -format
最后显示如下就算成功了,hadoop的工作过程中产生的临时文件,全部会存储到这里
上面配置的SNN在slave1中,但是没有生效,系统默认将其配置到master中去了
启动hadoop后查看jps
Master
Slave1
Slave2
C:\Windows\System32\drivers\etc 修改hosts文件,
查看防火墙:
service iptables status
Hadoop添加到路径中,放置每次都进入hadoop目录才能执行命令
export HADOOP_HOME=/usr/hadoop/hadoop-2.6.5/
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
bin/hdfs namenode -format -force 或者配置好hadoop 的环境变量之后,添加到PATH里面去
执行hadoop name -format
格式化namenode的时候默认配置路径:如果在core-site.xml中不进行配置,那么就会将中间数据都写到这个目录中
hadoop.tmp.dir | /tmp/hadoop-${user.name} |
格式化的数据是写在这个配置目录下的dfs目录下。
启动namenode:./hadoop-daemon.sh start namenode
启动时候打印的信息:starting namenode, logging to /usr/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-master.out
也就是日志信息,可以查看日志:less /usr/hadoop/hadoop-2.6.5/logs/hadoop-root-namenode-master.log
查看是否启动:jps
查看端口使用情况:netstat -nltp
在使用的时候,分别使用上面的命令在maste 启动namenode, 在node1,node2 启动datanode
然后使用master 上的namenode 的ip:50070,就可以查看配置情况了:http://172.16.214.128:50070
手动一台一台启动自然会有很多的麻烦:
/usr/hadoop/hadoop-2.6.5/sbinstart-dfs.sh 启动hdfs
在启动的时候命令会去读取 /usr/hadoop/hadoop-2.6.5/etc/hadoop/slaves 中的你写入的datanode节点
然后就会将这些节点的datanode 全部启动,以及namenode
在启动dataNode 的那些节点上 上面提到的 hdfs.temp.dir 配置目录下会有data 目录,存放数据,和namenode 节点中的这个目录下游name 目录是一样的,当第一次启动的的时候,datanode 会根据core.site.xml 中的namenode 配置在datanaode 中新建data这个目录并生成一些文件,
这个uuid及里面的这些ID都是在namenode 第一次formated 后并启动datanode namenode给分配的,下一次在来启东datanode 的时候会去读取这些Id,然后和namenode连接,连接的时候namenode会去检验这些Id,看是否和namde这里保存的datanode 的ID 匹配情况,匹配那么久能连接启动,否则datanode不能启动,
而出现这种情况的原因是,namde再次的formated,每次格式化就会生产不同的这些ID
解决方法是:将dataNode 中的这些保存ID 的目录(/tmp/hadoop-root/data目录)删除,然后再启动
而namenode 的name 目录是没必要删除的,删除之后还需要执行formated,
HDFS 工作机制
hdfs分布式存取:
存取是的路径都是客户端在请求的时候告诉namenode,由namenode指派的。
用户存入文件的时候,会被切为多块,分别存在不同的datanode上,namenode负责管理数据,datanode负责储存文件快
hdfs基本操作:
bin/hdfs dfs -mkdir /test
bin/hdfs dfs -mkdir -p /test1/subTest1
bin/hdfs dfs -ls /
bin/hdfs dfs -put LICENSE.txt /test 这里文件名路径不需要写file:/// 因为put 命令本生就是说讲本地文件上传到hdfs
bin/hdfs dfs -get /test1/subTest1 /opt/datas 在namenode 获取数据到客户端
bin/hdfs dfs -copyFromLocal NOTICE.txt /test1/subTest1
bin/hdfs dfs -moveFromLocal ..
bin/hdfs dfs -du /test1/subTest1 查看目录或者文件大小
bin/hdfs dfs -count /test1
bin/hdfs dfs -cp /test1/subTest1 /test
bin/hdfs dfs -rm -r /test
bin/hdfs dfs -ls -R /test 递归查看全部目录,子目录
bin/hdfs dfsadmin -report
bin/hdfs dfsadmin -refreshNodes
以上是在没有配置好环境变量的需要进去hadoop目录的写法,如果配置好环境变量
hadoop fs -put ~/a.txt /
在命令行输入:
hadoop fs 就可以看见所有的命令。
put文件的时候一直都put不进去,网上看了很多的问题,有的datanode没开启,有的多次format出现上面提到的的问题的。
我的都是好的,根据提示信息,是因为dataNode的防火墙开启的,部分日志:
NFO hdfs.DFSClient: Exception in createBlockOutputStream
java.io.IOException: Got error, status message , ack with firstBadLink as 192.168.1.142:50010
at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.checkBlockOpStatus(DataTransferProtoUtil.java:140)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.createBlockOutputStream(DFSOutputStream.java:1359)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1262)
at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:448)
16/10/11 00:11:01 INFO hdfs.DFSClient: Abandoning BP-898235430-192.168.1.139-1476169105223:blk_1073741825_1001
16/10/11 00:11:01 INFO hdfs.DFSClient: Excluding datanode DatanodeInfoWithStorage[192.168.1.142:50010,DS-d51b3c1b-2221-414e-83bc-42ffb3fd2ef9,DISK]
systemctl status firewalld 查看防火墙情况
systemctl stop firewalld 关闭防火墙
namenode执行: hadoop fs -put ~/a.txt /
结果看到datanode深目录下的存储文件
meta 是校验核,防止存储文件被暴力修改