Hadoop集群搭建

首次尝试写博,不足之处请指正。以ubantu linux为例,搭建集群模式。首先准备三台机器A、B和C,A担任Namenode,同时兼任Datanode(实际生产环境 建议独立)。

——网络及系统配置——

启动三台机器,配置固定IP,例如我的三台机器IP分别为:
192.168.102.129
192.168.102.130
192.168.102.131
测试网络连通性:在A的Terminal中,执行ping命令:

ping 192.168.102.130
ping 192.168.102.131

Ctrl+C中止

在ABC机器的终端窗口中,分别修改机器名为node01、node02和node03:

sudo gedit /etc/hostname

设置每台机器的ip与主机名的对应关系(在/etc/hosts文件中存放的是域名与ip的对应关系)注:请将原文件最上面的第二行127.0.1.1 删除掉,每台机器都要做:

sudo gedit /etc/hosts

在打开的文件中,将第二行替换为以下三行:

192.168.102.129 node01
192.168.102.130 node02
192.168.102.131 node03  

重启,在node01中分别ping两台机器:

ping node02
ping node03

正常连接即可。

——配置SSH免密登陆——

原理:namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode 上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode 上。当namenode 通过ssh 连接datanode 时,datanode 就会生成一个随机数并用namenode 的公钥对随机数进行加密,并发送给namenode。namenode 收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode 确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode 上。

在每台机器上,安装ssh服务:

 sudo apt-get install ssh

在每台机器上,执行如下命令:

 ssh localhost     

在namenode(master主机)上,使用如下命令生成公私钥:

 cd .ssh
 ssh-keygen -t rsa

然后一路回车,在.ssh下生成公私钥。
将namenode(master主机)上的公钥分别加入node01、node02和node03机器的授权文件中。

 ssh-copy-id hduser@node01
 ssh-copy-id hduser@node02
 ssh-copy-id hduser@node03

测试。在node01机器上,使用ssh分别连接node01、node02和node03:

 ssh node01
 ssh node02
 ssh node03

这时会发现不需要输入密码,直接就ssh连接上了这三台机器。
记得最后通过这个命令退出ssh连接:

 exit   

在node01机器上(master主机)上修改slaves 文件:

cd
gedit hadoop-2.2.0/etc/hadoop/slaves

写入下面三行
node01
node02
node03

——环境配置——

安装配置jdk1.7+
将JDK 7+下载到node01的用户主目录下,cp安装包到/usr下建立java,tar解压安装,打开配置文档:

sudo gedit /etc/profile

文档末尾填写:

export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

生效配置:

source /etc/profile

验证:

java -version
javac -version 

出现版本号,即成功。

安装配置Hadoop
将hadoop-2.2.0.tar.gz包解压缩到用户主目录下:

cd ~
tar -zxvf hadoop-2.2.0.tar.gz

配置Hadoop的环境变量:

sudo gedit /etc/profile 

在java环境变量配置部分,增加如下内容:

export HADOOP_HOME=/home/hduser/hadoop-2.2.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

测试环境变量是否配置正确:

hadoop version

在主文件夹下,创建如下的目录结构:
hddata
- tmp
- name
- data
配置HADOOP_HOME/etc/hadoop/下的多个配置文件:

hadoop-env.sh文件

gedit hadoop-env.sh

将#The java implementation to use.下内容改为jdk路径,保存退出:

export JAVA_HOME=/usr/java/jdk1.7.0_51

core-site.xml文件

gedit core-site.xml
<configuration>
    <!--NameNode URI-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node01:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hduser/hddata/tmp</value>
    </property>
    <!--Size of read/write buffer used in SequenceFiles.-->
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
        <description>文件大小的倍数(4096 on Intel x86)</description>
    </property>
</configuration>

hdfs-site.xml文件

<configuration>
    <!--位于本地文件系统的路径,NameNode在这里存储命名空间和事务日志-->
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hduser/hddata/name</value>
    </property>
    <!--以逗号分隔的DataNode本地文件系统路径列表,DataNode在这里存储数据块-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hduser/hddata/data</value>
    </property>
    <!--HDFS块大小,这里指定为256MB,用于大文件系统-->
    <property>
        <name>dfs.blocksize</name>
        <value>268435456</value>
    </property>
    <!--HDFS块冗余数量(可以不配,默认就是3)-->
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--更多的NameNode服务器线程,用来处理大量来自DataNodes的RPCs-->
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property> 
</configuration>

复制mapred-site.xml.template并改名为mapred-site.xml。

cp mapred-site.xml.template mapred-site.xml
gedit mapred-site.xml
<configuration>
    <!--配置MapReduce程序-->
    <property>
        <name>mapreduce.framework.name</name>
            <value>yarn</value>
    <description>用来执行MapReduce jobs的运行时框架,为以下值之一:local,classic或yarn</description>
    </property>

    <!--MapReduce JobHistory Server-->
    <!-- 配置 MapReduce JobHistory Server 地址,默认端口10020 -->
    <property>
         <name>mapreduce.jobhistory.address</name>
         <value>node01:10020</value>
     <description>MapReduce JobHistory Server IPC host:port</description>
    </property>
    <!-- 配置 MapReduce JobHistory Server web ui 地址,默认端口19888 -->
    <property>
         <name>mapreduce.jobhistory.webapp.address</name>
         <value>node01:19888</value>
     <description>MapReduce JobHistory Server Web UI host:port</description>
    </property>
</configuration>

yarn-site.xml文件

<configuration>
    <!--配置ResourceManager-->
    <!--将yarn.resourcemanager.hostname的值修改为master机器的ip地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node01</value>
    </property>

    <!--配置NodeManager-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>为Map Reduce程序设置的Shuffle service。使用逗号分隔。service name只能包含a-zA-Z0-9_,不能以数字开头</description>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

至此,环境配置完成。接下来将环境通过scp传给node02和node03:

scp -r hduser@node01:/usr/java hduser@node02:/usr
scp -r hduser@node01:~/hadoop-2.2.0 hduser@node02:~/

同理,scp到node03。
分别编辑node02和node03的/etc/profile文件,与node01一致。

——格式化HDFS文件系统——
在node01(NameNode)上,运行下面的命令来格式化一个新的文件系统:

hdfs namenode -format

注:这个格式化只做一次。如果要重新格式化HDFS,则要将原来的$HADOOP_HOME下的hddata/name 和hddata/data 目录清空,重新格式化。

——集群测试——
启动HDFS文件系统,这个命令将首先启动一个master node中的NameNode。然后它将启动在slaves文件中所提及到的所有机器中的DataNode服务。最后,它将启动Secondary NameNode。(亦可start-all.sh启动所有服务)

start-dfs.sh

HDFS带有一个监控web控制台来验证安装以及监视HDFS集群。
http://node01:50070/
这里写图片描述
另外,还可以使用如下的命令来获得HDFS状态的报告:

hadoop dfsadmin -report

或着

hdfs dfsadmin -report

运行下面的命令来启动YARN service服务:

start-yarn.sh

运行下面的命令来启动MapReduce JobHistoryServer:

mr-jobhistory-daemon.sh start historyserver

通过jps命令列表显示进程,以检查安装情况:

jps

访问ResourceManager的基于web的控制台页面:
http://node01:8088/

运行pi程序,求PI值:

hadoop jar ~/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar pi 10 20

最后,使用如下的命令关闭history service、YARN service和HDFS service(逆序):

mr-jobhistory-daemon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh

用jps查看

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值