hadoop的组成
hdfs(来源于google的gfs)
mapreduce(简称mr,是一个离线的分布式计算框架。和其他几种计算框架的区别:storm是流式计算框架,适合实时计算。spark是内
存计算框架,适合做快速得到结果的计算)
hbase(来源于谷歌的bigtable)
hadoop结构
name node(存放文件拥有者,权限,文件由哪些块组成(由启动时由datanode上报)+secondary name node +data node (由多个block组成)
block:在hadoop 1.x中默认是64m,每个block默认3个副本。副本放置的策略:放到不同的rack(机架上)
namenode的流程
name node启动后里面的信息会被加载到内存,name node中存放的metadata信息(由那几个块组成等)同时也会保存到磁盘上,即fsimage edits记录对fsimage的操作,由secondary nn帮助nn合并edits和fsimage为新的fsimage,在合并的时间段内name node上产生feditsnew(合并完变为fedits)
snn合并的时机:
1.根据配置文件fs.checkpoint.period 3600
2.或者 edits文件大小fs.checkpoint.size 64m
datanode:默认每3秒发送心跳到nn,10min内如果nn如果收不到信息,则认为该datanode失效,nn会把其中的block拷贝的
其他的datanode上
hadoop现在常用的是哪个版本?
hadoop-1.2.1.tar.gz已经过时了, hadoop 2.x现在用的比较多,企业中以此为主
hadoop最好安装在linux上, start-all.sh(启动mapreduce和hdfs两个)
伪分布式:多个节点都在同一台机器上
完全分布式:多个节点在多台不同的机器上
先在node1上安装hadoop-1.2.1.tar.gz,之后改配置文件如下:
1.namenode
conf/core-site.xml:
<configuration>
<property>
<name>fs.default.name</name>
<!--node1存放name node-->
<value>hdfs://node1:9000</value>
</property>
<!--设置hadoop的工作目录,默认在/tmp下,linux重启清空,虽然名字叫tmp但是dfs.name.dir(nn工作目录)是基于这个目录的-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zhao/hadoopws</value>
</property>
</configuration>
2.hdfs的block配置=<datanode主机个数
conf/hdfs-site.xml:
<configuration>
<property>
<!--block副本数,默认3,规则:两个同样的副本默人不在一个节点上-->
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
3.配置datanode的主机名(也可写ip):
vi slaves:
node2
node3
4.配置snn(规则:不要和nn在一个机器上):
vi masters:
node2
5.配置hadoop的java——home:
vi hadoop-env.sh:
java_home=/usr/jdk-1.7.70
linux设置免密码登录:
想要从1。1.1.1登录到1.1.1.2:
在1上:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa ---》id_dsa(自己使用的) id_dsa.pub(可以给别人使用的)
本地免密码登录只需要执行 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys,然后ssh 1就不用输入密码了
在2上:
把1中 ~/.ssh/id_dsa.pub 的内容拷贝到2的 ~/.ssh/authorized_keys文件中:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys,
先拷贝到2中把文件id_dsa.pub
拷贝文件到远程机器:
scp id_dsa.pub root@node2:~
刚才只在node1中解压了hadoop,
scp -r ~/hadoop.tar.gz root@node2:~
scp -r ~/hadoop.tar.gz root@node3:~
确保所有节点配置文件都一样:
scp -r ~/hadoop/conf/* root@node2:~/hadoop/conf/
bin/hadoop namenode -format
bin/start-all.sh bin/start-dfs.sh stop-all.sh
访问(hosts:1 node1):
http://node1:50070 rpc端口是9000