Hadoop生产集群搭建

第一次成功搭建完全分布式生产集群,心情有点小激动,做个笔记,记录下过程 :
采用的是hadoop2.2.0+jdk7+zookeeper3.4.5,运用的工具是VMare11,notepad++,secureCRT
1. 集群规划(默认每个主机都安装了JDK1.7)
主机名 IP地址 安装软件 运行进程
hadoop1 192.168.0.2 Hadoop NameNode+DFSZKFailoverController
hadoop2 192.168.0.3 Hadoop NameNode+DFSZKFailoverController
hadoop3 192.168.0.4 Hadoop ResourceManager
hadoop4 192.168.0.5 Hadoop+zookeeper DataNode+NodeManager+ JournalNode+QuorumPeerMain
hadoop5 192.168.0.6 Hadoop+zookeeper DataNode+NodeManager+JournalNode、QuorumPeerMain
Hadoop6 192.168.0.7 Hadoop, zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
2. 安装ssh免登陆
根据集群规划,要在hadoop1,hadoop2两个主机上运行NameNode(一主一备),在hadoop3上运行ResourceManger,所以首先NameNode之间需要免登陆,NameNode到节点DataNode之间需要免登陆,ResourceManger与数据节点DataNode也需要登录。但是在这里,我是要在hadoop1上配置hadoop2.2.0,然后把它远程考到其他节点,所以此时会配置hadoop1到其他节点的ssh免登陆
2.1 首先在192.168.0.2的主机上修改主机名,以及本地hosts的主机和IP的映射文件:
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop1
vim /etc/hosts(第一次的时候这个地方没有配,栽了多大跟头呀,我擦)
192.168.0.2 hadoop1
192.168.0.3 hadoop2
192.168.0.4 hadoop3
192.168.0.5 hadoop4
192.168.0.6 hadoop5
192.168.0.7 hadoop6
配置完hosts后,重启192.168.0.2主机
2.2 重启完192.168.0.2后,该主机名变为hadoop1,就可以用主机名代替IP地址,来访问这台主机了。
2.2.1现在首先配hadoop1(192.168.0.2)到其他5个节点的免登陆:
在hadoop1上生产一对钥匙:ssh-keygen -t rsa
运行这个命令后会提示输入一些信息,不用管,一直敲Enter即可,连敲四个Enter即完成
hadoop1设置到其他节点的免登陆(包括hadoop1)
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
ssh-copy-id hadoop4
ssh-copy-id hadoop5
ssh-copy-id hadoop6
这些命令都是在hadoop1上执行,第一执行这个命令时,会提示输入yes,以及相应主机的登录密码,以后就不会了。运行完成之后,即可从hadoop1向其他5的节点拷文件了。
将hosts的文件远程拷贝到其他节点:
scp –r /etc/profile hadoop2:/etc/
scp –r /etc/profile hadoop3:/etc/
scp –r /etc/profile hadoop4:/etc/
scp –r /etc/profile hadoop5:/etc/
scp –r /etc/profile hadoop6:/etc/
然后分别在每台主机上运行 :source /etc/profile,这样每天的主机就可以通过主机名访问连接了。hosts文件是一个本地的域名服务器文件,主机在访问时,会首先访问hosts文件里对应的地址解析。
最后分别修改剩余的每台主机的主机名:
vi /etc/sysconfig/network(参见2.1)
分别为hadoop2,hadoop3,hadoop4,hadoop5,hadoop6
2.2.2配置hadoop2到hadoop1,hadoop4、hadoop5、hadoop6的免登陆
同理在hadoop2运行:
ssh-keygen -t rsa(同样是敲4个Enter)
设置到其他节点的免登陆:
ssh-copy-id hadoop1
ssh-copy-id hadoop4
ssh-copy-id hadoop5
ssh-copy-id hadoop6
这个一次,同样会询问你是否yes,以及登陆密码
2.2.3配置hadoop3到其他节点的免登陆(同理见上)
3. 安装jdk
首先在hadoop上安装Java,然后把java远程拷贝到其他节点即可,我的安装源文件都是通过ftp,从windows上上传到hadoop1上的/upload文件夹内。我把java安装在/usr目录下
3.1上传
3.2解压jdk,创建安装目录
mkdir /usr/java
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/
3.3将java添加到环境变量中
vim /etc/profile
在文件最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_55
export PATH= PATH:  JAVA_HOME/bin
刷新配置
source /etc/profile
3.4将java文件夹拷贝到其他节点上
scp –r /usr/java/ hadoop2: /usr/
scp –r /usr/java/ hadoop3: /usr/
scp –r /usr/java/ hadoop4: /usr/
scp –r /usr/java/ hadoop5: /usr/
scp –r /usr/java/ hadoop6: /usr/
然后把分别到其他5台主机上把java添加到环境变量中,并刷新配置:
source /etc/profile
4. 安装hadoop2.2.0
4.1上传解压
我的软件除了Java,其他都同统一安装在/BigDate目录下
tar -zxvf hadoop-2.2.0.tar.gz -C /Bigdate/
4.2配置HDFS(hadoop2.0所有的配置文件都在 HADOOP H OME/etc/hadoophadoopvim/etc/profileexportHADOOP H OME=/usr/java/jdk1.7.0 5 5exportHADOOP H OME=/BigDate/hadoop2.2.0exportPATH=  PATH: JAVA H OME/bin:  HADOOP_HOME/bin
hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /BigDate/hadoop-2.2.0/etc/hadoop
4.2.1修改hadoo-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_55

4.2.2修改core-site.xml
            <configuration>
                <!-- 指定hdfs的nameservice为ns1 -->
                <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://ns1</value>
                </property>
                <!-- 指定hadoop临时目录 -->
                <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/itcast/hadoop-2.2.0/tmp</value>
                </property>
                <!-- 指定zookeeper地址 -->
                <property>
                    <name>ha.zookeeper.quorum</name>
                    <value>itcast04:2181,itcast05:2181,itcast06:2181</value>
                </property>
            </configuration>
4.2.3修改hdfs-site.xml
        <configuration>
            <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->               <property>
                <name>dfs.nameservices</name>
                <value>ns1</value>
            </property>
            <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
                <property>
                    <name>dfs.ha.namenodes.ns1</name>
                    <value>nn1,nn2</value>
                </property>
            <!-- nn1的RPC通信地址 -->
                <property>
                    <name>dfs.namenode.rpc-address.ns1.nn1</name>
                    <value>hadoop1:9000</value>
                </property>
            <!-- nn1的http通信地址 -->
                <property>
                    <name>dfs.namenode.http-address.ns1.nn1</name>
                    <value>hadoop1:50070</value>
                </property>
            <!-- nn2的RPC通信地址 -->
                <property>
                    <name>dfs.namenode.rpc-address.ns1.nn2</name>
                    <value>hadoop2:9000</value>
                </property>
            <!-- nn2的http通信地址 -->
                <property>
                    <name>dfs.namenode.http-address.ns1.nn2</name>
                    <value>hadoop2:50070</value>
                </property>
            <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
                <property>
                    <name>dfs.namenode.shared.edits.dir</name>
               <value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/ns1</value>
                </property>
                <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
                <property>
                    <name>dfs.journalnode.edits.dir</name>
                    <value>/BigDate/hadoop-2.2.0/journal</value>
                </property>
                <!-- 开启NameNode失败自动切换 -->
                <property>
                    <name>dfs.ha.automatic-failover.enabled</name>
                    <value>true</value>
                </property>
                <!-- 配置失败自动切换实现方式 -->
                <property>
                <name>dfs.client.failover.proxy.provider.ns1</name>                 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                </property>
                <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
                <property>
                    <name>dfs.ha.fencing.methods</name>
                    <value>
                        sshfence
                        shell(/bin/true)
                    </value>
                </property>
                <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
                <property>
                    <name>dfs.ha.fencing.ssh.private-key-files</name>
                    <value>/root/.ssh/id_rsa</value>
                </property>
                <!-- 配置sshfence隔离机制超时时间 -->
                <property>
                    <name>dfs.ha.fencing.ssh.connect-timeout</name>
                    <value>30000</value>
                </property>
            </configuration>
    4.2.4修改mapred-site.xml
            <configuration>
                <!-- 指定mr框架为yarn方式 -->
                <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
                </property>
            </configuration>    

        4.2.5修改yarn-site.xml
            <configuration>
                <!-- 指定resourcemanager地址 -->
                <property>
                    <name>yarn.resourcemanager.hostname</name>
                    <value>hadoop3</value>
                </property>
                <!-- 指定nodemanager启动时加载server的方式为shuffle server -->
                <property>
                    <name>yarn.nodemanager.aux-services</name>
                    <value>mapreduce_shuffle</value>
                </property>
            </configuration>

4.2.6修改slaves(slaves是指定子节点的位置,因为要在hadoop1上启动HDFS、在hadoop3启动yarn,所以hadoop1上的slaves文件指定的是datanode的位置,hadoop3上的slaves文件指定的是nodemanager的位置)
hadoop4
hadoop5
hadoop6
4.4将配置好的hadoop拷贝到其他节点
scp -r /BigDate hadoop2:/
scp -r /BigDate hadoop3:/
scp -r /BigDate hadoop4:/
scp -r /BigDate hadoop5:/
scp -r /BigDate hadoop6:/
5.安装zookeeper3.4.5
5.1解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /BigDate/
5.2修改配置
cd /BigDate/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改:
dataDir=/BigDate/zookeeper-3.4.5/tmp
在最后添加:
server.1=hadoop4:2888:3888
server.2=hadoop5:2888:3888
server.3=hadoop6:2888:3888
保存退出
然后创建一个tmp文件夹
mkdir /BigDate/zookeeper-3.4.5/tmp
再创建一个空文件
touch /BigDate/zookeeper-3.4.5/tmp/myid
最后向该文件写入ID
echo 1 > /BigDate/zookeeper-3.4.5/tmp/myid
5.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop5、hadoop6根目录下创建一个BigDate目录:mkdir /BigDate)
scp -r /BigDate/zookeeper-3.4.5/ hadoop5:/BigDate/
scp -r /BigDate/zookeeper-3.4.5/ hadoop6:/BigDate/

