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/ 就可以查看名称节点和数据节点的状态。
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