hadoop的HDFS集群搭建前期准备:
1、集群搭建
集群分类:
单节点:
- 在一个节点上运行作业
伪分布式集群:
- 在一个节点里面启动了多个进程来模拟这种分布式的操作,只需要一个节点
完全分布式集群:
- 将进程完全分布到不同节点里去运行
高可用集群:
联邦集群:
2、完全分布式集群搭建:
1.下载hadoop软件包: http://hadoop.apache.org/ --->Download--->Apache ---> https://www.apache.org/dist/hadoop/common/
2.上传到服务器
- 在hadoop01的编辑器上alt + p 打开sftp,将压缩包hadoop-centos-6.7.tar.gz( hadoop-2.7.7.tar.gz)拖入hadoop01这台机上即可
3.解包
- 说明:可以不用执行
- /opt/hadoop_2_7_7/ #解包目录,在/opt目录下创建sudo mkdir hadoop2x子目录
- 注意配置当前用户的高级权限:vi /etc/sudoers (hadoop ALL=(ALL) ALL),
- 这里我们在上一节准备工作时已经做了,没做的需要去配置,然后执行命令:
- tar -zxvf hadoop-2.7.7-centos-6.7.tar.gz -C /opt/hadoop2x
以上解包后,因为/opt是在root用户权限下执行的,所以操作时很多时候需要加sudo才能执行,不妨删除hadoop2x/,
直接解压到用户自己的家目录下:cd
执行 tar -zxvf hadoop-2.7.7-centos-6.7.tar.gz
4.了解目录结果
#如果直接解压的:
[hadoop@hadoop01 ~]$ cd hadoop-2.7.7
[hadoop@hadoop01 ~]$ ll
#否则,解压到/opt/hadoop2x/目录下的:
[hadoop@hadoop01 ~]$ cd /opt/hadoop2x/
[hadoop@hadoop01 hadoop2x]$ ll
total 4
drwxr-xr-x. 9 root root 4096 Oct 30 2018 hadoop-2.7.7
[hadoop@hadoop01 hadoop2x]$ cd ./hadoop-2.7.7
[hadoop@hadoop01 hadoop-2.7.7]$ ll
total 136
drwxr-xr-x. 2 root root 4096 Oct 30 2018 bin
drwxr-xr-x. 3 root root 4096 Oct 30 2018 etc
drwxr-xr-x. 2 root root 4096 Oct 30 2018 include
drwxr-xr-x. 3 root root 4096 Oct 30 2018 lib
drwxr-xr-x. 2 root root 4096 Oct 30 2018 libexec
-rw-r--r--. 1 root root 86424 Oct 30 2018 LICENSE.txt
-rw-r--r--. 1 root root 14978 Oct 30 2018 NOTICE.txt
-rw-r--r--. 1 root root 1366 Oct 30 2018 README.txt
drwxr-xr-x. 2 root root 4096 Oct 30 2018 sbin
drwxr-xr-x. 4 root root 4096 Oct 30 2018 share
#bin: 可执行文件(操作命令 hdfs...)
#sbin: 可执行文件(集群启动关闭,负载均衡...)
#etc: 配置文件
#share: 共享文件(common/hdfs/mapreduce等jar)
5.进程规划
6.配置
- 说明:可以不用执行
- 配置前案例:以下内容先只对hadoop01机器操作(单节点模式),并且是安照 /opt/hadoop2x/解包目录下操作的。
- vim hadoop-env.sh #整个hadoop的环境(cd /opt/hadoop2x/hadoop/hadoop-2.7.7/hadoop/目录下)
整个hadoop的环境,hadoop进程是jvm进程,配置jdk的环境变量
export JAVA_HOME=/opt/jdk1.8.0_144
运行一个mr示例:
cd /opt/hadoop2x/hadoop-2.7.7/ #切换到解压包的文件夹下
sudo mkdir input_test #新建一个用于测试的文件夹
cd input_test/ #切换到input_test/目录
sudo vim wordcount.txt #创建一个新的文件,并写入一些单词,并且出现重复单词
cd .. #切换到上层hadoop-2.7.7/目录下
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar #查看jar有哪些可执行的操作
sudo bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input_test/ output_test
#wordcount单词计数统计,统计input_test/文件夹下面的内容,放到output_test文件目录下去
cd output_test/ #切换到cd output_test/目录下 ll #查看生成的文件 cat part-r-00000 #查看结果
- 以上操作虽然可以执行,但很多时候需要启动高级用户权限,非常麻烦,所以建议直接解包在当前家目录下,为了不重复配置,将/opt/hadoop2x删除(cd /opt目录下执行sudo rm -rf hadoop2x),cd ~ 到家目录下执行tar -zxvf hadoop-2.7.7-centos-6.7.tar.gz,(也就是第3步的解包操作)
(1)、vim hadoop-env.sh #整个hadoop的环境(cd ./hadoop-2.7.7/etc/hadoop目录下 )
# 整个hadoop的环境,hadoop进程是jvm进程,配置jdk的环境变量
#找到jdk的安装目录
export JAVA_HOME=/opt/jdk1.8.0_144
(2)、vim core-site.xml #核心位置配置(cd ./hadoop-2.7.7/etc/hadoop目录下 )
- 默认配置官网说明地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml #默认的文件系统,默认值(file:///本地文件系统)
- #hdfs://ip:port hdfs集群的入口地址(namenode:客户端的请求和响应)
- #1.使用分布式的文件系统
- #2.namenode所在的节点为hadoop01
- #3.hdfs集群的访问路径: hdfs://hadoop01:9000
- <property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property> - #临时文件的存储目录:
- <property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property> - (3)、vim hdfs-site.xml
默认配置官网说明地址:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml
- dfs.replication: 副本数(默认3个副本) #按照默认
- dfs.blocksize:每个块的大小(1.x:64m, 2.x:128m) #按照默认128兆
- namenode的元数据存储的目录:
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>/home/hadoop/hadoopdata/name</value>
- </property>
- datanode的block信息存储的目录:
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>/home/hadoop/hadoopdata/data</value>
- </property>
- secondarynamenode的节点配置:
- <property>
- <name>dfs.secondary.http.address</name>
- <value>hadoop03:50090</value>
- </property>
- (4)、vim mapred-site.xml #分布式运算编程框架配置(cd ./hadoop-2.7.7/etc/hadoop目录下 )
- cp mapred-site.xml.template mapred-site.xml #由于没有mapred-site.xml文件,先复制一个,再配置
- mapreduce作业运行的平台配置:vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> - (5)、vim yarn-site.xml #运算资源调度系统配置(cd ./hadoop-2.7.7/etc/hadoop目录下 )
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp02</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- (6)、vim slaves #用于配置dn和nm(cd ./hadoop-2.7.7/etc/hadoop目录下 )
主从架构的集群,一主多从。
namenode/ResourceManager --> master(主)
datanode/NodeMnager --> slave(从,所以3台机都要配置上)
hadoop01
hadoop02
hadoop03
7.环境变量的配置
sudo vim /etc/profile #配置环境变量
或者在当前当前用户下(cd ~)配置也可以:
vim ~/.bashrc 或者vim ~/.bash_profile
以上三个任选一个位置,如:vim ~/.bash_profile
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
export PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
最后重启一下文件:source ~/.bash_profile
8.发送到其他节点
scp -r hadoop-2.7.7 hadoop@hadoop02:~/
scp -r .bash_profile hadoop@hadoop02:~/
scp -r hadoop-2.7.7 hadoop@hadoop03:~/
scp -r .bash_profile hadoop@hadoop03:~/
统一执行:source ~/.bash_profile
统一查看:echo $PATH
9.hdfs集群(namenode)格式化
- 在 HDFS 主节点上执行命令进行初始化 namenode
- hdfs namenode -format # (只能格式化一次)
10.启动集群
- 1.逐个进程启动
hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
yarn-daemon.sh start/stop ResourceManager/NodeManager
2.整个集群启动(涉及到通信,ssh免密登录)
start-dfs.sh/stop-dfs.sh
start-yarn.sh/stop-yarn.sh #(必须在rm节点启动)所以这里在hadoop02里启动
3.全部启动
start-all.sh/stop-all.sh - 注意:如果启动错误,去查看日志
11.成功检测
- 1.jps #查看启动进程
2.利用图形界面
hdfs: http://hadoop01:50070
yarn: http://hadoop02:8088
3.运行任务 - 在hadoop01机上创建一个文件mkdir input
在input/目录下vim wordcount.txt 随便写入几行内容,保存并退出 - hdfs: hdfs dfs -copyFromLocal input/ / 或者hdfs dfs -copyFromLocal input/ hdfs://hadoop01:9000/
- hdfs dfs -ls / 或者http://hadoop01:50070 #查询一下看是否上传
- yarn: hadoop jar hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
- hdfs dfs -ls / 或者 hdfs dfs -ls hdfs://hadoop01:9000/ 查看输出的内容
- #wordcount单词计数统计,统计input/文件夹下面的内容,放到output文件目录下去