1. Hadoop 1.2.1 伪分布式部署
1.1 使用host-only方式
将Windows上的虚拟网卡改成跟Linux上的网卡在同一网段
注意:一定要将widonws上的WMnet1的IP设置和你的虚拟机在同一网段,但是IP不能相同
1.2 Linux环境配置(windows下面的防火墙也要关闭)
1.2.1修改主机名
vim /etc/sysconfig/network
1.2.2 修改IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:BF:45:8B"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="99339c27-0884-46c0-85d5-2612e5c1f149"
IPADDR="192.168.1.110" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.192.1.1" ###
1.2.3 修改主机名和IP的映射关系
vim /etc/hosts
192.168.1.110 node1
1.2..4 关闭防火墙
# 查看防护墙状态
service iptables status
# 关闭
service iptables stop
# 查看防火墙开机启动状态
chkconfig iptables --list
# 关闭开机启动
chkconfig iptables off
1.2.5 安装JDK
上传JDK
# 添加执行权限
chmod u+x jdk-6u45-linux-i586.bin
# 解压
./jdk-6u45-linux-i586.bin
mkdir /usr/java
mv jdk1.6.0_45/ /usr/java/
# 将java添加到环境变量
vim /etc/profile
# 在文件的末尾添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_45
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
1.3 配置hadoop
1.3.1 下载并上传hadoop包
下载地址:http://archive.apache.org/dist/hadoop/
1.3.2 解压hadoop包
# 在根目录创建一个hadoop目录
mkdir /hadoop
tar -zxvf hadoop-1.1.2.tar.gz -C /hadoop/
1.3.3 配置hadoop伪分布式(要修改4个文件)
- hadoop-env.sh
vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_45
- core-site.xml
vim core-site.xml
<configuration>
<!-- 指定HDFS的namenode的通信地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-1.1.2/tmp</value>
</property>
</configuration>
- hdfs-site.xml
vim hdfs-site.xml
<configuration>
<!-- 配置HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
- mapred-site.xml
vim mapred-site.xml
<configuration>
<!-- 指定jobtracker地址 -->
<property>
<name>mapred.job.tracker</name>
<value>node1:9001</value>
</property>
</configuration>
1.3.4 将hadoop添加到环境变量
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.6.0_45
export HADOOP_HOME=/hadoop/hadoop-1.1.2
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
source /etc/profile
1.3.5 格式化HDFS
hadoop namenode -format
1.3.6启动hadoop
start-all.sh
1.3.7验证集群是否启动成功
# jps(不包括jps应该有5个)
NameNode
SecondaryNameNode
DataNode
JobTracker
TaskTracker
# 还可以通过浏览器的方式验证
http://192.168.1.110:50070 (hdfs管理界面)
http://192.168.1.110:50030 (mr管理界面)
# 在这个文件中添加linux主机名和IP的映射关系
C:\Windows\System32\drivers\etc
1.4 配置ssh免登陆
# 生成ssh免登陆密钥
ssh-keygen -t rsa
# 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
# 将公钥拷贝到要免登陆的机器上
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2. Hadoop 1.0 集群部署(虚拟机)
2.1. 集群规划
主机名 | 运行的进程 |
---|---|
hadoop01 | namenode |
hadoop02 | jobtracker、secondarynamenode |
hadoop03 | datanode、tasktracker |
hadoop04 | datanode、tasktracker |
2.2.配置Linux环境
2.2.1修改主机名
vim /etc/sysconfig/network
2.2.2 修改IP
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static" ###
HWADDR="00:0C:29:BF:45:8B"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="99339c27-0884-46c0-85d5-2612e5c1f149"
IPADDR="192.168.1.110" ###
NETMASK="255.255.255.0" ###
GATEWAY="192.192.1.1" ###
2.2.3 修改主机名和IP的映射关系
vim /etc/hosts
192.168.1.110 node1
2.2..4 关闭防火墙
# 查看防护墙状态
service iptables status
# 关闭
service iptables stop
# 查看防火墙开机启动状态
chkconfig iptables --list
# 关闭开机启动
chkconfig iptables off
2.2.5 安装JDK
上传JDK
# 添加执行权限
chmod u+x jdk-6u45-linux-i586.bin
# 解压
./jdk-6u45-linux-i586.bin
mkdir /usr/java
mv jdk1.6.0_45/ /usr/java/
# 将java添加到环境变量
vim /etc/profile
# 在文件的末尾添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_45
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
# 将Java安装包分发到其他节点
scp -r /usr/java/ hadoop02:/usr/
scp -r /usr/java/ hadoop03:/usr/
2.3 安装配置hadoop集群
2.3.1下载并上传hadoop安装文件
下载地址:http://archive.apache.org/dist/hadoop/
2.3.2 解压
# 在根目录创建一个hadoop目录
mkdir /hadoop
tar -zxvf hadoop-1.1.2.tar.gz -C /hadoop/
2.3.3 配置hadoop(需要修改6个配置文件)
- hadoop-env.sh
vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.6.0_45
- core-site.xml
vim core-site.xml
<!-- 指定HDFS的namenode的通信地址 -->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存放目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-1.1.2/tmp</value>
</property>
- hdfs-site.xml
vim hdfs-site.xml
<!-- 配置HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
- mapred-site.xml
# 需要重命名:
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定jobtracker地址 -->
<property>
<name>mapred.job.tracker</name>
<value>hadoop01:9001</value>
</property>
- masters (指定secondarynamenode地址)
hadoop01
- slaves
hadoop02
hadoop03
2.3.4 将配置好的hadoop拷贝到其他节点
scp -r /hadoop/ hadoop02:/
scp -r /hadoop/ hadoop03:/
2.3.5 配置ssh免登
# 配置hadoop01到hadoop02、hadoop03的免登
ssh-keygen -t rsa(在hadoop01上生成即可)
ssh-copy-id -i hadoop01
ssh-copy-id -i hadoop02
ssh-copy-id -i hadoop03
2.3.6 拷贝/etc/profile到其他节点
scp /etc/profile hadoop02:/etc/
scp /etc/profile hadoop03:/etc/
2.3.7 仅在hadoop01上格式化hadoop
hadoop namenode -format
2.4 hadoop集群管理相关命令
# hadoop 安全模式:Safe mode is ON(可以读取文件,但是不可以向HDFS写入文件)
hadoop dfsadmin -safemode enter(进入安装器模式) / leave(离开安全模式) / get(获取当前状态) / wait(竟然等待状态)
hadoop mrsadmin -safemode enter / leave / get / wait
3. Hadoop 2.4.1 伪分布式部署
3.1 准备Linux环境
3.1.1 修改主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop01
3.1.2 修改IP
修改配置文件方式(屌丝程序猿专用)
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR="192.168.8.118"
NETMASK="255.255.255.0"
GATEWAY="192.168.8.1"
3.1.3 修改主机名和IP的映射关系
vim /etc/hosts
192.168.8.118 hadoop01
3.1.4 关闭防火墙
# 查看防火墙状态
service iptables status
# 关闭防火墙
service iptables stop
# 查看防火墙开机启动状态
chkconfig iptables --list
# 关闭防火墙开机启动
chkconfig iptables off
3.1.5 重启节点
reboot
3.2 安装JDK
3.2.1上传
3.2.2解压jdk
# 创建文件夹
mkdir /usr/java
# 解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/
3.2.3 将java添加到环境变量中
vim /etc/profile
# 在文件最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_55
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
3.3 安装hadoop2.4.1
hadoop2.x的配置文件在 $HADOOP_HOME/etc/hadoop 路径下
伪分布式需要修改5个配置文件
3.3.1 配置hadoop
- hadoop-env.sh
vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_65
- core-site.xml
vim core-site.xml
<!-- 制定HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.4.1/tmp</value>
</property>
- hdfs-site.xml
vim hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- mapred-site.xml
# 需要重命名
mv mapred-site.xml.template mapred-site.xml*
vim mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- yarn-site.xml
vim yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
</property>
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
3.3.2 将hadoop添加到环境变量
vim /etc/proflie
export JAVA_HOME=/usr/java/jdk1.7.0_65
export HADOOP_HOME=/hadoop/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
3.3.3 格式化namenode(是对namenode进行初始化)
hdfs namenode -format
# 或
hadoop namenode -format
3.3.4 启动hadoop
# 启动HDFS
sbin/start-dfs.sh
# 启动YARN
sbin/start-yarn.sh
3.3.5 验证是否启动成功
# 使用jps命令验证
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode
http://192.168.8.118:50070 (HDFS管理界面)
http://192.168.8.118:8088 (MR管理界面)
3.4 配置ssh免登陆
# 生成ssh免登陆密钥
# 进入到我的home目录
cd ~/.ssh
ssh-keygen -t rsa (四个回车)
# 执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
# 将公钥拷贝到要免登陆的机器上
ssh-copy-id localhost
4. Hadoop 2.4.1 集群部署
hadoop2.0已经发布了稳定版本了,增加了很多特性,比如HDFS HA、YARN等。最新的hadoop-2.4.1又增加了YARN HA
4.1 集群规划
主机名 | IP | 安装的软件 | 运行的进程 |
---|---|---|---|
hadoop01 | 192.168.1.201 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop02 | 192.168.1.202 | jdk、hadoop | NameNode、DFSZKFailoverController(zkfc) |
hadoop03 | 192.168.1.203 | jdk、hadoop | ResourceManager |
hadoop04 | 192.168.1.204 | jdk、hadoop | ResourceManager |
hadoop05 | 192.168.1.205 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop06 | 192.168.1.206 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
hadoop07 | 192.168.1.207 | jdk、hadoop、zookeeper | DataNode、NodeManager、JournalNode、QuorumPeerMain |
4.2 准备工作
4.2.1 修改Linux主机名
4.2.2 修改IP
4.2.3 修改主机名和IP的映射关系
注意:如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等)/etc/hosts里面要配置的是内网IP地址和主机名的映射关系
4.2.4 关闭防火墙
4.2.5 ssh免登陆
4.2.6 安装JDK,配置环境变量等
# 创建文件夹
mkdir /usr/java
# 解压
tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/
vim /etc/profile
# 在文件最后添加
export JAVA_HOME=/usr/java/jdk1.7.0_55
export PATH=$PATH:$JAVA_HOME/bin
# 刷新配置
source /etc/profile
4.3 安装zooekeeper
# 解压
tar -zxvf zookeeper-3.4.5.tar.gz -C /hadoop/
# 修改配置
cd /hadoop/zookeeper-3.4.5/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#修改:dataDir=/hadoop/zookeeper-3.4.5/tmp
# 在最后添加:
server.1=hadoop05:2888:3888
server.2=hadoop06:2888:3888
server.3=hadoop07:2888:3888
# 保存退出
# 然后创建一个tmp文件夹
mkdir /hadoop/zookeeper-3.4.5/tmp
# 再创建一个空文件
touch /hadoop/zookeeper-3.4.5/tmp/myid
# 最后向该文件写入ID
echo 1 > /hadoop/zookeeper-3.4.5/tmp/myid
# 将配置好的zookeeper拷贝到其他节点
# 首先分别在hadoop06、hadoop07根目录下创建一个hadoop目录:mkdir /hadoop
scp -r /hadoop/zookeeper-3.4.5/ hadoop06:/hadoop/
scp -r /hadoop/zookeeper-3.4.5/ hadoop07:/hadoop/
# 注意:修改hadoop06、hadoop07对应/hadoop/zookeeper-3.4.5/tmp/myid内容
hadoop06:
echo 2 > /hadoop/zookeeper-3.4.5/tmp/myid
hadoop07:
echo 3 > /hadoop/zookeeper-3.4.5/tmp/myid
4.4 安装 Hadoop
- 在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
- hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
- 这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
- hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
4.4.1解压
tar -zxvf hadoop-2.4.1.tar.gz -C /hadoop/
4.4.2 配置HDFS
hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下
# 将hadoop添加到环境变量中
vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_55
export HADOOP_HOME=/hadoop/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
# hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
cd /hadoop/hadoop-2.4.1/etc/hadoop
4.4.3 修改配置文件
- 修改 hadoo-env.sh
vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_55
- 修改 core-site.xml
vim core-site.xml
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.4.1/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
</configuration>
- 修改hdfs-site.xml
vim hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop05:8485;hadoop06:8485;hadoop07:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/hadoop/hadoop-2.4.1/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
- 修改mapred-site.xml
*需要重命名:* *mv mapred-site.xml.template mapred-site.xml*
*vim mapred-site.xml*
####
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改 yarn-site.xml
vim yarn-site.xml
<configuration>
<!-- 开启RM高可靠 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop03</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop04</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop05:2181,hadoop06:2181,hadoop07:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
4.4.4 修改 slaves
slaves 是指定子节点的位置,因为要在 hadoop01 上启动 HDFS 、在 hadoop03 启动 yarn ,所以 hadoop01 上的 slaves 文件指定的是 datanode 的位置, hadoop03 上的 slaves 文件指定的是 nodemanager 的位置
Vim slaves
hadoop05
hadoop06
hadoop07
4.4.5 配置免密码登陆
# 首先要配置hadoop01到hadoop02、hadoop03、hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
# 在hadoop01上生产一对钥匙
ssh-keygen -t rsa
# 将公钥拷贝到其他节点,包括自己
ssh-coyp-id hadoop01
ssh-coyp-id hadoop02
ssh-coyp-id hadoop03
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
ssh-coyp-id hadoop06
ssh-coyp-id hadoop07
# 配置hadoop03到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆
# 在hadoop03上生产一对钥匙
ssh-keygen -t rsa
# 将公钥拷贝到其他节点
ssh-coyp-id hadoop04
ssh-coyp-id hadoop05
ssh-coyp-id hadoop06
ssh-coyp-id hadoop07
# 注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop02到hadoop01的免登陆
在hadoop02上生产一对钥匙
ssh-keygen -t rsa
ssh-coyp-id -i hadoop01
4.4.6 将配置好的hadoop拷贝到其他节点
scp -r /hadoop/ hadoop02:/
scp -r /hadoop/ hadoop03:/
scp -r /hadoop/hadoop-2.4.1/ root@hadoop04:/hadoop/
scp -r /hadoop/hadoop-2.4.1/ root@hadoop05:/hadoop/
scp -r /hadoop/hadoop-2.4.1/ root@hadoop06:/hadoop/
scp -r /hadoop/hadoop-2.4.1/ root@hadoop07:/hadoop/
4.4.7 启动zookeeper集群
分别在hadoop05、hadoop06、tcast07上启动zk
cd /hadoop/zookeeper-3.4.5/bin/
./zkServer.sh start
# 查看状态:一个leader,两个follower
./zkServer.sh status
4.4.8 启动journalnode
分别在在hadoop05、hadoop06、tcast07上执行
cd /hadoop/hadoop-2.4.1
sbin/hadoop-daemon.sh start journalnode
# 运行jps命令检验,hadoop05、hadoop06、hadoop07上多了JournalNode进程
4.4.9 格式化HDFS
# 在hadoop01上执行命令:
hdfs namenode -format
# 格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/hadoop/hadoop-2.4.1/tmp,然后将/hadoop/hadoop-2.4.1/tmp拷贝到hadoop02的/hadoop/hadoop-2.4.1/下。
scp -r tmp/ hadoop02:/hadoop/hadoop-2.4.1/
4.4.10 格式化ZK(在hadoop01上执行即可)
hdfs zkfc -formatZK
4.4.11 启动HDFS(在hadoop01上执行)
sbin/start-dfs.sh
4.4.12 启动YARN
在hadoop03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动
sbin/start-yarn.sh
到此,hadoop-2.4.1配置完毕,可以统计浏览器访问:
NameNode ‘hadoop01:9000’ (active)
NameNode ‘hadoop02:9000’ (standby)
4.5 验证
4.5.1 验证HDFS HA
首先向hdfs上传一个文件
hadoop fs -put /etc/profile /profile
hadoop fs -ls /
然后再kill掉active的NameNode
kill -9
通过浏览器访问:http://192.168.1.202:50070
NameNode ‘hadoop02:9000’ (active)
这个时候hadoop02上的NameNode变成了active
在执行命令:
hadoop fs -ls /
-rw-r–r– 3 root supergroup 1926 2014-02-06 15:36 /profile
刚才上传的文件依然存在!!!
手动启动那个挂掉的NameNode
sbin/hadoop-daemon.sh start namenode
通过浏览器访问:http://192.168.1.201:50070
NameNode ‘hadoop01:9000’ (standby)
4.5.2 验证YARN:
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
5. Hive 安装
Hive只在一个节点上安装即可
5.1 上传tar包
5.2 解压
tar -zxvf hive-0.9.0.tar.gz -C /cloud/
5.3.配置mysql metastore(切换到root用户)
# 配置HIVE_HOME环境变量
rpm -qa | grep mysql
rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
# 修改mysql的密码
/usr/bin/mysql_secure_installation
#注意:删除匿名用户,允许用户远程连接
# 登陆mysql
mysql -u root -p
5.4.配置hive
cp hive-default.xml.template hive-site.xml
# 修改hive-site.xml(删除所有内容,只留一个<property></property>)
# 添加如下内容:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop00:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
<description>password to use against metastore database</description>
</property>
5.5. 拷贝依赖 jar
安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
# (执行下面的语句 *.*:所有库下的所有表 %:任何IP地址或主机都可以连接)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5.6 建表(默认是内部表)
create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
# 建分区表
create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
# 建外部表
create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';
5.7 创建分区表
# 普通表和分区表区别:有大量数据增加的需要建分区表
create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t';
# 分区表加载数据
load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');
load data local inpath '/root/data.am' into table beauty partition (nation="USA");
select nation, avg(size) from beauties group by nation order by avg(size);
6. HBase 安装
6.1 上传HBase安装包并解压
6.2 配置hbase集群,要修改3个文件
注意:首先zk集群已经安装好了,并且要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
- 修改hbase-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_55
# 使用外部的zk
export HBASE_MANAGES_ZK=false
- 修改hbase-site.xml
vim hbase-site.xml
<configuration>
<!-- 指定hbase在HDFS上存储的路径 -->
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns1/hbase</value>
</property>
<!-- 指定hbase是分布式的 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 指定zk的地址,多个用“,”分割 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>had5:2181,had6:2181,had7:2181</value>
</property>
</configuration>
- 修改 regionservers
vim regionservers
hadoop05
hadoop06
hadoop07
6.3 拷贝hbase到其他节点
将配置好的HBase拷贝到每一个节点并同步时间。
scp -r /hadoop/hbase-0.96.2-hadoop2/ hadoop02:/hadoop/
scp -r /hadoop/hbase-0.96.2-hadoop2/ hadoop03:/hadoop/
scp -r /hadoop/hbase-0.96.2-hadoop2/ hadoop04:/hadoop/
scp -r /hadoop/hbase-0.96.2-hadoop2/ hadoop05:/hadoop/
scp -r /hadoop/hbase-0.96.2-hadoop2/ hadoop06:/hadoop/
6.4 启动所有的hbase
# 分别启动zk
./zkServer.sh start
# 启动hbase集群
start-dfs.sh
# 启动hbase,在主节点上运行:
start-hbase.sh
# 启动集群中所有的regionserver
./hbase-daemons.sh start regionserver
# 启动某个regionserver
./hbase-daemon.sh start regionserver
6.5 通过浏览器访问hbase管理页面
192.168.1.201:60010
6.6 为保证集群的可靠性,要启动多个HMaster
hbase-daemon.sh start master
7. Flume 安装
7.1 将flume 安装包上传到服务器
7.2 解压文件
7.3 配置文件 cd conf
# 将flume-env.sh.template 改名
mv flume-env.sh.template flume-env.sh
# 导入javahome vim flume-env.sh
JAVA_HOME=JAVAHOME
7.4 配置采集数据 hdfs sink
vim a4.conf
# 定义agent名, source、channel、sink的名称
a4.sources = r1
a4.channels = c1
a4.sinks = k1
# 具体定义source
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /home/hadoop/logs
# 具体定义channel
a4.channels.c1.type = memory
# channel 能容纳多少条数据
a4.channels.c1.capacity = 10000
a4.channels.c1.transactionCapacity = 100
# 定义拦截器,为消息添加时间戳(拦截一些无效的数据)
这里将数据添加时间戳
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
# 具体定义sink
# 定义hdfs sink
a4.sinks.k1.type = hdfs
# 配置的是nodeservice
# 这里的时间与定义拦截器的时间一致
a4.sinks.k1.hdfs.path = hdfs://ns1/flume/%Y%m%d
# 日志前缀
a4.sinks.k1.hdfs.filePrefix = events-
# 存文本的方式
a4.sinks.k1.hdfs.fileType = DataStream
# 不按照条数生成文件(多少条flash成一个文件)
a4.sinks.k1.hdfs.rollCount = 0
# HDFS上的文件达到128M时生成一个文件
a4.sinks.k1.hdfs.rollSize = 134217728
# HDFS上的文件达到60秒生成一个文件
a4.sinks.k1.hdfs.rollInterval = 60
# 组装source、channel、sink
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
7.5 添加依赖
- hadoop-common.jar 导入到lib文件夹下
- 将commons-configuretion.jar 导入到lib文件夹下
- 将hadoop-auth.jar 导入到lib文件夹下
- 将hadoop-hdfs.jar 导入到lib文件夹下
- 将hadoop 配置文件拷贝到flume conf文件夹下告诉flume 到底要向那台机器找namenode
7.6 启动flume
bin/flume-hg agent -n a4 -c conf -f conf/a4.conf -Dflume.root.logger=INFO.console