一、安装VMware Workstation 12 Pro
二、安装操作系统CentOS 6.5(网络适配器按如下设置,这样能保证网络互通)
三、安装lrzsz
软件主要是用来方便上传文件,这个看个人需要,有的喜欢用ftp相关工具
切换root用户运行如下命令安装:
yum -y install lrzsz
可以正常使用rz、sz命令上传、下载数据了。
使用方法:
上传文件
# rz filename
下载文件
# sz filename
四、安装64位java8(java安装是全局的,建议采用root操作)
官网下载java(下载前需要先接受协议):https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
上传安装文件jdk-8u45-linux-x64.tar.gz,至目录/opt/java/jdk-8u45-linux-x64.tar.gz,并解压tar -xzvf jdk-8u45-linux-x64.tar.gz
配置环境变量(root用户编辑),打开vi /etc/profile配置文件,把如下代码添加到末尾处
export JAVA_HOME=/usr/local/software/jdk1.8.0_231
export JRE_HOME=/usr/local/software/jdk1.8.0_231
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
执行profile文件让文件生效:source /etc/profile
检查java是否安装成功:java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
修改主机名
切换到root用户,vi /etc/sysconfig/network
HOSTNAME后面的值改为想要设置的主机名。
vi /etc/hosts文件,添加如下配置
192.168.0.108 master (添加在第一行就可以,重启服务器生效)
生成密钥:
ssh-keygen -t rsa 一直回车
cd ~/.ssh
会生成.ssh/id_rsa、id_rsa.pub两个文件,分别为私钥,公钥。
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 authorized_keys
验证是否成功(由于是伪分布式所以直接使 用localhost就可以了)
ssh localhost(第一次需要输入密码)——如提示yes/no,输入yes
注意:单机也需要生成密钥,主要是需要用ssh启动dataNode,没有ssh免登陆就不能一键启动命令操作。
关闭防火墙(必须采用root用户操作)
存在以下三种方式:
1、service方式(即时生效,重启后失效)
查看防火墙状态:
[root@master ~]# service iptables status
iptables:未运行防火墙。
开启防火墙:
[root@master ~]# service iptables start
关闭防火墙:
[root@master ~]# service iptables stop
2、iptables方式(即时生效,重启后失效)
先进入init.d目录,命令如下:
[root@master ~]# cd /etc/init.d/
[root@master init.d]#
然后
查看防火墙状态:
[root@master init.d]# /etc/init.d/iptables status
暂时关闭防火墙:
[root@master init.d]# /etc/init.d/iptables stop
重启iptables:
[root@master init.d]# /etc/init.d/iptables restart
3、永久生效
[root@master]# vi /etc/selinux/config
设置 /etc/selinux/config 文件中的 SELINUX="disabled " ,然后重启。
或者
开启:[root@master]# chkconfig iptables on
关闭:[root@master]# chkconfig iptables off
五、安装Hadoop
apache 官网下载(http://hadoop.apache.org/)hadoop-3.1.1.tar.gz
上传到 服务器/home/zengms/tools/hadoop-3.1.1.tar.gz
解压tar -xzvf hadoop-3.1.1.tar.gz ——解压到指定目录(这边解压到/home/zengms/install/hadoop-3.1.1目录)
配置当前用户的hadoop环境(注:环境变量可在 ~/.bash_profile(只对当前用户有效 ) 或者 /etc/profile(对所有用户有效) 中配置)
编辑~/.bash_profile文件,添加一下代码(这里设置在当前用户下)
PATH=$PATH:$HOME/bin
export PATH
export JAVA_HOME=/opt/java/jdk1.8.0_45
export HADOOP_HOME=/home/zengms/install/hadoop-3.1.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
执行profile文件让文件生效:source ~/.bash_profile
检查hadoop版本 hadoop version
Hadoop 3.1.1
Source code repository https://github.com/apache/hadoop -r 2b9a8c1d3a2caf1e733d57f346af3ff0d5ba529c
Compiled by leftnoteasy on 2018-08-02T04:26Z
Compiled with protoc 2.5.0
From source with checksum f76ac55e5b5ff0382a9f7df36a3ca5a0
This command was run using /home/zengms/install/hadoop-3.1.1/share/hadoop/common/hadoop-common-3.1.1.jar
修改/home/zengms/install/hadoop-3.1.1/etc/hadoop/hadoop-env.sh 文件,添加上JAVA_HOME
vi hadoop-env.sh 添加如下:
export JAVA_HOME=/opt/java/jdk1.8.0_45 ——必须是绝对路径
执行source hadoop-env.sh使其生效
六、hadoop本地模式(独立模式):
特点:不具备HDFS,只能测试MapReduce 程序(安装完hadoop后就已经是本地模式);
测试(需指定到hadoop-mapreduce-examples-3.1.1.jar目录再执行):
cd hadoop-3.1.1
mkdir input
$ cp etc/hadoop/*.xml input
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar grep input output 'dfs[a-z.]+'
$ cat output/*
看到如下:2018-12-18 04:44:06,454 INFO mapreduce.Job: map 0% reduce 100% 即已经运行完成,可以到/home/zengms/install/demo/output/wc_demo1下查看包含part-r-00000 和_SUCCESS两个文件
cat part-r-0000 即可看到hadoop 的mapreduce 的结果。
hadoop 的mapreduce 结果默认是按照字典顺序排好序的。
七、Hadoop伪分布式模式
特点:具备hadoop所有的功能,在单机模拟hadoop分布式环境。把nameNode,dataNode 安装在同一个节点上,还需要装一个MapReduce的运行环境yarn。需要配置如下内容:
(1)HDFS:主节点:nameNode;数据节点:dataNode;
(2)yarn:是一个容器,用来运行MapReduce程序;类似jsp需要运行在tomcat容器一样。yarn也有两部分:
主节点:ReourceManager
从节点:NodeManager
core-site.xml配置:($HADOOP_HOME/etc/hadoop/core-site.xml的confirgation 标签中)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.115:9000</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>4320</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<!-- 以下为存放临时文件的路径 -->
<value>/home/zengms/install/hadoop-3.1.1/data/tmp</value>
</property>
</configuration>
hdfs-site.xml配置($HADOOP_HOME/etc/hadoop/hdfs-site.xml 的confirgation 标签中)
<configuration>
<!--HDFS冗余度(副本数量),默认是3,这里配置成1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/zengms/install/hadoop-3.1.1/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/zengms/install/hadoop-3.1.1/data/datanode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/home/zengms/install/hadoop-3.1.1/data/namesecondary</value>
</property>
</configuration>
完成配置,但还不能启动,需对hdfs先进行格式化,
执行命令:hdfs namenode -format
看到日志信息即格式化成功。
启动namenode和datanode(进入hadoop下的sbin目录):
start-dfs.sh
通过jps命令可以查看启动情况:
[zengms@master hadoop-3.1.1]$ jps
3334 DataNode
3225 NameNode
3515 SecondaryNameNode
3662 Jps
启动完成后可以通过hdfs可视化端口 9870,访问地址:http://192.168.0.115:9870 查看详情;
也可以通过hdfs命令操作文件或者文件夹:
查看hdfs文件列表:[zengms@master ~]$ hdfs dfs -ls /
创建hdfs文件夹:[zengms@master ~]$ hdfs dfs -mkidr /test 或者 [zengms@master ~]$ hdfs dfs -mkdir /test/test1
上传文件到HDFS上:[zengms@master ~]$ hdfs dfs -put /home/zengms/install/hadoop-3.1.1/test.txt /test
查看HDFS上的文件:[zengms@master ~]$ hdfs dfs -cat /test/test.txt
删除HDFS上的文件:hdfs dfs -rm -f /test/test.txt
停止namemode和datanode:stop-dfs.sh
hadoop-daemon.sh命令
hdfs --daemon start namenode
hdfs --daemon start datanode
hdfs --daemon stop namenode
hdfs --daemon stop datanode
YARN 配置伪分布式模式
mapred-site.xml配置:($HADOOP_HOME/etc/hadoop/mapred-site.xml的confirgation标签中)
<configuration>
<--配置MapReduce运行框架-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*
</value>
</property>
</configuration>
yarn-site.xml配置:($HADOOP_HOME/etc/hadoop/yarn-site.xml的confirgation标签中)
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<!--配置NodeManager执行任务方式:shuffle:洗牌 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
启动YARN(启动 ResourceManager daemon 和 NodeManager daemon)
start-yarn.sh
yarn的http可视化端口8088,访问地址:http://192.168.0.115:8088
停止yarn:stop-yarn.sh
WorldCount官网示例运行
- 运行 hadoop命令
- worldcount标签,examples自带运行对应的程序
- 输入数据源
- 输出数据源
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.1.jar wordcount /test/yarn_test.txt /test/output
注意:后面两个输入和输出路径,默认都是HDFS文件系统中的路径,而不是Linux系统下的当前路径。
部署遇到的问题:
启动(start-dfs.sh)namenode和datanode时候报如下错误(一般出现在格式化后):
java.io.IOException: Incompatible clusterIDs in /tmp/hadoop-zengms/dfs/data: namenode clusterID = CID-749f22b8-d0a3-49be-91e6-c5d4e02563d6; datanode clusterID = CID-97c649d3-3ff2-4cc3-b769-5059e512f77e
原因:每次hdfs namenode -format会重新创建一个namenodeId,而data目录包含了上次format时的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空data下的所有目录.
解决办法:停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.datanode.data.dir目录。重新格式化namenode。如果没有指定在自动在系统根目录下的tmp目录下(/tmp/hadoop-zengms/dfs/data,其中hadoop-zengms的zengms是对应的用户名)
Jmx接口信息:http://192.168.0.115:9870/jmx
两个常用监控信息:
http://192.168.0.115:9870/jmx?qry=Hadoop:service=NameNode,name=NameNodeInfo
http://192.168.0.115:9870/jmx?qry=Hadoop:service=NameNode,name=FSNamesystemState