感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
hadoop系列之hadoop伪分布式模式部署
hadoop伪分布式部署
伪分布式并不是真的分布式,这种模式是在一台机器上各个进程运行在Hadoop的各个模块上,各个进程是分开运行的,但是它们运行在同一操作系统上的,同一台机器上。
1、解压hadoop软件包
[root@hadoop softwares]# tar -zxvfhadoop-2.5.0-cdh5.3.6.tar.gz -C /opt/modules/
2、创建一个普通用户
[root@hadoop ~]# useradd hadoop 创建一个hadoop普通用户
[root@hadoop ~]# passwd hadoop 为hadoop用户设置命名,密码为redhat
Changing password for user hadoop.
New password:
BAD PASSWORD: it is based on a dictionaryword
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updatedsuccessfully.
给hadoop用户sudo权限: vi /etc/sudoers
root ALL=(ALL) ALL
hadoop ALL=(root) NOPASSWD:ALL
注意:生产环境一定要注意普通用户的权限限制
将hadoop文件夹的所有者指定为hadoop用户
如果存放hadoop的目录的所有者不是hadoop,之后hadoop运行中可能会有权限问题,那么就讲所有者改为hadoop。
[root@hadoop ~]# chown -R hadoop:hadoop /opt/modules/
3、配置Hadoop环境变量:vi /etc/profile,配置文明后面追加两行
exportHADOOP_HOME="/opt/modules/hadoop-2.5.0-cdh5.3.6/"
exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
[root@hadoop ~]# source/etc/profile 执行source命令使配置生效
验证HADOOP_HOME参数
[root@hadoop ~]# echo $HADOOP_HOME
/opt/modules/hadoop-2.5.0-cdh5.3.6/
4、配置hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME环境变量
[root@hadoop hadoop-2.5.0-cdh5.3.6]# pwd
/opt/modules/hadoop-2.5.0-cdh5.3.6
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vi etc/hadoop/hadoop-env.sh
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vietc/hadoop/mapred-env.sh
[root@hadoophadoop-2.5.0-cdh5.3.6]# vi etc/hadoop/yarn-env.sh
修改三个环境变量的JAVA_HOME参数为:
export JAVA_HOME="/opt/modules/jdk1.7.0_79"
5、修改hadoop配置文件
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vietc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.bigdata.com:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/data/tmp</value>
</property>
</configuration>
[root@hadoop hadoop-2.5.0-cdh5.3.6]# mkdir -p /home/data/tmp
[root@hadoop hadoop-2.5.0-cdh5.3.6]# chown -R hadoop:hadoop/home/data/tmp
注意:fs.defaultFS参数配置的是HDFS的访问地址,默认的hadoop.tmp.dir
是/tmp/hadoop-${user.name}
,此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。
配置hdfs-site.xml
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vi etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
因为这里是伪分布式环境,只有一个节点, HDFS存储时的备份数量这里设置为1。
6、格式化HDFS
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfs namenode -format
格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。
格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/home/data/tmp目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# ls -l /home/data/tmp
total 4
drwxr-xr-x 3 root root 4096 Mar 19 21:27 dfs
[root@hadoop hadoop-2.5.0-cdh5.3.6]# ls -l/home/data/tmp/dfs/name/current/
total 16
-rw-r--r-- 1 root root 351 Mar 19 21:27 fsimage_0000000000000000000
-rw-r--r-- 1 root root 62 Mar 19 21:27 fsimage_0000000000000000000.md5
-rw-r--r-- 1 root root 2 Mar 19 21:27 seen_txid
-rw-r--r-- 1 root root 203 Mar 19 21:27 VERSION
fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
fsimage*.md5 是校验文件,用于校验fsimage的完整性。
seen_txid 是hadoop的版本
vession文件里保存:
namespaceID:NameNode的唯一ID。
clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# cat /home/data/tmp/dfs/name/current/VERSION
#Mon Mar 19 21:27:10 EDT 2018
namespaceID=463572925 NameNode的唯一ID
clusterID=CID-59416b37-322b-40bc-b8d4-c5e7795c8935集群ID,namenode和datanode集群ID相同
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1469574068-10.20.30.75-1521509230503
layoutVersion=-59
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemon.shstart namenode 启动namenode
starting namenode, logging to/opt/modules/hadoop-2.5.0-cdh5.3.6/logs/hadoop-root-namenode-hadoop.bigdata.com.out
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemon.shstart datanode 启动datanode
starting datanode, logging to/opt/modules/hadoop-2.5.0-cdh5.3.6/logs/hadoop-root-datanode-hadoop.bigdata.com.out
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemon.shstart secondarynamenode
starting secondarynamenode, logging to/opt/modules/hadoop-2.5.0-cdh5.3.6/logs/hadoop-root-secondarynamenode-hadoop.bigdata.com.out
[root@hadoop hadoop-2.5.0-cdh5.3.6]# jps 查看相关进程是否启动成功
7087 Jps
6876 DataNode
6827 NameNode
7033 SecondaryNameNode
7、HDFS功能测试(创建目录、上传、下载文件)
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfsdfs -mkdir /test2 创建目录
18/03/19 22:47:17 WARN util.NativeCodeLoader: Unable to loadnative-hadoop library for your platform... using builtin-java classes whereapplicable
[root@hadoop hadoop-2.5.0-cdh5.3.6]#bin/hdfs dfs -ls / 查看是否创建成功
18/03/19 22:47:40 WARN util.NativeCodeLoader: Unable to loadnative-hadoop library for your platform... using builtin-java classes whereapplicable
Found 2 items
drwxr-xr-x - rootsupergroup 0 2018-03-19 22:45/test
drwxr-xr-x - rootsupergroup 0 2018-03-19 22:47/test2
上传文件到hdfs文件系统上
[root@hadoop hadoop-2.5.0-cdh5.3.6]#bin/hdfs dfs -put etc/hadoop/*.xml /test2
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -ls /test2
Found 8 items
-rw-r--r-- 1 rootsupergroup 3589 2018-03-19 22:50/test2/capacity-scheduler.xml
-rw-r--r-- 1 rootsupergroup 998 2018-03-19 22:50/test2/core-site.xml
-rw-r--r-- 1 rootsupergroup 9201 2018-03-19 22:50/test2/hadoop-policy.xml
-rw-r--r-- 1 rootsupergroup 867 2018-03-19 22:50/test2/hdfs-site.xml
-rw-r--r-- 1 rootsupergroup 620 2018-03-19 22:50/test2/httpfs-site.xml
-rw-r--r-- 1 rootsupergroup 3523 2018-03-19 22:50/test2/kms-acls.xml
-rw-r--r-- 1 rootsupergroup 5511 2018-03-19 22:50/test2/kms-site.xml
-rw-r--r-- 1 rootsupergroup 690 2018-03-19 22:50/test2/yarn-site.xml
读取HDFS上的文件内容
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfsdfs -cat /test2/yarn-site.xml
从HDFS上下载文件到/tmp目录下
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfsdfs -get /test2/yarn-site.xml /tmp 下载到/tmp目录下
8、配置yarn
默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapred-site.xml。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# cpetc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vietc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
指定mapreduce运行在yarn框架上。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vietc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop.bigdata.com</value>
</property>
</configuration>
yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。
9、启动yarn
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/modules/hadoop-2.5.0-cdh5.3.6/logs/yarn-root-resourcemanager-hadoop.bigdata.com.out
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/yarn-daemon.shstart nodemanager
starting nodemanager, logging to/opt/modules/hadoop-2.5.0-cdh5.3.6/logs/yarn-root-nodemanager-hadoop.bigdata.com.out
[root@hadoop hadoop-2.5.0-cdh5.3.6]#jps
6876 DataNode
6827 NameNode
8108 ResourceManager
7033 SecondaryNameNode
8478 Jps
8358 NodeManager
可以看到ResourceManager、NodeManager已经启动成功了。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfsdfs -rmr /user/root/out* 删除数据
YARN的Web页面
10 运行MapReduce job 体验hadoop平台
在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的WordCount实例。
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs-mkdir -p /file/input 创建测试用输入目录
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs-put etc/hadoop/*.xml /file/input 上传测试文件
[root@hadoop]# bin/hadoop jarshare/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar grep/file/input output 'dfs[a-z.]+'
[root@hadoop hadoop-2.5.0-cdh5.3.6]# bin/hadoop jarshare/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /test2/yarn-site.xml output2
ls -l 命令可以在当前目录下看到一个output2目录,里面是作业任务输出结果
output2目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。
part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方有是-m-。
一个reduce会产生一个part-r-开头的文件。
11、开启日志聚集
MapReduce是在各个机器上运行的,在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在HDFS上,这个过程就是日志聚集。
Hadoop默认是不启用日志聚集的。在yarn-site.xml文件里配置启用日志聚集。
配置日志聚集功能:
[root@hadoop hadoop-2.5.0-cdh5.3.6]# vietc/hadoop/yarn-site.xml
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
yarn.log-aggregation-enable:是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。
12、重启Yarn进程HistoryServer进程:
[root@hadoop hadoop-2.5.0-cdh5.3.6]# sbin/stop-yarn.sh 关闭yarn
[root@hadoop hadoop-2.5.0-cdh5.3.6]#sbin/start-yarn.sh 启动yarn
[root@hadoop hadoop-2.5.0-cdh5.3.6]#sbin/mr-jobhistory-daemon.sh start historyserver 启动日志服务
启动服务后,点击history按钮就可以打开日志了