最近一段时间忙于学术,好久没有更新博客了。最近一直好奇hadoop,学hadoop第一步就需要部署hadoop(虽然现在有现成的单节点hadoop可以下载),我自己在部署中遇到了各种各样的问题,陆陆续续弄了几天才搞定。现在我完整的过程写下来,方便大家参考。
最后的效果是4个node的hadoop集群^_^
系统CentOS7.3 : CentOS-7-x86_64-DVD-1611.iso
Hadoop: hadoop-2.8.1.tar.gz
虚拟机: VMware12
JAVA: jdk-8u144-linux-x64.gz
连接工具: SecureCRT 8.0(也可以不用,方便windows里连接linux输入代码)
传输工具: WinSCP
在VMware新建虚拟机,导入系统安装ISO,选择最小安装(当然也可以桌面版本安装),安装系统。安装完成系统后,进入root帐号。输入ifconfig,查看网络配置。在网络配置中查看网卡的名称,我这里是ens33,当然也可能是其他名字。然后在命令行输入vi /etc/sysconfig/network-scripts/ifcfg-ens33,在下列参数修改为
ONBOOT="yes"
IPADDR="192.168.237.130"
GATEWAY="192.168.237.2"
DNS1="192.168.237.2"
当然这些网络配置也可以在安装CentOS中配置,但切记不要自动配置IP地址,防止IP地址自动更换。
然后使用连接工具,连接这台虚拟机,如果可以正常连接,说明配置正确,以后的任何操作就都可以在连接工具中完成,方便快捷。
修改主机名称
hostname node
然后配置/etc/sysconfig/network
修改以下内容:
NETWORKING=yes
HOSTNAME=node
修改IP组
vi /etc/hosts
192.168.237.130 node
192.168.237.131 node1
192.168.237.132 node2
192.168.237.133 node3
1.使用传输工具将hadoop和java安装包传输到CentOS中。
2.建立用户组hadoopGroup,并创建Hadoop用户
groupadd hadoopGroup
useradd –d /home/hadoop –g hadoopGroup hadoop
3.解压文件
a) tar –zvxf jdk-8u144-linux-x64.gz 到当前目录
b) 将解压出的JDK文件夹名称修改为jdk1.8,并移动到/usr/local/jdk1.8中
c) tar –zvxf hadoop-2.8.1.tar.gz 到当前目录,并把文件移动到/home/hadoop/hadoop-2.8.1中 (mv hadoop-2.8.1 /home/hadoop/hadoop-2.8.1)
4.创建文件夹
a) mkdir –p /home/hadoop/hadoop-2.8.1/hdfs
b) mkdir –p /home/hadoop/hadoop-2.8.1/name
c) mkdir –p /home/hadoop/hadoop-2.8.1/data
d) mkdir –p /home/hadoop/hadoop-2.8.1/logs
e) mkdir –p /home/hadoop/hadoop-2.8.1/tmp
给hadoopGroup赋权
f) chgrp –R hadoopGroup /home/hadoop/hadoop-2.8.1
g) chmod –R g=rwx /home/hadoop/hadoop-2.8.1
5.导入环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/tools/jar:$JAVA_HOME/lib/dt.jar
export HADOOP_HOME=/home/hadoop/hadoop-2.8.1
export PATH=-:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
export HADOOP_LOG_DIR=/home/hadoop/hadoop-2.8.1/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
6.测试
输入java -version,如果出现
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
说明java配置成功
输入hadoop,如果出现
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
CLASSNAME run the class named CLASSNAME
or
where COMMAND is one of:
fs run a generic filesystem user client
version print the version
jar run a jar file
note: please use "yarn jar" to launch
YARN applications, not this command.
checknative [-a|-h] check native hadoop and compression libraries availability
distcp copy file or directories recursively
archive -archiveName NAME -p * create a hadoop archive
classpath prints the class path needed to get the
Hadoop jar and the required libraries
credential interact with credential providers
daemonlog get/set the log level for each daemon
trace view and modify Hadoop tracing settings
Most commands print help when invoked w/o parameters.
说明hadoop配置成功。
(以下配置文件均在hadoop安装后文件夹里的etc/hadoop文件夹里)
a) 配置hadoop-env.sh yarn-env.sh mapred-env.sh 里JAVA_HOME的值 JAVA_HOME=/usr/local/jdk1.8
b) 配置slaves
node1
node2
node3
c) 配置core-site.xml
<property>
<name> fs.defaultFSname>
<value>hdfs://node:9000value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/home/hadoop/tmp/hadoop-${user.name}value>
property>
d) 配置hdfs-site.xml
<property>
<name>dfs.namenode.http-addressname>
<value>node:50070value>
property>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node1:50090value>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
<property>
<name>dfs.namenode.name.dirname>
<value>file:///home/hadoop/hadoop-2.8.1/hdfs/namevalue>
property>
<property>
<name>dfs.datanode.data.dirname>
<value>file:///home/hadoop/hadoop-2.8.1/hdfs/datavalue>
property>
<property>
<name>dfs.namenode.checkpoint.dirname>
<value>file:///home/hadoop/hadoop-2.8.1/hdfs/namesecondaryvalue>
property>
<property>
<name>dfs.webhdfs.enabledname>
<value>truevalue>
property>
<property>
<name>dfs.stream-buffer-sizename>
<value>131072value>
property>
e) 配置mapred-site.xml
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>node:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>node:19888value>
property>
f) 配置yarn-site.xml
<property>
<name>yarn.resourcemanager.hostnamename>
<value>nodevalue>
property>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.classname>
<value> org.apache.hadoop.mapred.ShuffleHandler value>
property>
<property>
<name>yarn.resourcemanager.addressname>
<value>node:8032value>
property>
<property>
<name>yarn.resourcemanager.scheduler.addressname>
<value>node:8030value>
property>
<property>
<name>yarn.resourcemanager.resource-tracker.addressname>
<value>node:8031value>
property>
<property>
<name>yarn.resourcemanager.admin.addressname>
<value>node:8033value>
property>
<property>
<name>yarn.resourcemanager.webapp.addressname>
<value>node:8088value>
property>
在VMware中克隆node虚拟机,克隆三个,保证是完整克隆。
同二步骤,修改克隆的虚拟机的IP地址和主机名称,与IP集群中的一一对应。
成功与否,可以用连接工具进行检测。
在node节点上:
命令行输入
ssh-keygen
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
来生成SSH-KEY,并放入信任的KEY文本中
其他节点:
ssh-keygen
ssh-copy-id –I ~/.ssh/id.rsa.pub node
来生成SSH-KEY,并放入node中的信任的KEY文本中
在node节点上:
scp /root/.ssh/authorized_keys node1:/root/.ssh/
scp /root/.ssh/authorized_keys node2:/root/.ssh/
scp /root/.ssh/authorized_keys node3:/root/.ssh/
将信任KEY文本发送到其他节点中
首先初始化hdfs: hdfs namenode -format
出现Exiting with status 0 说明成功
命令行中输入start-dfs.sh
和start-yarn.sh
选取hadoop内的WordCount例子进行测试。
首先在HDFS上创建目录,执行命令(hdfs dfs 可以换成 hadoop fs):
hdfs dfs -mkdir -p /data/wordcount
hdfs dfs -mkdir -p /output/
将本地文件上传到HDFS中,就是我们要计数的文本,这里选取一个配置文件当作文本:
hdfs dfs -put /home/hadoop/hadoop-2.8.1/etc/hadoop/core-site.xml /data/wordcount/
运行WordCount例子
hadoop jar /home/hadoop/hadoop-2.8.1/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /data/wordcount /output/wordcount
运行的结果保存在HDFS中的/output/wordcount,可以用hadoop -ls查看文件或者hadoop -cat查看内容
哈哈,至此,hadoop集群的部署已经完成,然我们享受hadoop,享受HDFS,享受mapreduce吧