Hadoop分布式集群搭建

Hadoop分布式集群和前面的伪分布式安装方法类似,Hadoop用户创建,ssh配置,java环境安装,Hadoop安装等过程查看前一篇:Hadoop的安装和使用

下面在两台物理机上搭建集群环境,一台机器作为Master节点,一台机器作为Slave节点,3台和3台以上机器构成的集群搭建,方法也类似。

1 网络配置

1.1 修改主机名

为了方便区分Master节点和Slave节点,先把两台机器的主机名修改为Master和Slave1。

$ sudo vim /etc/hostname

直接修改,重启即可。

1.2 在hosts文件中添加IP与主机名的映射关系

$ sudo vim /etc/hosts

Master 和Slave1两台机器都要修改

192.168.0.115  Master
192.168.0.114  Slave1

【注意】在hosts文件中 127.0.0.1 对应的主机名只能是一个 localhost,多余的将其删除,否则会报错

测试是否修改成功,在两台机器上测试,是否能够相互ping通。

$ ping Master -c 3   # 只ping 3次
$ ping Slave1 -c 3

2 设置SSH无密码登录节点

要让Master能够通过SSH无密码登录各个Slave节点。

因为修改过主机名,所以之前生成的公钥,需要删掉,重新生成。

在Master上执行如下命令:

cd ~/.ssh              # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*           # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa       # 执行该命令后,遇到提示信息,一直按回车就可以
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

接着将Master中的id_rsa.pub文件复制到Slave1中

$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

在Slave1中执行如下命令:

$ mkdir ~/.ssh       # 如果不存在该文件夹需先创建
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub    # 用完以后就可以删掉

在Master中验证是否可以无密码登录Slave1:$ ssh Slave1,如果成功,则配置完成。

3 配置PATH变量

~/.bashrc文件中添加如下内容,并$ source ~/.bashrc使其生效

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

4 配置集群

修改/usr/local/hadoop/etc/hadoop/下的文件

4.1 修改slaves文件

slaves文件的内容修改为:Slave1

4.2 修改core-site.xml文件

内容修改为:


        
                fs.defaultFS
                hdfs://Master:9000
        
        
                hadoop.tmp.dir
                file:/usr/local/hadoop/tmp
                Abase for other temporary directories.
        

4.3 修改hdfs-site.xml文件

Hadoop的分布式文件系统HDFS一般采用冗余存储,一份文件通常保存3份副本,但是这里只设置了一个Slave节点,所以dfs.replication的值还是设置为1。
具体内容如下:


        
                dfs.namenode.secondary.http-address
                Master:50090
        
        
                dfs.replication
                1
        
        
                dfs.namenode.name.dir
                file:/usr/local/hadoop/tmp/dfs/name
        
        
                dfs.datanode.data.dir
                file:/usr/local/hadoop/tmp/dfs/data
        

4.4 修改mapred-site.xml文件

/usr/local/hadoop/etc/hadoop目录下的mapred-site.xml.template文件,复制重命名为mapred-site.xml,修改内容如下:


        
                mapreduce.framework.name
                yarn
        
        
                mapreduce.jobhistory.address
                Master:10020
        
        
                mapreduce.jobhistory.webapp.address
                Master:19888
        

4.5 修改yarn-site.xml文件

内容如下:


        
                yarn.resourcemanager.hostname
                Master
        
        
                yarn.nodemanager.aux-services
                mapreduce_shuffle
        

以上配置完成后,Master节点就配置完成了。
如果之前运行过伪分布式模式,现在先删除运行后的临时文件。然后把Master下的hadoop文件夹打包压缩,复制到Slave1。

$ cd /usr/local
$ sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
$ sudo rm -r ./hadoop/logs/*   # 删除日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
$ cd ~
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop

4.6 配置Slave1节点

$ sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop /usr/local/hadoop

如果还要其他节点,执行相同的操作即可。

5 启动Hadoop集群

在Master上执行。
首次运行需要,格式化名称节点./bin/hdfs namenode -format
然后就可以启动hadoop了

$ ./sbin/start-dfs.sh
$ ./sbin/start-yarn.sh
$ ./sbin/mr-jobhistory-daemon.sh start historyserver

使用jps查看启动的各个节点,缺少任何进程,都表示出错。

$ jps
3585 JobHistoryServer
2938 NameNode
3148 SecondaryNameNode
3308 ResourceManager
3629 Jps

打开浏览器输入:http://master:50070/ 就可以查看名称节点和数据节点的状态。

Hadoop分布式集群搭建_第1张图片

6 执行分布式实例

创建HDFS上的用户目录

$ hdfs dfs -mkdir -p /user/hadoop

在HDFS中创建input目录,并把/usr/local/hadoop/etc/hadoop目录中的配置文件作为输入文件复制到input目录中

$ hdfs dfs -mkdir input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

运行MapReduce作业

$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input outpu t 'dfs[a-z.]+'

运行成功如下:

$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input outpu t 'dfs[a-z.]+'
19/01/12 04:58:49 INFO client.RMProxy: Connecting to ResourceManager at Master/192.168.0.115:8032
19/01/12 04:58:51 INFO input.FileInputFormat: Total input paths to process : 9
19/01/12 04:58:51 INFO mapreduce.JobSubmitter: number of splits:9
19/01/12 04:58:51 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1547285975031_0001
19/01/12 04:58:53 INFO impl.YarnClientImpl: Submitted application application_1547285975031_0001
19/01/12 04:58:53 INFO mapreduce.Job: The url to track the job: http://Master:8088/proxy/application_1547285975031_0001/
19/01/12 04:58:53 INFO mapreduce.Job: Running job: job_1547285975031_0001
19/01/12 04:59:21 INFO mapreduce.Job: Job job_1547285975031_0001 running in uber mode : false
19/01/12 04:59:21 INFO mapreduce.Job:  map 0% reduce 0%
19/01/12 05:02:09 INFO mapreduce.Job:  map 33% reduce 0%
19/01/12 05:02:10 INFO mapreduce.Job:  map 67% reduce 0%
19/01/12 05:02:24 INFO mapreduce.Job:  map 78% reduce 0%
19/01/12 05:02:25 INFO mapreduce.Job:  map 100% reduce 0%
19/01/12 05:02:27 INFO mapreduce.Job:  map 100% reduce 100%
19/01/12 05:02:27 INFO mapreduce.Job: Job job_1547285975031_0001 completed successfully

查看输出结果

$ hdfs dfs -cat output/*
1       dfsadmin
1       dfs.replication
1       dfs.namenode.secondary.http
1       dfs.namenode.name.dir
1       dfs.datanode.data.dir

关闭集群

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

你可能感兴趣的:(Hadoop分布式集群搭建)