分布式学习笔记
虚拟机免密钥,在NameNode上生成公钥,分发给DataNode
#生成公钥 ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys #分发到各台DataNode机器上 scp ~/.ssh/id_dsa.pub node07:`pwd`/node07.pub #DataNode上执行 cat ~/.ssh/node07.pub >> ~/.ssh/authorized_keys
修改Hadoop的环境变量,hadoop-env.sh,mapred-env.sh、yarn-env.sh,打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可, 然后将${JAVA_HOME}替换为复制的jdk目录。
下面修改配置文件core-site.xml、hdfs-site.xml和slaves,默认配置参考官方文档:http://hadoop.apache.org/docs/r2.6.5/做菜单栏下的Configuration
core-site.xml的配置
这是配置NameNode节点,并在/var/sxt/hadoop/full路径下创建文件内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node0001:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/full</value>
</property>
</configuration>
hdfs-site.xml的配置
配置SecondaryNameNode的节点,
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>//添加块的副本数,伪分布式集群只有一个节点,为1;分布式节点为多个
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node0002:50090</value>//配置secondaryNamenode的ip和端口(默认50090)
</property>
</configuration>
配置slaves
DataNode节点配置
添加作为DataNode节点的ip
配置完后把这个Hadoop文件夹使用scp命令分发给各个节点,把各个节点的环境配置好,使用./etc/profile启动配置文件。
第一次启动集群之前先把namenode节点格式化 hdfs namenode -format
启动集群 start-dfs.sh
高可用HA
设置两台NameNode的免密钥登录,node02生成公钥分发给node01,追加进authorized_keys中。参考https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
修改hdfs-site.xml的配置,把之前设置的secondaryNameNode的http-address删了。
起一个主节点服务id,叫做mycluster
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name> #根据上面的serverId找到这两台nn1,nn2主机
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name> #根据逻辑名nn1设置他的物理地址node01:8020
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name> #nn1分配http-address地址
<value>node01:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03.example.com:8485/mycluster</value> #当前共享集群日记的存储路径
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> #故障转移
</property>
故障隔离,出现故障立刻隔离,保证只有一个节点处于active状态
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
设置存放journalnode相关文件的路径
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
开启自动故障转移
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value> #把node01:9000改为mycluster。可以通过该serverId进入找到nn1,nn2主机
</property>
再修改下储存路径
配置zookeeper地址(最小节点3台)
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node03:2181</value>
</property>
配置完成后,把core-site.xml和hdfs-site.xml分发到集群的每台机器上。
安装和配置zookeeper,修改zookeeper下的zoo.cfg文件(把zoo_simple.cfg改名为zoo.cfg)
dataDir=/var/zk(文件路径)
最后添加serverId
server.1=node0002:2888:3888
server.2=node0003:2888:3888
server.3=node0004:2888:3888
配置完后把整个文件分发给其他几个zookeeper节点的机器,并在其他机器上创建文件路径的文件夹。
使用echo 1 > /var/zk/myid
每次zookeeper都会访问这个myid文件,其中的数字就是serverId设置的数字。
配置zookeeper环境变量,修改完分发配置文件
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.6
PATH追加$ZOOKEEPER_HOME/bin
读取下配置文件source /etc/profile
zookeeper集群运行 zkServer.sh start
(第一次启动){
再启动journalnode hadoop-daemon.sh start journalnode
选择一个主节点进行格式化 hfds namenode -format
启动主节点 hadoop-daemon.sh start namenode
把主节点的元数据信息拷贝到另一个namenode节点中 hdfs namenode -bootstrapStandby
在zookeeper上初始化hdfs(主namenode上) hdfs zkfc -formatZK
}
启动当前集群 start-dfs.sh
windows搭建hadoop环境
先解压hadoop和hadoop-src文件,再新建个hadoop-lib文件夹,把hadoop\share\hadoop里文件的jar包拷贝到hadoop-lib中。
然后配置环境,系统环境变量添加HADOOP_HOME 路径:hadoop的解压路径 和 HADOOP_USER_NAME 值 root。path中追加 %HADOOP_HOME%\bin 。
配置完成后安装eclips_mars ,装完后在windows->preferences->Hadoop Map/Reduce 中添加hadoop的解压路径。View视图中添加Map/Reduce Location。
在Map/Reduce Location中new hadoop location,取消user M/R Master Host的选项,在Host中输入active节点的ip和端口(不是网页访问的端口),Location Name输入名称,点击finish就创建好了。
创建一个java工程,导入jar包。windows->preferences->JAVA->Build Path->User Libraries下 新建一个Libraries,然后Add External JARs 选择hadoop-lib目录下所有的jar包导入。
右键工程名称,build path -> Configure build path -> java build path -> Libraries -> add Library -> user Library,选择刚新建的Library就行了。需要测试还可以导入JUnit。
把主节点的配置文件core-site.xml和hdfs-site.xml拷贝到工程的src目录下。