最近正好项目期,为了技术选型,初探了一下hadoop,为系统拆分为分布式架构做一些准备工作,废话不多说了,直接入主题。
一、安装前准备工作:
我们要安装一套Hadoop,首先要规划好机器节点的管理工作,因本人笔记本内存不足的原因,所以此次示例以3台虚拟机为例,搭建Hadoop集群环境。
- 具体机器节点配置如下:
IP | 节点名称 | 备注 |
10.211.55.10 | master | 主节点,目标为了管理启动其他节点信息。 |
10.211.55.6 | node2 | 节点2 |
10.211.55.7 | node1 | 节点1 |
- Centos 6.x (64)系统一套。
- Hadoop 2.8 软件一套。http://hadoop.apache.org
- Oracle JDK 1.7 一套。请从oracle官网自行下载
- VM或parallels desktop虚拟机软件一套,视个人爱好,土豪请略过。
二、安装准备工作:
- 设置好VM与parallels desktop的网络环境。我用的是parallels desktop。用VM的朋友请自行略过此设置。parallels desktop可以使用共享网络。
- 设置好网络后,请自行安装Centos 系统,安装过程比较简单,此处跳过。
- 设置各节点的主机名,Centos 6需要修改的地方有两个,一个是/etc/hosts文件,一个是/etc/sysconfig/network。在修改hosts文件的时候请注意,在做内环网络的时候,请不要将主机名称设置上去。否则在搭建hadoop过程中,从节点是链接不上去的。所以说主从节点在配置的时候稍微注意一下。
- 使用yum update命令更新软件依赖包,重启机器后,使用hostname命令,查看各节点是否已经顺利变更为我们计划的主机名称。
- 因我们设置的是共享网络,所以parallels desktop会默认分配好IP地址,为了安装顺利,我们还是将各系统设置为静态IP。
IPADDR="10.211.55.10"
NETMASK="255.255.255.0"
GATEWAY="10.211.55.1"
ARPCHECK="no"如果gateway不太清楚是什么,可以使用netstat –rn查看一下结果。
- 设置好静态IP后,我们关闭防火墙,因为是示例,所以我们不做防火墙规则处理,并将其加入开机后停止启动项。
chkconfig NetworkManager off
chkconfig iptables off
- 卸载openjdk后安装java jdk
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NAT使用命令:rpm -qa | grep java查看Openjdk安装包。
使用命令rpm -e --nodeps XXXXXXXX卸载安装包。
将jdk1.7.tar.gz放到/user/java路径下,并配置/etc/profile环境变量。
重新加载source /etc/profile使环境变量生效,检查java –version查看是否已经是Java JDK
- 将hadoop放到/user/目录下,解压缩hadoop-2.8.0.tar.gz包,并且将其重新命名为hadoop。在/etc/profile 中hadoop环境变量。
export HADOOP_HOME=/usr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
exportHADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export HADOOP_ROOT_LOGGER=DEBUG,consoleexport HADOOP_ROOT_LOGGER=DEBUG,console只为了我们看日志的时候比较明细异常,此句话可以省略。
- 创建hadoop用户
groupadd hadoop
useradd -g hadoop hadoop
- 将hadoop用户升级为root权限用户。
chmod u+w /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL也可以使用: echo "hadoop ALL=(ALL) ALL" >> /etc/sudoers
- 最后将/user/hadoop文件授权给hadoop用户使用
chown –R hadoop:hadoop /user/hadoop - 检查Linux动态库
ll /lib64/libc.so.6
centos 6.9动态库为libc-2.12.so,hadoop2.8需要libc-2.14.so,所以我们要讲内核升级一下,到http://ftp.gnu.org/gnu/glibc/下载
下载glibc-2.14.tar.bz2
下载glibc-linuxthreads-2.5.tar.bz2
将文件解压缩
tar -jxvf /user/hadoop/software/glibc-2.14.tar.bz2
tar -jxvf /user/hadoop/software/glibc-linuxthreads-2.5.tar.bz2
export CFLAGS="-g -O2"
在/user/hadoop/software中执行
./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install
动态库安装时间比较长,安装后再次执行ll /lib64/libc.so.6查看显示是否为libc-2.14.so,如果没有安装libc-2.14.so则启动时会报错。
以上12项在各节点安装后,准备工作创建完成,重启各节点,我们开始干活儿了。
三、开始搭建:
- 切换到hadoop用户。首先我们要创建hadoop使用目录。切换用户主目录。
mkdir –p hdfs/{data/master,name} tmp (主节点)
mkdir –p hdfs/{data/node1,name} tmp (从node1节点)
mkdir –p hdfs/{data/node2,name} tmp (从node2节点)
请注意,3个节点的目录不要一致,否则启动管理台后无法看到从节点。
如果搭建过程中需要重新格式文件服务,请将以上目录删除后,重新创建再次格式化,否则从节点可能无法启动。
- 创建SSH免账号密码登录
使用hadoop创建免ssh登录。
ssh-keygen -t rsa -P '' 一路回车
cd .ssh
cp id_rsa.pub authorized_keys
chmod 600 authorized_keys
不用使用最高权限,这样也不安全
使用ssh-copy-id name@ip 将生成的登录信息放到2个子节点中去。
ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
验证master是否可以使用ssh免密码方式登录子节点
ssh node1
ssh node2
- 进入/user/hadoop/etc/hadoop目录,该目录主要是配置目录,其中包括主从节点配置,管理台配置等 hdfs-site.xml
core-site.xml<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hdfs/data/master</value> master、node1、node2根据各节点名称换路径
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration><configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131702</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
mapred-site.xmlcp mapred-site.xml.template mapred-site.xml
yarn-site.xml<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration><configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8100</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8101</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8102</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8103</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8888</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
</configuration> - 设置完毕,最后设置一下环境变量后,准备启动hadoop
编辑hadoop-env.sh
25 # export JAVA_HOME=${JAVA_HOME} 将25注释掉,反正我配置环境变量找不到JAVA_HOME添加
export JAVA_HOME=/usr/java/jdk1.7
编辑yarn-env.sh一样加上
export JAVA_HOME=/usr/java/jdk1.7
- 设置2个节点
master
node1
node2 - 将hadoop复制到各节点中去
scp -r /user/hadoop hadoop@node1 /user
scp -r /user/hadoop hadoop@node2 /user
注意:别忘记更改hdfs-site.xml各节点的路径
/home/hadoop/hdfs/data/node1
/home/hadoop/hdfs/data/node2
- 启动前格式化磁盘格式
hdfs namenode -format
格式化日志中,发现Exiting with status 0 则为格式化成功,否则删除各节点的tmp,hdfs目录
- 启动程序
进入/usr/hadoop/sbin目录
启动程序./start-all.sh
四、检查与查看结果
- 进程检查
./bin/hdfs dfsadmin -report
或者使用命令jps
- 日志检查
检查hadoop-hadoop-datanode-node2.log
检查hadoop-hadoop-datanode-node1.log
- 节点查看
查看http://10.211.55.10:50070/ - 管理端检查
查看http://10.211.55.10:8888