注意:修改hadoop5、hadoop6对应/BigDate/zookeeper-3.4.5/tmp/myid内容
        hadoop5:
            echo 2 > /BigDate/zookeeper-3.4.5/tmp/myid
        hadoop6:
            echo 3 > /BigDate/zookeeper-3.4.5/tmp/myid

6.第一次启动(按照顺序启动)
6.1启动zookeeper集群(分别在hadoop4、hadoop5、hadoop6上启动zk)
cd /BigDate/zookeeper-3.4.5/bin/
./zkServer.sh start
查看状态:一个leader,两个follower
./zkServer.sh status

6.2启动journalnode(在hadoop1上启动所有journalnode,注意是复数s的那个脚本)
cd /BigDate/hadoop-2.2.0
sbin/hadoop-daemons.sh start journalnode
运行jps命令检验,hadoop4、hadoop5、hadoop6上多了JournalNode进程
6.3格式化HDFS
在hadoop1上执行命令:
hdfs namenode -format
格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/BigDate/hadoop-2.2.0/tmp,然后将/BigDate/hadoop-2.2.0/tmp拷贝到hadoop2的/BigDate/hadoop-2.2.0/下。
scp -r tmp/ hadoop2:/BigDate/hadoop-2.2.0/

6.4格式化ZK(在hadoop1上执行即可)
hdfs zkfc -formatZK
6.5启动HDFS(在hadoop1上执行)
sbin/start-dfs.sh
6.6启动YARN(是在hadoop3上执行start-yarn.sh,把namenode和resourcemanager分开是,因为他们都要占用大量资源,所以把他们分开了,要分别在不同的机器上启动)
sbin/start-yarn.sh

ok,大功告成
可以通过:http://192.168.0.2:50070
http://192.168.0.3:50070
访问两个NameNode,会发现一个active,一个是standby
通过 http://192.168.0.3:8088访问yarn的管理界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值