1. Hadoop常用组件:
1. hadoop commons :hadoop基础模块。
2. HDFS:存储数据(读-写),一次写入、多次读取。(1)namenode :元数据存储的位置。(2)datanode: 存储数据。
3. MapReduce:是一种计算模型,设计思想是“分而治之”。map:拆分阶段。reduce:合并阶段。
4. Yarn:资源管理器,管理cpu、内存、虚拟代码。包括ResourceManager 和 NodeManager。
2.伪分布式模式环境搭建:
2.1 Linux环境准备:
根据上一篇文章的方法,在虚拟机安装Linux CentOS 6,本节从之前安装的操作系统开始继续。
1. 修改计算机主机名(需要用root用户):
修改配置文件:
#vi /etc/sysconfig/network
找到以“HOSTNAME=”开头的那一行,注意这里不要使用下划线。
修改成“HOSTNAME=hadoop-namenode.ipma.com”。
2. 增加普通用户(不使用root用户来使用hadoop):
增加用户:
#useradd natty
#echo 123456|passwd --stdin natty
(1)passwd的man手册,--stdin选项:(--stdin : This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.)
(2)删除用户的命令(#userdel natty)。
3. 虚拟机IP地址修改为静态IP
(1)关闭VMWare的DHCP:
(2)NAT设置:
安装后的虚拟机的IP默认是动态获取的,需要改成静态IP(企业服务器都是静态IP的,服务器IP地址不能经常改变),有以下两种方法来调整:图形界面、修改配置文件。设置的IP,可以首先通过ifconfig命令查看当前的IP,再将这个IP设置为静态IP。
(3)保证物理机与虚拟机能够互联,设置VMNET8网卡与虚拟机的静态IP在同一个网段。
(4)调取图形界面:
#setup --console
(5)修改配置文件:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
例如下面的配置单:
BOOTPROTO=none
IPADDR=192.168.8.128
NETMASK=255.255.255.0
GATEWAY=192.168.8.2
DNS1=192.168.8.2
DNS2=8.8.8.8
4. 关闭防火墙和selinux:
(1)关闭防火墙:
关闭防火墙服务(只在当前Session内有效,系统重启后又恢复):
#service iptables stop
想要重启后生效:
#chkconfig iptables off
(2)关闭selinux:
修改配置文件:
#vi /etc/sysconfig/selinux
添加配置: SELINUX=disabled
5. 配置hosts文件:
这部分完成之前配置的静态IP和主机名的映射(IP在前,主机名在后)。修改下边文件:
#vi /etc/hosts
增加下面的内容:
192.168.8.168 hadoop-namenode.ipma.com
在/etc/hosts文件中,不要保留127.0.0.1的配置。
6. 重启主机:
完成上边所有的配置后,重启主机以生效配置:
#reboot
7. 生成目录结构:
对于目录结构,不同的人有不同的使用习惯。不一定非要按照这里规定的目录结构开发,可以自行设定。
(1)在/opt下生成2个目录,两个目录的作用:
softwares:存放软件的安装包(压缩包)的目录。需要把各种软件上传到这个目录,例如jdk,hadoop,hbase安装压缩包等等。
modules:软件的安装目录(解压后目录)。
#mkdir /opt/softwares
#mkdir /opt/modules
将这2个目录的 “所属用户和所属用户组” 修改为 natty(为了方便,直接将目录/opt 的权限 修改):
# chown -R natty:natty /opt/
2.2 安装JDK
1. 解压压缩文件(使用natty用户):
$tar zxf jdk-7u67-linux-x64.tar.gz -C /opt/modules/
2. 环境变量设定(使用root用户):
#vi /etc/profile
增加如下内容:
## JAVA HOME
JAVA_HOME=/opt/modules/jdk1.7.0_67
PATH=$PATH:$JAVA_HOME/bin
3. 立即生效环境变量(使用natty用户):
$source /etc/profile
4. 删除系统中已经默认安装的jdk:
因为jdk十分常用,所以很多Linux操作系统已经默认安装了,需要将这些默认安装的版本删除。
首先,先查询系统中已经安装了哪些 java的rpm包:
#rpm -qa | grep java
根据查询结果,我的版本的操作系统需要删除的安装包:
# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64
# rpm -e --nodeps tzdata-java-2012j-1.el6.noarch
# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
PS : 卸载rpm软件包,使用命令rpm -e 。
--nodeps选项的官方man文档:
--nodes : Don’t check dependencies before uninstalling the packages.
2.3 hadoop安装和配置:
1. 解压压缩包(使用natty用户):
$ tar zxvf hadoop-2.5.0.tar.gz -C /opt/modules/
2. 修改配置文件。
修改目录 /opt/modules/hadoop-2.5.0/etc/hadoop 的几个文件:
(1)在下边3个文件中添加JAVA_HOME环境变量:
hadoop-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
yarn-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
mapred-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_67
(2)修改core-site.xml 和 hdfs-site.xml :
core-site.xml:
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop-namenode.ipma.com:8020</value>
</property>
配置项 fs.defaultFS的官方解释:
The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem
hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
HDFS采用冗余存储,一般分布式集群设定的副本数是3,但是因为这里配置的伪分布式,只包含一个节点,所以设置为1.
3. 启动HDFS:
Hadoop在安装和基本配置完成后,第一次启动HDFS时,需要做一次格式化,格式化后HDFS才可以使用。
格式化HDFS:
$ bin/hdfs namenode -format
启动namenode和datanode:
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
查看启动的java进程:
$ jps
4. HDFS的简单测试:
在格式化HDFS,并启动了namenode和datanode以后,我们做一个简单的测试来验证HDFS是否生效。在这里,我们将Linux中的一个文件上传到HDFS,并在HDFS查看文件的内容:
$ bin/hdfs dfs -mkdir /input
$ bin/hdfs dfs -put /etc/yum.conf /input
$ bin/hdfs dfs -ls /input
$ bin/hdfs dfs -cat /input/yum.conf
-put是很常用的选项,从linux上传文件到hdfs。
2.4 Yarn相关配置
1. yarn和mapred配置:
在目录 /opt/modules/hadoop-2.5.0/etc/hadoop 中修改Yarn和MapReduce的配置文件:
mapred-site.xml :
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置mapreduce的运行框架为“yarn”。
yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
2. 启动yarn相关服务:
启动ResourceManager 和 NodeManager:
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager
启动了服务后,可以在浏览器中管理:
http://192.168.17.128:50070/
http://192.168.17.128:8088/
3. MapReduce测试:
下面以WordCount程序测试 MapReduce调用。
在hadoop的安装目录下,有一个jar包存放一些自带的mapreduce程序的jar包。
文件目录位置是:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar。
查看该jar包的内程序类:
$jar tvf hadoop-mapreduce-examples-2.4.1.jar
执行wordcount mapreduce程序:
$bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /user/input /output/01
4. 日志查看
在运行过程中,如果出现错误,可以查看相关日志来找出错点。日志所在位置:
$HADOOP_HOME/logs
在logs目录下,有两类日志,分别是 *.log 和 *.out两类日志。
例如 hadoop-[linux用户名]-[hadoop角色]-[主机名].log[out]
这两种日志的作用:
.log:通过log4j记录的,记录大部分应用程序的日志信息
.out:记录标准输出和标准错误日志,少量记录
5. dfs常用的命令:
hdfs常用的命令和Linux命令类似,有少部分有差异,下面列举几个常用的命令:
dfs -put [localsrc] [dst] 从Linux系统上传文件到hdfs上。
dfs -du [dst] 查看空间大小使用情况。
dfs -chmod 分配权限
2.5 其他hadoop配置:
1. xml文件配置:
hdfs-site.xml:
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop-namenode.ipma.com:50070</value>
</property>
The address and the base port where the dfs namenode web ui will listen on.
core-site.xml:
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.5.0/data</value>
</property>
A base for other temporary directories.
yarn-site.xml:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-namenode.ipma.com</value>
</property>
配置ResourceManager。
2. 启动日志聚合:
(1)增加配置:
yarn-site.xml:
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-namenode.ipma.com:19888</value>
</property>
(2)启动服务:
$ sbin/mr-jobhistory-daemon.sh start historyserver