分布式学习笔记

虚拟机免密钥,在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目录下。

posted @ 2019-10-09 13:03  linyaoguo  阅读(137)  评论(0编辑  收藏  举报