Hadoop学习笔记(1)安装配置与运行
1.什么是Hadoop
Hadoop是适合对大量数据进行分布式存储与计算的平台。
http://hadoop.apache.org/
2.Hadoop架构
Hadoop是项目的总称。
Hadoop核心项目:
·HDFS: Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。Google File System(GFS)的开源实现。
·MapReduce: 并行计算框架(org.apache.hadoop.mapreduce), Google MapReduce的开源实现。
Hadoop子项目:
·HBase: 类似Google BigTable的分布式NoSQL列数据库。(HBase和Avro已经于2010年5月成为顶级 Apache 项目)
·Hive: 数据仓库工具,由Facebook贡献。
·Zookeeper: 分布式锁设施,提供类似Google Chubby的功能,由Facebook贡献。
·Avro: 新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。
·Pig: 大数据分析平台,为用户提供多种接口。
·Ambari: Hadoop管理工具,可以快捷的监控、部署、管理集群。
·Sqoop: 于在HADOOP与传统的数据库间进行数据的传递。
3.Hadoop分布式文件系统HDFS
主从结构
·主节点只有一个: namenode
·从节点有很多个: datanodes
namenode负责:
·接收用户操作请求
·维护文件系统的目录结构
·管理文件与block之间,block与datanode之间关系
datanode负责:
·存储文件
·文件被分成block存储在磁盘上
·为保证数据安全,文件会有多个副本
4.MapReduce
主从结构
·主节点只有一个: JobTracker
·从节点有很多表: TaskTracker
JobTracker负责:
·接收客户提交的计算任务
·把计算任务分给TaskTracker
·监控TaskTracker的执行情况
TaskTracker负责:
·执行JobTracker分配的计算任务
5.Hadoop集群主机物理分布
机架Rack1
主机node1: JobTacker
主机node2: NameNode
主机node3: TaskTracker/DataNode
主机node4: TaskTracker/DataNode
主机node5: TaskTracker/DataNode
主机node6: TaskTracker/DataNode
交换机Switch: 各node通过Switch连接
机架Rack2
主机node1: TaskTracker/DataNode
主机node2: TaskTracker/DataNode
主机node3: TaskTracker/DataNode
主机node4: TaskTracker/DataNode
主机node5: TaskTracker/DataNode
主机node6: TaskTracker/DataNode
交换机Switch: 各node通过Switch连接
每个Rack的各node之间通过交换机通信,各Rack的交换机之间再通过交换机通信。
6.Hadoop主机节点结构
Master node:
Namenode
Secondary namenode
JobTracker
Hadoop utility
Slave node:
TaskTracker
Datanode
7.安装Hadoop
7.1.安装Hadoop准备工作
使用虚拟机来模拟Hadoop,需要安装VMware
使用两台虚拟机,安装操作系统Redhat Enterprise Linux.
虚拟机的主机名分别为hadoop01与hadoop02.
ip地址分别设置为192.168.1.77,192.168.1.88
软件准备:
VMware Workstation 10.0.1 Build 1379776
rhel-server-6.5-x86_64-dvd.iso
jdk-6u45-linux-x64-rpm.bin
hadoop-2.2.0.tar.gz
7.2.安装VMware和Redhat后,配置主机
设置主机静态ip地址后重启动网络生效.
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 // 可通过netconfig命令更改.
# service network restart // 重启网卡生效
# ifconfig
修改主机名.
# hostname // 查看主机名
# hostname hadoop01 // 更改主机名,但重启主机会失效
# vi /etc/sysconfig/network // 更改主机名配置文件
# vi /etc/hosts // 更改主机名与ip地址绑定
# ping hadoop01
关闭防火墙.
# service iptables status
# service iptables stop // 关闭防火墙,如果服务配置是自动启动,重启电脑会再启动
# service iptables status
# chkconfig --list | grep iptables // 查看防火墙服务配置是否自动启动
# chkconfig iptables off // 停止防火墙自启动服务
# chkconfig --list | grep iptables
配置SSH(Secure Shell)节点互信
<<1>>创建.ssh目录
以hadoop用户登录节点,检查/home/hadoop/下是否有.ssh目录,如果没有就创建一个.
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
<<2>>生成RSA key
在每个主机节点上执行以下命令创建RSA Key
$ cd ~/.ssh
$ /usr/bin/ssh-keygen -t rsa
全部回车接受默认项,将生成id_rsa.pub文件
<<3>>将生成的RSA Key添加到authorized_keys中
以hadoop用户登录节点hadoop01
$cat id_rsa.pub >> authorized_keys //生成authorized_keys文件
$scp authorized_keys hadoop02:/home/hadoop/.ssh/ //把节点hadoop01的文件authorized_keys传输到hadoop02
以hadoop用户登录节点hadoop02
$cat id_rsa.pub >> authorized_keys //添加RSA Key到authorized_keys文件
$scp authorized_keys hadoop01:/home/hadoop/.ssh/ //把节点hadoop02的文件authorized_keys传回到hadoop01
<<4>>启用ssh协议
在每个节点上执行以下通信命令,此时需要输入密码.
$ ssh localhost
$ ssh hadoop01 date
$ ssh hadoop02 date
在每个节点上启动ssh代理,并将ssh key装载到内存中
$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
再执行上面的通信命令,不再需要密码.
7.3.安装JDK.
使用winscp工具将jdk文件上传到主机,复制到/usr/local/目录下
# cp /root/Downloads /usr/local
# cd /usr/local
# chmod u+x jdk-6u45-linux-x64.bin // 授予执行权限
# ./jdk-6u45-linux-x64.bin // 执行命令解压缩
# java -version // 可以看到默认安装的OpenJDK
# vi /etc/profile // 修改配置文件,添加JAVA_HOME环境变量.
export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH
# source /etc/profile // 执行命令让配置生效
# java -version // 可以看到安装的JDK
7.4.安装Hadoop.
使用winscp工具将jdk文件上传到主机,复制到/usr/local/目录下,解压,修改配置文件
# tar -zxvf hadoop-2.2.0.tar.gz
# chown -R hadoop:hadoop hadoop-2.2.0
# vi /etc/profile // 修改配置文件,添加HADOOP_HOME环境变量.
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME:$JAVA_HOME/bin:$PATH
# source /etc/profile
7.5.配置Hadoop.
修改Hadoop的配置文件hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,masters,slaves,hadoop-metrics.properties,log4j.properties
文件名称 格式 描述
hadoop-env.sh Bash脚本 记录脚本要用的环境变量,以运行Hadoop
core-site.xml Hadoop配置xml Hadoop的核心配置项,如HDFS和MapReduce常用的I/O设置等
hdfs-site.xml Hadoop配置xml Hadoop守护进程的配置项,包括namenode、辅助namenode和datanode
mapred-site.xml Hadoop配置xml MapReduce守护进程的配置项,包括jobtracker和tasktracker
masters 文本文件 运行辅助namenode的机器列表(每行一个)
slaves 文本文件 运行datanode和tasktracker的机器列表(每行一个)
hadoop-metrics.properties Java属性
log4j.properties Java属性
# vi hadoop-env.sh // 修改hadoop-env.sh文件,修改JAVA_HOME
export JAVA_HOME=/usr/local/jdk
# vi core-site.xml // 修改core-site.xml文件,配置namenode主机
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
<description>change your own nodename hostname</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
</configuration>
# vi hdfs-site.xml // 修改hdfs-site.xml,配置hdfs文件系统
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
# vi mapred-site.xml // 修改mapred-site.xml,配置JobTracker主机
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://hadoop01:9001</value>
<description>change your own jobtracker hostname</description>
</property>
</configuration>
8.运行Hadoop
8.1.格式化文件系统
以hadoop用户登录.
$ hadoop namenode -format
8.2.启动与停止Hadoop.
$ start-all.sh
$ jps // 查看java进程,验证启动的Hadoop进程
5个进程:NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager
Hadoop1.2版本的5个进程:NameNode、DataNode、SecondaryNameNode、JobTracker、TaskTracker
通过浏览器访问http://hadoop01:50070,查看Hadoop NameNode,DataNode运行情况
通过浏览器访问http://hadoop:50030,查看Hadoop JobTracker、TaskTracker运行情况
$ stop-all.sh
8.3常见启动问题
NameNode进程没有启动成功
(1)没有格式化
(2)配置文件没有修改正确
(3)hostname与ip没有绑定
(4)SSH的免密码登录没有配置成功
多次格式化问题,需删除/usr/local/hadoop/tmp下文件,再重新格式化.